Удалите статический блок или виджет баннера через пользовательскую обновление макета

magento.stackexchange https://magento.stackexchange.com//questions/52081

Вопрос

Все страницы категории продукта в нашем магазине - два столбца (NAV слева) формат. Одной из наших категорий необходимо иметь элемент в левой колонке. Каждая другая другая страница, которая имеет этот левый столбец, имеет этот элемент в нем, и должен продолжать это делать, но для этих нескольких незначительных подкатегорий.

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

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

<reference name="left">
<remove name="my_static_block_id"></remove>
</reference> 
.

Это не работает!

Я также пробовал Untencildenen:

<action method="unsetChildren"/>
.

Это удалило все из левой колонны (не желательно)

Есть ли какой-то способ сделать это? Возможно, где-то я не смотрел? Спасибо.

Это было полезно?

Решение

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

mage_widget_model_widget_instance :: generatelayoutupdatexml

$hash = Mage::helper('core')->uniqHash();
$xml .= '<block type="' . $this->getType() . '" name="' . $hash . '"' . $template . '>';
.

Это затем позже сохраняется в базе данных, например, в моем случае случайное имя было 9D10A0D6931D18586A907B201633D878, который вы можете видеть, находится в изображении ниже.

Введите описание изображения здесь

Итак, хотя, вероятно, не очень практично сделать это в теории, есть способ сделать это, не прикасаясь к любому коду, вы можете создать поиск виджета для записи обновления в таблице базы данных GeneracodicTagcode Получите свое новое имя блока, а затем сделать Например, core_layout_update Однако, если вы внесите любые изменения в виджет, XML и имя будут обновляться, и вам нужно еще раз обновить ссылки на имя. Я попробовал Uncessild и, казалось, не работал, я подозреваю, что связано с порядком, в котором XML обрабатывается для виджетов.

Я думаю, у вас есть два реальных варианта:

1) Добавьте новый Text_List в левую колонку, правый столбец или где-либо еще, что вы захотите добавить виджеты, а затем Mabey удалит их на странице. Вы можете сделать это в ваших темах local.xml, как это.

    <reference name="left">
<block type="core/text_list" name="widgets_left" as="widgets_left" translate="label">
                        <label>Widgets Left</label>
                    </block>
</reference>
.

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

e.g Введите описание изображения здесь

Вы можете сделать либо на приведенной ниже в конкретной категории, которую вы хотите, чтобы они были удалены из:

<reference name="left">
<action method="unsetChild"><name>widgets_left</name></action>
</reference>

<remove name="widgets_left"/>
.

2) В качестве альтернативы вы можете просто добавить их в XML, как приведен ниже, но звучит мне, как вы хотите, как можно больше контроля через CMS и почему не для меня виджеты. < / P >.

<reference name="left">
            <block type="cms/block" name="cms_left_block_name">
                <action method="setBlockId"><block_id>my_block_identifier_from_magento_backend</block_id></action>
            </block>
        </reference>
.

Вы будете иметь ссылку, фиксируемую как «CMS_LEFT_BLOCK_NAME», которую вы можете использовать для выполнения удаления, либо Uncessildild.

Другие советы

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

Например, блок, добавленный в родительский блок «влево» следующим образом:

<reference name="left">
    <block type="cms/block" name="my_block_name">
         <action method="setBlockId"><block_id>some_static_block_identifier</block_id></action>
    </block>
</reference>
.

будет удален следующим образом:

<reference name="left">
    <action method="unsetChild"><child>my_block_name</child></action>
</reference>
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top