Autor Zpráva
Jan Vonka
Profil
Zdravým, dělám si administrační system a chtěl bych tam nějaký pěkný řazení položek v menu něco na tomto stylu. V tomto scriptu se to sice pěkně přehazuje ale nedají se ty data odeslat, nevíte o nějakém řešení?
martin1312
Profil
pred časom som niečo podobné hľadal -> http://linssen.me/entry/extending-the-jquery-sortable-with-ajax-mysql/
Jan Vonka
Profil
ááá výborně díky moc ;)
martin1312
Profil
Jan Vonka:
len mi to nejako nechce frčat v IE
Jan Vonka
Profil
to už se nějak pořeší a i kdyby ne tak je to fuk ;) ještě jednou díky ;)
martin1312
Profil
offtopic: inak celkom ma zaujíma čo to bude až to bude :) môžeš mi dať tvoj skype prípadne e-mail?
Jan Vonka
Profil
martin1312:
janvonka@janvonka.cz

je to zatím ve vývoji, dělám si to hlavně pro radost :) časem to hodím i někam ke stažení, třeba se to bude někomu líbit :)
peta
Profil
Nechapu, proc to resi v tom demu 4 sql dotazy. Vzdyt poradi se da zapsat do jedine polozky, oddelene carkami (treba do tabulky 'order'). Pak se pri kazdem presunu nemusi zapisovat 4 sql dotazy nebo v pripade 200 polozek, 200 sql dotazu.
Jeste jinak bych to rekl. Poradi polozek je vlastnost slozky, ve ktere se nachazeji. Nikoliv vlastnost polozky.
Edit: Mozna by bylo slozitejsi pak napsat sql dotaz pro SELECT ve vybranem poradi.
Jan Vonka
Profil
To je dobrý nápad si ten script trochu přepsat, je pravda že by to mohlo zdržovat, ale mi přijde mnohem jednoduší to udělat přes ty jednotlivé položky, je to prostý a dobrý na úpravy
svanda777
Profil
Potřebuji poradit: Jak by se to přesouvání položek upravilo pro řádky tabulky místo položek seznamu?
Jan Vonka
Profil
nemusí se to vůbec upravovat, akorád musíš myslet na to že tabulka se skládá z

<table>
    <tbody>
        <tr>
            <td>xxx</td>
        </tr>
    </tbody>
</table>

de o to tbody

takže tam udělaj něco jako

<script type="text/javascript"> 
    // When the document is ready set up our sortable with it's inherant function(s) 
    $(document).ready(function() { 
        $("table tbody").sortable({ 
            handle : '.handle', 
            update : function () { 
                var order = $('#test-list').sortable('serialize'); 
                $("#info").load("process-sortable.php?"+order); 
            } 
        }); 
    }); 
</script>
novacek90
Profil
Ahoj,
asi mě vyhodíte s tím, že to patří na nette forum, ale nevíte někdo jak to samé rozchodit pod nette??

Díky ;)
Jan Vonka
Profil
nevím jak by se to zapsalo správně pro nette, moc ho neumím ale není problém to natvrdo zkopírovat :D
klidně na prasáka to dát do nějakého presenteru a jap jen ten js upravit tak aby ti vedl na tu funkci, někde jsem to už používal, skusím se po tom mrknout
novacek90
Profil
Jan Vonka:
tak já už jsem se o něco pokusil ale zatím mi to nedopadlo moc zdárně takže kdyby jsi našel jak jsi to někde použil tak by to bylo super já bych si to už pak nějak poupravil
Jan Vonka
Profil
JS:
    $(".to-do-list tbody").sortable({
        handle : '.glyphicon-move',
        update : function () {
            var order = $('.to-do-list tbody').sortable('serialize');
            $("#ajax").load("changeOrder?"+order);
        }
    });

router:
        $router[] = new Route('changeOrder', 'Homepage:changeOrder');

HomepagePresenter.php:
    public function actionChangeOrder()
    {
        foreach ($_GET['id'] as $position => $item)
        {
            $article = $this->database->table(_TAB_TO_DO)->get($item);
            $article->update(array("order" => $position));
        }

        $this->redirect('Homepage:');
    }

takhle to mám a jedeto ;)


je to prasárna ale co :D
novacek90
Profil
Hele díky zkusím to a když se mi to povede upravit do lepšího stavu tak ti to sem postnu ;)
Jan Vonka
Profil
ok :)
novacek90
Profil
Prosimtě a jak vypadá ten tvůj latte soubor? protože mě to pořád nějak nejde. javascript mi jede ale nějak mi to tam nepostne ty data.
Díky
Jan Vonka
Profil
Homepage/default.latte

...
    <table class="table to-do-list">
    <thead>
            <tr>
                <td>comment</td>
                <td>date</td>
                <td></td>
            </tr>
        </thead>
        <tbody>
        {foreach $todos as $todo}
            <tr id="id_{$todo->id}">
                <td>
                    {$todo->comment}
                </td>
                <td>{!$todo->date|date:'%d.&nbsp;%m.&nbsp;%Y %H:%M:%S'}</td>
                <td>
                    <div class="glyphicon glyphicon-move"></div>
                </td>
            </tr>

        {/foreach}
        </tbody>
        <tfoot>
            <tr>
                <td>comment</td>
                <td>date</td>
                <td>edit</td>
                <td></td>
            </tr>
        </tfoot>
    </table>
...
novacek90
Profil
Ahoj,
tak jsem to vyřešil takto (dá se říct že je to taky prasárna), ale snad to někomu pomůže.
Ještě na tom budu dělat -> zpracování do db přesunu do modelu a pokusím se použít v javascriptu $.nette.ajax než $.get.
Ale tohle je plně funkční.

latte
    <ul id="sortable" class="sortable">
        <li n:foreach="$titles as $ord => $title" class="ui-state-default" id="{$title}">
            <img src="{$basePath}/images/arrow.png" alt="move" class="handle" />{$title}
        </li>
    </ul>


 <script>
    $(function() {
        $("#sortable").sortable({
            revert: true,
            handle: '.handle',
            update : function () {
                $.get({link menuPosition!}, {'positions': $("#sortable").sortable("toArray")});
            }
        });
    });
</script>

presenter
public function handleMenuPosition(array $positions)
{
    if (!$positions) throw new \InvalidArgumentException("Empty \$positions");

    foreach($positions as $position => $title) {
        $this->database->table('pages')->where('title', $title)->update(array('ord' => $position));
    }
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0