Удалить блок из группы


Как удалить блок из группы?

В catalog.xml есть (около строки 210) такие действия, как:

<block type="catalog/product_view_description" name="product.description" as="description" template="catalog/product/view/description.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
</block>

Таким образом, product.info получает группу под названием detailed_info с блоками product.description и product.attributes.

Насколько я знаю, я могу удалить целый блок с помощью

<action method="unsetChild"><name>NAME</name></action>

Но это не работает для групп.

В app/code/core/Mage/Core/Block/Abstract.php есть реализации для этих действий. Такие методы, как addToParentGroup() и addToChildGroup(), а также setChild() и unsetChild(). Но нет никаких методы, такие как removeFromParentGroup() или removeFromChildGroup().

Как удалить блок из такой группы?

Идеи:

  • Скопируйте весь catalog.xml к моей теме и удалите из нее эту строку.
  • Сделайте перезапись для app/code/core/Mage/Core/Block/Abstract.php в собственном модуле, чтобы добавить методы для удаления блоков из группы

Первая идея - это наименьшее, что я хотел бы сделать, и я бы не хотел делать вторую.

Существует ли какой-либо стандартный способ magento для этого?

Author: Akerus, 2014-06-05

2 answers

Вы можете сделать следующее в своем local.xml:

<reference name="product.info">
    <action method="unsetChild">
        <alias>description</alias>
    </action>
    <action method="insert">
        <block>product.description</block>
    </action>
</reference>

Или для атрибутов продукта соответственно:

<reference name="product.info">
    <action method="unsetChild">
        <alias>additional</alias>
    </action>
    <action method="insert">
        <block>product.attributes</block>
    </action>
</reference>

Когда вы это сделаете, блок не будет отображаться в группе, но вы сможете отобразить его в другом месте.

 7
Author: Simon, 2014-07-20 15:10:35

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

Оригинальный способ отображения группы в Magento:

<?php foreach ($this->getChildGroup('detailed_info', 'getChildHtml') as $alias => $html):?>
    <div class="box-collateral <?php echo "box-{$alias}"?>">
        <?php if ($title = $this->getChildData($alias, 'title')):?>
        <h2><?php echo $this->escapeHtml($title); ?></h2>
        <?php endif;?>
        <?php echo $html; ?>
    </div>
<?php endforeach;?>

Добавив проверку к псевдониму дочернего блока, вывод можно опустить:

<?php foreach ($this->getChildGroup('detailed_info', 'getChildHtml') as $alias => $html):?>
    <?php if($alias != 'description'): ?>
        <div class="box-collateral <?php echo "box-{$alias}"?>">
            <?php if ($title = $this->getChildData($alias, 'title')):?>
                <h2><?php echo $this->escapeHtml($title); ?></h2>
            <?php endif;?>
            <?php echo $html; ?>
        </div>
    <?php endif; ?>
<?php endforeach;?> 

Этот обходной путь полезен, если вам нужно использовать блок description обычным способом в другой точке. Если нет, будьте уверены, чтобы проверить решение от Саймона.

 1
Author: Akerus, 2014-08-19 08:32:48