我剛纔一直在尋找到這一點,並已得出的結論是不可能下令在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'];
}
}
}
希望這有助於。
哦,我這次沒有想到......這是一個很好的解決方法,就像你說的那樣,聽起來最終更靈活。謝謝! – Leimi 2011-06-01 07:16:51
@Dunhamzzz:這很有幫助,謝謝:) – 2014-11-04 11:47:26