我有一个 cakephp 应用程序,其类别模型充当树。我通过 csv 文件导入了约 100 个类别。
我希望能够按名称快速对所有类别重新排序,以便我的索引 View 排序正确。
我尝试了 reorder
method from the Tree behavior :
$this->Category->reorder(array(
'id' => null,
'field' => 'Category.name',
'order' => 'ASC'
));
但它没有做任何事情。我在这里遗漏了什么吗?
谢谢:)
最佳答案
我刚刚对此进行了研究,并得出结论,不可能在 generatetreelist()
方法中对结果进行排序 - 至少没有简单的方法,无需循环并手动移动每个结果节点。解决这个问题的最佳方法是使用普通的 find 方法,并将第一个参数设置为“线程”,然后您可以像任何查询一样应用 SQL 排序。我的类别模型中有这个方法:
public function getThreaded($conditions = array()) {
return $this->find('threaded', array(
'order' => 'Category.name ASC',
'contain' => false
));
}
这将返回一个按字母顺序排列的所有父类别的数组,其中“子”键包含另一个数组,该数组也按字母顺序排列!我使用 contain => false
来减少返回的数据(线程返回有关每个节点父节点的数据,我们不需要知道),如果需要,您可以更改它以包含额外的数据。
我知道这与 generatetreelist()
并不 100% 相同,但当您控制输出时,它肯定更整洁且更灵活。如果您确实需要模拟 generatetreelist()
的行为,您可以从上面循环遍历数组,如下所示:
$treeArray = array();
foreach($category as $parent) {
$treeArray[] = $parent['Category']['name'];
if(!empty($parent['children']) {
foreach($parent['children'] as $childCategory) {
$treeArray[] = ' - '.$childCategory['Category']['name'];
}
}
}
希望这有帮助。
关于cakephp - 树行为 : how to quickly reorder existing data by a certain field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350990/