我有一个带有 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());