2012-05-06 6 views
1

id、name、id_parent構造のカテゴリテーブルがあります。私はatk4を使用しており、インデントされたサブカテゴリをドロップダウンして表示したい。だから:アジャイルツールキットのインデントされたカテゴリのドロップダウン

home 
---cat1 
---cat2 
------subcat2.1 
------subcat2.2 
---cat3 etc 

私はこれを改善する方法を見てみたいですが、何か作業をしました。現在、私はhasMany()に基づいて再帰的なSQLクエリを持っています。これは、再クエリーせずに行うことができるように感じます。そして、主な心配は、私は今モデルで定義されたスタイリングを持っているが、私はどのように移動するのか分からないということです。私は自分自身でコントローラの機能を学習しようとしましたが、これまで管理していませんでした。これまでの私のコード:ページで

モデル

<?php 
class Model_Category extends Model_Table { 
    public $table='category'; 
    function init() { 
    parent::init(); 
    $this->addField('id_parent'); 
    $this->addField('name'); 
    $this->hasMany('Category','id_parent'); 
    } 

    function tree($prefix='') { 
    $r=array(); 
    $childs=$this->ref('Category'); 
    foreach($childs as $child) { 
     $r[$childs->id]=$prefix.$childs['name']; 
     $r=array_merge($r,$childs->tree($prefix.'---')); 
    } 
    return $r; 
    } 
} 

$f=$this->add('Form'); 
$m=$this->add('Model_Category'); 
$m->load(1); // start recursive from home category 
$f->addField('dropdown','category')->setValueList($m->tree()); 
+0

ここでも:http://phpmagister.com/dropdown-with-indented-categories-in-agile-toolkit-16025/ – romaninsh

+1

実際、このソリューションはかなり良いようです。私は木を調査していました。単一のクエリツリーを使いたい場合、これを使うことができます:http://stackoverflow.com/questions/169817/is-it-possible-to-query-a-tree-structure-table-in -mysql-in-a-single-query-to-an。レベルごとにクエリをグループ化できますが、それによってメモリ消費量が増加します。いずれにしてもページ設定が難しい。あなたの解決策を保つ、それは良いです。 – romaninsh

+0

レビューを投稿するのに時間がかかりました。私は実際にlpos/rposカラムでカテゴリを試しました。ただし、lpos/rposカラムを再構築するには再帰が必要です。私はhasMany()再帰でこの再構築のために働いているコードを持っていますが、ここで説明した状況ではこれらのフィールドはありません。 –

答えて

0

すでに構築されてきたものを実装してForm_Field_Dropdownを拡張するクラスを作成します。完了したら、フォークされたatk4-addonsに追加してください。普遍的に使えるように調整します。ここにあるものは良いレシピですが、普遍的な解決策がコミュニティを助けるでしょう。

https://github.com/atk4/atk4-addons/blob/master/misc/lib/Form/Field/drilldown.php

ファイルで説明したように、モデルを設定し、親と子フィールドの両方が必要になります:ボブ寄稿

+0

私はそれが働いている:https://github.com/si4dev/atk4-addons/blob/master/misc/lib/Form/Field/drilldown.phpとその使用方法:モデルカテゴリ:$ this-> hasMany( 'カテゴリ '、' id_parent '); $ f-> addField( 'ドリルダウン'、 'カテゴリ') - > setModel( 'Model_Category'); –

+0

私の次の課題は、これをCRUD/GRIDで使用する方法です。 –

+0

アドオンをインストールしていただきありがとうございます。私は正しく動作するように修正しました。私は別の答えを追加します。 – romaninsh

関連する問題