1

問題:

構成ページに、次のようなネストされたリストがあります。

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

リスト上の各 li は、別の順不同リストを内部に持つことができます。これには、li が含まれ、別の順不同リストを内部に含めることができます。

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

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

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

質問:

構成を解析するための「最良の」方法または間違っていない方法は何ですか?それをphpパーサーに渡すにはどうすればよいですか?

すべての構造を備えたxml、JSON、または同様のものを生成$('#configuration-list').sortable('serialize')する方法と同様の方法はありますか? $('#configuration-list').sortable('toArray')この機能を持つ ui.sortable または別のプラグインの拡張?

前もって感謝します。

4

3 に答える 3

1

<li> にラジオ/チェック/テキストボックスが含まれているかどうかは明確ではないため、提案は異なる場合があります。かなり前に(5〜6年前だと思います)、同様の状況に遭遇しました。そのとき、配列構造を思い起こさせる名前を使用しました(正しく覚えていれば、古すぎる思い出です:/)

いえ

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

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

于 2009-03-23T18:39:47.623 に答える
0

.sortable('serialize')オプションの 2 番目のパラメーターを取ります(または、serialize()単一のパラメーターを取ります。神はプラグイン API が嫌いです):

id 属性にアンダースコアが含まれていることを確認してください。それらは次の形式である必要があります: "set_number"たとえば、id 属性 を持つ 3 つの要素のリストはfoo_1foo_5foo_2シリアル化され foo[]=1&foo[]=5&foo[]=2ます。アンダースコア、等号、またはハイフンを使用して、セットと数値を区切ることができます。たとえば、またはfoo=1すべてを にシリアル化します。foo-1foo_1foo[]=1

于 2009-03-23T19:37:47.220 に答える
0

大きな入れ子になったセットを保存する場合は、入れ子になったセット モデルを検討する必要があります。これは、MySQL やその他の非 XML データベースがそうであるように、フラット テーブルに階層データを格納するための別のアプローチです。NSM は、セットとその中のすべての子の範囲を定義するために、左と右の 2 つの数値で動作します。

私にとって非常に便利なリンク: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

PHPコントローラー(またはデータを保存する前に処理/制御する場所)では、構成を単純にループできます。この場合、他のポスターが言ったように、フォーム入力に配列値を使用することを好みます。

これにはフォーム要素を使用する必要があります。私は非表示のフィールドを好みます。フィールドの名前に node_# のような名前を付けます。# は子の親 ID を表します。そして、値は現在の子の ID でなければなりません。

単純な for ループを使用して「node_#」をループスルーし、要素値から 1 つずつ配列値を取得します。ノードが通過するときに、同じ親を持つ各ノードの並べ替え順序を 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"] に格納されます。

于 2009-11-18T10:41:15.350 に答える