Удалите статический блок или виджет баннера через пользовательскую обновление макета
-
12-12-2019 - |
Вопрос
Все страницы категории продукта в нашем магазине - два столбца (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 обрабатывается для виджетов.
.
<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"/>
.
.
<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>
.