1

ID、名前、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());
4

2 に答える 2

0

既に構築したものを実装する Form_Field_Dropdown を拡張するクラスを作成します。完了したら、フォークされた atk4-addons に追加します。普遍的に使用できるように調整します。ここにあるのは良いレシピですが、普遍的なソリューションはコミュニティに役立ちます.

于 2012-05-10T15:25:47.570 に答える
0

Bob の寄稿により、新しいアドオンを atk4-addons に追加しました。

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

ファイルに記述されているように、モデルには親フィールドと子フィールドの両方を設定する必要があります。

$this->hasMany('Category','id_parent');
$this->hasOne('Category','id_parent')->display(array('form'=>'misc/drilldown'));

テストケースと階層ドロップダウンの良い例は、ここで見ることができます:

このアドオンを実際に書いてくれた Bob に感謝します。がんばり続ける!

于 2012-05-13T20:52:10.093 に答える