【问题标题】:How to show all subcategories of a particular category in alphabetical order with Magento如何使用 Magento 按字母顺序显示特定类别的所有子类别
【发布时间】:2014-07-14 12:18:33
【问题描述】:

我想按字母顺序显示特定类别的所有子类别,就像我在管理中添加的那样。 我在此页面中显示我的所有子类别app/design/frontend/default/mytheme/template/catalog/product/product-listing.phtml

代码是

<?php
$categories = Mage::getSingleton('catalog/layer')->getCurrentCategory()->getChildren();
$catArray = explode(',', $categories);
?>
<div class="categories_list">
<?php
foreach($catArray as $child){

$parentCategoryId = $child; 
$categoriesgot = Mage::getModel('catalog/category')->load($parentCategoryId)->getChildren();
$catArraygot = explode(',', $categoriesgot);
$categoriesCount = count($catArraygot);

//echo $categoriesCount;

    $_child = Mage::getModel( 'catalog/category' )->load($child );
    $products_count = Mage::getModel('catalog/category')->load($child)->getProductCount();
//############################################################################################################

//$parentCategoryId = $child;   
//$categoriesgot = Mage::getModel('catalog/category')->load($parentCategoryId)->getChildren();
$category_name = Mage::registry('current_category')->getName(); 


if($categoriesCount >= 1 AND $products_count < 1)
{
    $value = $categoriesCount." Categories";
}
else if($categoriesCount == 1 AND $products_count > 0)
{
    $value = $products_count." Products";
}
else if ($categoriesCount >= 1 AND $products_count > 1)
{
    $value = $categoriesCount." Categories";

}if($categoriesCount == 1 AND $products_count == 0)
{
    $value = $products_count." Products";
}

//echo $products_count;
    ?>


      <div class="listing">
      <a href="<?php echo $_child->getUrl() ?>">
            <img src="<?php echo $_child->getImageUrl();?>" alt="<?php echo $_child->getName()?>"  width="135" height="135"/>

               <h3 class="product-name"><?php echo $_child->getName() ?></h3></a>
                        <?php if($category_name != "Brands"){?>     <p><?php echo $value;?></p><?php }?>
  </div>
<?php 
}
?>
</div>

我不知道子类别的显示顺序,因为子类别都混在一起了。 如果有人知道这一点,请帮助我。 谢谢!

【问题讨论】:

    标签: php magento magento-1.8


    【解决方案1】:

    我认为这对你有用

    <?php
    $cats =Mage::getModel('catalog/category')->getCategories(10);
    $catIds = explode(',',$cats);
    
    $categories = array();
    foreach($catIds as $catId) {
           $category = Mage::getModel('catalog/category')->load($catId); 
           $categories[$category->getName()] = $category->getUrl();
    }
    
    ksort($categories, SORT_STRING);
    ?>
    
    <ul>
    <?php foreach($categories as $name => $url): ?>
        <li>
        <a href="<?php echo $url; ?>"><?php echo $name; ?></a>
        </li>
    <?php endforeach; ?>
    </ul>
    

    【讨论】:

    • 请在我上面的代码中使用此代码,并请在此处发布更新的代码。
    • 只需将 getCategories(10) 中的 (10) 替换为您的类别 id 的 id
    【解决方案2】:

    如果您有父类别,您可以按照字母顺序或在后端输入的顺序获取子类别列表。

    $category = Mage::getSingleton('catalog/layer')->getCurrentCategory();
    $children = Mage::getModel('catalog/category')->getCollection()
         ->addAttributeToSelect('*')
         ->addAttributeToFilter('parent_id', $category->getId()) //get only direct children of main category
         ->addAttributeToFilter('is_active', 1) //in case you want only the active categories
         ->addAttributeToSort('name') //sort by name
         //->addAttributeToSort('position') //in case you want to sort by position
    ;
    
    foreach ($children as $child) {
        //do something with $child
    }
    

    这样可以避免在可能导致性能问题的循环中调用load

    【讨论】:

    • 请把我的代码贴在上面。你告诉我我会在哪里添加这个代码
    • 请在我上面的代码中使用你的代码并发布更新的代码
    • @PrinceKumar。您的代码有点长,并且缺少缩进。我不知道它到底去了哪里。应该是在顶部。试着看看它适合哪里,或者让你的代码看起来更漂亮,这样我就可以轻松阅读它。
    • 显示错误 Call to a member function getId() on a non-object
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多