0

我试图循环多个类别,因此用户在标题标签中插入(2,43,11)之类的,它应该显示当前它只获取一个 ID 的类别。有任何想法吗?谢谢!

循环代码:

<?php $currentID = Mage::getSingleton('cms/page')->getContentHeading(); ?>
<?php if($currentID): ?>
<?php

$categoryid = $currentID;

$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');

foreach ($collection as $_product) { ?>

<li>

</li>

<?php } ?>
<?php endif;?>
4

1 回答 1

2

您很可能忘记在第一行拆分类别 ID。尝试这个:

<?php $currentID = explode(',', Mage::getSingleton('cms/page')->getContentHeading()); ?>
<?php foreach($currentID as categoryid): ?>
<?php

$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');

foreach ($collection as $_product) { ?>

<li>

</li>

<?php } ?>
<?php endforeach;?>

但是,无论如何,这确实是一种糟糕的编码风格,您需要将此类代码移动到单独的块中并使用一些缓存来防止无用的过载。我不建议在生产中使用它。

一些建议,

  • Mage::getModel替换new
  • 如果您使用类别集合(少数类别),使用 Mage::getModel('catalog/category')->getCollection() 并使用 filter 'in' 过滤它是有意义的(参见下面的示例)
  • 尽量避免使用 addAttributeToSelect('*'),这是相当昂贵的操作(在资源使用的意义上)

这个好一点

<?php 
     $ids = explode(',', Mage::getSingleton('cms/page')->getContentHeading()); 
     $categories = Mage::getModel('catalog/category')->getCollection()
         ->addAttributeToFilter('entity_id', array('in' => $ids));

     foreach($categories as $category) {
        $collection = $category->getProductCollection();
        $collection->addAttributeToSelect('needed_attribute_code');
        foreach ($collection as $_product) { 
?>
         <li>

         </li>

<?php } } ?>

但仍然看起来很难看,因为它在模板中。这样的代码应该在块类中。

于 2013-11-11T18:59:33.767 回答