Magento отображает описание подкатегорий в категории list.phtml - PullRequest
0 голосов
/ 26 августа 2011

Я получил страницу категории со списком подкатегорий в Magento .В списке есть изображение и имя, но я также хочу показать описание этих подкатегорий.Я попытался просто добавить

<strong><?php echo $this->htmlEscape($_category->getDescription()) ?></strong>

, но он не работает.

РЕДАКТИРОВАТЬ: я получаю подкатегории традиционным способом:

<?php if (!$_categoryCollection->count()): ?>
<p class="note-msg"><?php echo $this->__('There are no subcategories matching the selection.') ?></p>
<?php else: ?>
<div class="category-products">
    <?php $_collectionSize = $_categoryCollection->count() ?>
    <?php $_columnCount = $this->getColumnCount(); ?>
    <?php $i=0; foreach ($_categoryCollection as $_category): ?>
        <?php if ($i++%$_columnCount==0): ?>
        <ul class="products-grid">
        <?php endif ?>
            <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
                <a href="<?php echo $_category->getUrl() ?>" class="product-image"><img class="photo" src="<?php echo $this->getCategoryImage($_category, 214, 184); ?>" width="214" height="184" alt="<?php echo $_category->getName() ?>" />
                <strong><?php echo $this->htmlEscape($_category->getName()) ?></strong>
                <strong><?php echo $_category->getDescription() ?></strong>
                </a>
            </li>
        <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
        </ul>
        <?php endif ?>
    <?php endforeach ?>
</div>

Я пытался обновитьпубличная функция getChildrenCategories($category) в файле category.php путем добавления ->addAttributeToSelect(’description’), но она не работает.

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Я не могу понять, что именно вы делаете неправильно, но, возможно, я все еще могу помочь.Я успешно отобразил описания дочерних категорий в list.phtml, и вы можете адаптировать то, что работает для меня, к вашим собственным целям.Ниже приведена урезанная версия кода, которая работает для меня:

<?php $children = explode( ",", $this->getCurrentCategory()->getChildren() ); ?>
<div class="category-products">
    <ul class="products-grid">
        <?php foreach( $children as $child ): ?>
            <?php $_child = Mage::getModel( 'catalog/category' )->load( $child ); ?>
            <li class="item"><?php echo $_child->getDescription(); ?></li>
        <?php endforeach; ?>
    </ul>
</div>

Большая разница между тем, что вы делаете, и моим примером выше, заключается в том, что метод getChildren () для объекта модели каталогавозвращает массив идентификаторов категории, а затем я использую идентификаторы категории для загрузки соответствующих экземпляров модели дочерней категории.Моя память здесь может быть неправильной, но я, кажется, помню, что предметы, возвращенные из коллекции Magento, не содержат полных данных, которые вы получаете, когда вы загружаете по id.

Я не уверен, будет ли этозначительно влияет на производительность или нет (я бы предположил, что загрузка коллекции происходит быстрее, чем загрузка отдельных моделей), но она работает, поэтому я не жалуюсь ...

Надеюсь, это поможет.

Ура,Zac

0 голосов
/ 24 мая 2013

У меня примерно такая же идея на веб-сайте, над которым я работаю, где я отображаю подкатегории в виде сетки. В то время как я использовал метод индивидуальной загрузки информации о категории / продукте по идентификаторам, я немного влюбился в использование метода «Mage :: getModel ('') -> getCollection ()».

Это то, что я использовал в своих подкатегориях, и я был очень доволен этим, поскольку он собирает всю информацию сразу:

<?php
    if(Mage::registry( 'current_category' )->getId()) {

        $_currentCategoryId = Mage::registry( 'current_category' )->getId();

    } else {    //Get Root Category Id if not in a category

        $_currentCategoryId = Mage::app()->getStore()->getRootCategoryId();
    }

    $_subCategories = Mage::getModel( 'catalog/category' )->getCollection()
                        ->addAttributeToSelect('*')
                        ->addFieldToFilter('parent_id',array('eq' => $_currentCategoryId))
                        ->addFieldToFilter('include_in_menu',array('eq' => '1'))
                        ->addFieldToFilter('is_active', array('eq' => '1'))
                        ->addAttributeToSort('position', 'asc');
?>
<?php if(count($_subCategories) > 0): ?>

<!--This is where the sub-category layout would go.-->

<?php else: ?>

<!--Do something else if there are no sub-categories.-->

<?php endif; ?>

Это будет захватывать все видимые подкатегории текущей категории, ИЛИ захватывать базовые категории (из идентификатора корневой категории) магазина, если вы решите показать шаблон на любой другой странице. Вы также можете пойти дальше и определить определенные атрибуты с помощью addAttributeToSelect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...