11
votes

Catégories de tri de Magento en fonction de la position dans Admin

J'aimerais savoir comment trier cette liste de catégories (j'ai suivi ce tutoriel ici http://www.devinrolsen.com/magento-custom-category-listing-Block/ ) dans Magento par position dans le panneau d'administration? Actuellement, il est trié par ID

<?php
$cats = Mage::getModel('catalog/category')->load(3)->getChildren();
$catIds = explode(',',$cats);
?>
<ul>
<?php foreach($catIds as $catId): ?>
    <li>
        <?php
            $category = Mage::getModel('catalog/category')->load($catId);
            echo '<a href="' . $category->getUrl() . '">';
            echo $category->getName() . '</a>';
        ?>
    </li>
<?php endforeach; ?>
</ul>


0 commentaires

5 Réponses :


1
votes

Je suggère fortement à lok ici d'abord http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-Collections ainsi que d'autres articles de la base de connaissances sont un must Tout Magento Dev. XXX


7 commentaires

Commentaire vraiment utile :) quel nom de champ avez-vous utilisé pour le tri


$ CATS = MAGE :: getmodel ('Catalogue / catégorie') -> Addattributetosort ("posi tion", 'desc') -> charge (3) -> getchildren ();


@Anton - qui ne pourrait jamais fonctionner car un modèle est un modèle, pas une collection. Seules collections peuvent être triées.


Vous avez raison, j'ai oublié la partie de collection qui peut être facilement utilisée au lieu de la charge


Hmm, toujours ne fonctionne pas. Peut-être que les paramètres d'administration pour la position sont stockés ailleurs.


Et ne devrait pas être addattributetosort à la fin?


Utilisez l'approche ClockworkEeek mes suggestions sont théoriques et jamais testées



22
votes

Vous faites beaucoup trop de travail pour vous essayer de traiter des identifiants et des trucs. Ce qui suit est déjà trié par position en standard.

<?php
$cats = Mage::getModel('catalog/category')->load(3)->getChildrenCategories();
?>
<ul>
<?php foreach($cats as $category): ?>
    <li>
        <a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a>
    </li>
<?php endforeach; ?>
</ul>


6 commentaires

Merci mec, cela fonctionne comme un charme. Vous avez sauvé ma journée. Et oui, c'est une approche de nettoyage de façon que d'utiliser des identifiants de chat et des trucs. Merci encore ;)


Cela a l'air bien, mais je ne semble pas pouvoir obtenir une version de travail. En utilisant magento 1.6. Je voudrais charger des catégories pour le magasin actif.


@Lucas - Pour modifier cet extrait, remplacez l'ID de catégorie (dans ce cas 3 ) avec mage :: app (app () -> getStore () -> gretrootcatedoryId () . Cependant, il existe d'autres moyens également, regardez le catalogue Catalogue / Navigation / *. PHTML Modèles pour voir comment il est normalement fait, ou ouvre une nouvelle question si vous avez besoin de quelque chose de spécifique.


Brillant! J'ai aussi ajouté la condition si ($ sous-catégorory-> getisactive ()) { à l'intérieur de la boucle.


Ceci est très concis, comment accéderiez-vous d'autres attributs comme la description du produit? Ne semble pas être disponible de cette façon.


@Johnsnails ici, $ CATS est déjà chargé de sorte que vous ne puissiez pas être modifié plus loin et inclut uniquement "URL", "Nom", "Nom", "Position", "IS_RANCHOR" Les champs "is_active". Pour voir la description également, vous devez utiliser l'une des autres réponses qui vous permet d'appeler addattributeetoselect () .



3
votes

c'est ce que j'ai fait: xxx

après avoir récupéré les catégories: xxx

et ensuite: xxx

inverseur du retour (1 et -1) changerait évidemment la commande. Cela a bien fonctionné pour moi. J'espère que cela aide quelqu'un.


0 commentaires

0
votes
    <?php
    $model_category =   Mage::getModel('catalog/category')->load($_category->getEntityId());
    $sub_categories     =   $model_category->getCollection();
    $sub_categories     ->  addAttributeToSelect('url_key')
                        ->  addAttributeToSelect('name')
                        ->  addAttributeToFilter('is_active',1)
                        ->  addIdFilter($model_category->getChildren())
                        ->  setOrder('position', 'ASC')
                        ->  load();
    ?>
    <?php   foreach($sub_categories->getData()  as  $each_subcat):  ?>
        <?php   $model_subcat   =   Mage::getModel('catalog/category')->load($each_subcat['entity_id']);    ?>                              
    <?php   endforeach; ?>

0 commentaires

5
votes

Si vous souhaitez trier les catégories par la position créée dans AdminHTML, vous pouvez alors, puisque Catalogue / Catégorie est une instance de Mage_Catalog_model_resource_category_collection , crée une requête où vous spécifiez. Ce que vous voulez sélectionner, filtrer et / ou trier.

Le cas ici est d'obtenir des catégories à partir de catalog_category_entity Sélectionnez uniquement le nom, filtrant après l'ID et Trier la requête sur la position . < / p> xxx


3 commentaires

Pourquoi est-ce une solution? S'il vous plaît, expliquez.


Cela fonctionne si vous utilisez 'position' au lieu de "nom" .


Cette réponse s'attend également à ce que vous soyez itération par les catégories des parents. Pour les catégories de niveau supérieur, vous pouvez utiliser: -> addattribuetofilter ('niveau', 2) sans le -> addfieldtofilter ('parent_id', $ califory) ligne. Le niveau est 2 pour les catégories de niveau supérieur, car ils sont sous la catégorie racine, ce qui est le niveau 1.