bagaimana cara mengurutkan kategori seperti yang ditampilkan di admin?

15

Ini kodenya:

$category = Mage::getModel('catalog/category')->load(3);
$subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();
$subCatIds = explode(',',$subCats);
$currentUrl = Mage::helper('core/url')->getCurrentUrl();

Mohon saran, terima kasih!

Aamir Siddique
sumber

Jawaban:

24
$category = Mage::getModel('catalog/category')->load(3);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', $category->getId())
        ->addAttributeToFilter('is_active', 1)//get only active categories if you want
        ->addAttributeToSort('position');//sort by position

foreach ($children as $child){
    //do something with $child
}
Marius
sumber
Terima kasih atas cuplikannya, tetapi saya ingin tetap menggunakan kode saya karena sudah diterapkan dalam templat. Bagaimana kita bisa menambahkan atribut semacam ini ke dalam $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? Terima kasih!
Aamir Siddique
3
Anda dapat menggantinya getChildren()dengan getChildrenCategories()dan Anda harus mengurutkannya. Tapi tetap saja Anda mendapatkan objek kategori bukan id. Jika Anda membutuhkan id, Anda dapat mengulangi kategori anak dan menyatukan id mereka. Saya tidak begitu mengerti apa yang ingin Anda capai.
Marius
^^ Saya berharap itu lebih jelas didokumentasikan di suatu tempat yang getChildren()mengembalikan ID yang tidak disortir, dan getChildrenCategories()mengembalikan objek yang diurutkan. Ini menjelaskan segalanya bagi saya, magento mendokumentasikan diri mereka seperti yang sekarang tidak membuat ini jelas.
waffl
cukup yakin getChildrenCategories tidak bekerja dengan Kategori Rata
Samyer
7

Anda bisa mencoba mengubah kode Anda untuk menggunakan campuran getChilderCategories () dan fungsi toArray yang bagus.

$category = Mage::getModel('catalog/category')->load(3);
$subCats = $category->getChildrenCategories();
$subCatIds = $subCats->toArray(array('entity_id'));

Fungsi getChildrenCategories akan memberi Anda koleksi dalam urutan yang sama dengan bagian admin dan kemudian dengan memanggil toArray dan hanya meminta atribut entit_id Anda akan memiliki array id kategori

array(3) {
    [10]=> array(1) {
         ["entity_id"]=> string(2) "10"
    }
    [13]=> array(1) {
        ["entity_id"]=> string(2) "13"
    }
    [18]=> array(1) {
        ["entity_id"]=> string(2) "18"
    }
}
David Manners
sumber