2009-03-23 6 views
1

問題:htmlで入れ子になったjqueryソート可能なリストを永続化しますか?

私は私の設定ページにネストされたリストを持って次のようになります。

<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> 

リチウムが含まれている内部の別の順不同のリストを持つことができ、リスト上の各リチウム、することができます内部に他の順序付けられていないリストを含む。

すべてのリストは、jquery ui.sortableプラグインを使用してソート可能です。項目はリストを通して切り替えられません。

リスト内のノードの合計が1kを超えています。

設定を保存すると(リンクを保存する)、リストの構成を最初のノードから最下位のノードに送信して、サーバーに解析し、データベース内のすべての要素の順序を保存する必要があります。このために、phpが使用されます。

質問:

「最良」以下、誤った設定を解析する方法、およびどのように私は私のPHPパーサに渡す必要がありますいただきましたか?

$('#configuration-list').sortable('serialize')または$('#configuration-list').sortable('toArray')と似たメソッドがあります。このメソッドは、XML、JSONなどすべての構造体を生成しますか?この機能を持つui.sortableや他のプラグインの拡張?

ありがとうございます。

答えて

1

<li>にラジオ/チェック/テキストボックスが含まれているかどうかは不明なので、提案は異なる場合があります。多くの時間(私は思う5-6年前)私は同様の状況に遭遇しました。その時、配列構造を思い出す名前を使用しました(私が正しく覚えていれば、あまりにも古い記憶:/)

私は。

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

多分あなたを助けることができます。

+0

これらは入力が含まれていますが、保存された位置と入力データを記録する必要があります。そのため、問題は解決しますが、問題は解決しません。ありがとう! –

0

.sortable('serialize') takes an optional second parameter(または、serialize()つのパラメータを取り、神、私はプラグインAPIを憎む。):

は、id属性が アンダースコアが含まれることを確認してください。彼らは形式でなければなりません。例えば "set_number"、idの3要素 リストはfoo_1foo_5foo_2foo[]=1&foo[]=5&foo[]=2にシリアライズされます属性。 にアンダースコア、等号またはハイフンを使用すると、 はセットと番号を区切ります。 の場合foo=1またはfoo-1またはfoo_1の場合すべて をfoo[]=1にシリアライズします。

+0

私はそれを使用しましたが、serializeはリストをシリアライズするだけで、それぞれの 'ul'はプラグインの別のソート可能なインスタンスであるため、入れ子は無視します。 –

+0

Ahhhhhhhh、ネストされたソート可能です。うーん、プラグインは、私が認識しているものを連載するためのものをあなたに与えるものではありません。 DOMを自分で歩かなければならないかもしれません。 –

0

あなたが入れ子になったセットモデルを検討すべきである大規模なネストされたセットを保存している、それは、MySQLやその他の非XMLデータベースである平らなテーブル、階層的なデータを格納するための別のアプローチです。 NSMは、セットの範囲とその中のすべての子を定義するために、左右の2つの数字で動作します。

私には非常に便利だったリンク: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

PHPのコントローラで

(またはあなたが扱うwhereever /それを保存する前にデータを制御)することができます単にあなたの構成をループ。他のポスターと同じように、この場合forminputsに配列値を使用することをお勧めします。

これはフォーム要素を使用する必要があります。私は隠しフィールドを優先します。フィールドの名前はnode_#と同じように指定します。#は子の親IDを表します。そして、その値は現在の子のIDでなければなりません。

単純なforループから 'node_#'を使用して、要素値1から配列値を1つずつ取得します。ノードが通過するときに、同じ親を持つ各ノードのsortorderを1増加させます。

サンプル:

<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"/> 

を4 T/M 7は$ _POST [ "Node_1の"]の配列として格納されるノード。