0

我正在尝试修改在 Magento 网站前端绘制类别列表的方式(简单的想法)。我有一个类别列表,我想将这些类别与 jquery 手风琴分开并使用,所以对于 EG。我想要一个标题“2010 年及以上”,其中包含 ID 为 1 到 10 的类别。然后我想要一个标题“2011”,其中包含 ID 为 11 到 20 的实时类别。

下面的默认类别代码只是循环遍历 ID 并在 a 中回显类别列表<UL>- 但我想自定义<UL>

<?php $collection = $this->_getCollection(); ?>
<?php if (count($collection) > 0) : ?>



    <?php foreach ($collection as $_category ) : ?>            

                <li>
                    <a href="<?php echo $this->getUrl('gallery/category/view/', array('id' => $_category->getId())); ?>"><?php echo $this->htmlEscape($_category->getName()) ?></a>
                </li>

    <?php endforeach ?>

<?php endif; ?>

只见树木不见森林!- 我想将 ID 拉入一个数组并根据 IF 语句绘制新结构,但在构建数组时没有运气。

谁能看到一个快速的方法,我可以打破循环说,如果 ID 是 1 到 10 然后列出<li class="2010">,然后继续为 ID 11 到 20<li class="2011"> 例如。?

非常感谢

4

2 回答 2

1

尝试检查您不想显示的类别 ID 并用于continue;获取下一个:

<?php foreach ($collection as $_category ): ?>
<?php if ($_category->getId() == 10) { continue; } ?>
    <li>
        <a href="<?php echo $this->getUrl('igallery/category/view/', array('id' => $_category->getId())); ?>"><?php echo $this->htmlEscape($_category->getName()) ?></a>
    </li>
<?php endforeach ?>
于 2012-05-02T10:01:25.073 回答
0

你应该划分你的问题。一部分是输出,可以用函数表示:

<?php

$htmlLi= function($class, $url, $name) {
?>
                <li class="<?php echo $class; ?>">
                    <a href="<?php echo $url; ?>"><?php echo $name; ?></a>
                </li>
<?php
}

然后你有逻辑来决定基于一些 id 的类名:

$classById = function($id) {
    $class = $id < 11 ? '2010' : '2011';
    return $class;
}

你最后想把它放在一起:

<?php $collection = $this->_getCollection(); ?>
<?php if (count($collection) > 0) : ?>

    <?php foreach ($collection as $_category) {
        $id    = $_category->getId());   
        $class = $classById($id);
        $url   = $this->getUrl('gallery/category/view/', array('id' => $id);
        $name  = $this->htmlEscape($_category->getName());
        $htmlLi($class, $url, $name);
    } ?>

<?php endif; ?>

这也表明,您自己的函数_getCollection()尚未以您需要的格式返回数据。返回循环真正需要的字段可能会更好:

$class, $url and $name
于 2012-05-02T10:21:43.763 回答