İç içe jquery sıralanabilir listesi geçerli

3 Cevap php

The Problem:

Şöyle benim yapılandırma sayfasında iç içe geçmiş bir listesi var:

<a id='Save'>Save<a>
<ul id='configuration-list'>
   <li id='e1'>Elem A
      <ul>
          <li id='ey'>Elem Y </li>
          <li id='ex'>Elem X
             <ul><!-- and so on until 5 levels of nesting --></ul>
          </li>
          <li id='ez'>Elem Z </li>
      </ul>
   </li>
   <li id='e45'>
      <ul>
         <!-- more li's and ul's nesting here -->
      </ul>
   </li>
 <!-- even more li's and ul's nesting here -->
   <li id='eN'>
   </li>

</ul>

Listedeki her li içindeki diğer Sırasız liste içerebilir li içerir içinde başka bir Sırasız liste, olabilir.

Tüm liste jquery ui.sortable eklenti kullanarak, sıralanabilir. Öğeler listesinden aracılığıyla devreye edilemez.

Listedeki düğümlerin toplam fazla 1k olduğunu.

Yapılandırma (Kaydet bağlantı) kaydedildiğinde ben bunu ayrıştırmak ve tüm elemanlar veritabanında sipariş kurtaracak sunucuya liste sırası yapılandırmasını (derin düğüme ilk formu) göndermek zorunda. Bunun için, php kullanılır.

The questions:

Nedir 'en iyi' ya da yapılandırmasını ayrıştırmak için daha az yanlış yol ve nasıl benim php ayrıştırıcı geçmesi gerekir?

Bana bir XML, JSON veya tüm yapısı ile benzer oluşturur $('#configuration-list').sortable('serialize') benzer ya da $('#configuration-list').sortable('toArray'), bir yöntem var mı? Bu özelliğe sahip ui.sortable bir uzantısı ya da başka bir eklenti?

Şimdiden teşekkürler.

3 Cevap

Bu açık değilse

  • radyo / çek / textboxes içerir, bu nedenle öneri değişebilir. Çok zaman önce (i 5-6 yıl düşünüyorum) Ben de benzer durumla karşılaştı, ve ben dizi yapılarının hatırlatarak isimlerini kullanmış olduğunuz zaman (eğer doğru hatırlıyorum, çok eski hatıralar :/) ettik

    Yani

    <input type="text" name="nodes[node1][item1]" />
    <input type="text" name="nodes[node1][item2]" />
    

    Belki size yardımcı olabilir.

  • .sortable('serialize') (or, serialize() tek bir parametre alır isteğe bağlı ikinci bir parametre alır. Tanrı) eklenti API'leri nefret:

    make sure the id attributes include an underscore. They must be in the form: "set_number" For example, a 3 element list with id attributes foo_1, foo_5, foo_2 will serialize to foo[]=1&foo[]=5&foo[]=2. You can use an underscore, equal sign or hyphen to separate the set and number. For example foo=1 or foo-1 or foo_1 all serialize to foo[]=1.

    Eğer iç içe Set Model düşünmelisiniz geniş iç içe setleri kaydederken, bu MySQL veya herhangi diğer non-XML veritabanı olan, düz bir masaya hiyerarşik veri depolamak için farklı bir yaklaşım var. NSM içinde bir seti ve tüm oğul aralığını tanımlamak için iki sol numaraları ve sağ ile çalışır.

    A link which was very usefull to me: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

    PHP denetleyicisi size yapılandırmaları aracılığıyla sadece loop yapabilirsiniz (veya işlemek whereever / kaydetmeden önce verilerinizi kontrol). Ben diğer posterleri dediği gibi, bu durumda forminputs için dizi değerlerini kullanmayı tercih.

    Sen # çocuk için ebeveyn-id temsil node_ # gibi alan bir şey adını verin, ben gizli alanları tercih, bu form eleman kullanmak gerekir. Ve değeri daha sonra geçerli çocuğun kimliği olmalıdır.

    'Node_ #' loopthrough ve 1 ile element-1 değerinden arrayvalues ​​almak için döngü basit kullanın. Bir düğüm tarafından geçtiğinde 1 ile aynı ana ile her düğüm için SıralamaDüzeni artırılması.

    Örnek:

    <input type="hidden" name="node_1[]" value="4"/> 
    <input type="hidden" name="node_1[]" value="5"/>
    <input type="hidden" name="node_1[]" value="6"/>
    <input type="hidden" name="node_1[]" value="7"/>
    

    Sonra 4 t / m 7 $ _POST ["node_1"] bir dizi olarak saklanır düğümleri.