Используйте пользовательскую переменную в описании категории
-
13-12-2019 - |
Вопрос
Недавно я создал пользовательскую переменную с именем storecount
- который я буду программно увеличивать для каждого магазина, добавленного в мой плагин поиска магазинов.
Я хотел бы показать это в различных местах, включая описания продуктов и категорий, чтобы, когда мы добавляем новый магазин, нам не приходилось искать каждое вхождение количества магазинов и вручную увеличивать его на 1.
С использованием {{customVar code=storecount}}
не работает в описаниях категорий.Есть ли способ получить эту переменную, не разбирая ядро Magento на куски?
Решение
Самый простой способ сделать это, состоит в том, чтобы использовать тот же процессор шаблона для описания категории, как он используется для блоков CMS и контента страниц.
Тот из модуля виджета.
Для этого вам нужно расширение.Давайте назовем это StackExchange_Catalog
.
Вам понадобятся следующие файлы.
app/etc/modules/StackExchange_Catalog.xml
- файл декларации
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Catalog>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
<Mage_Cms />
<Mage_Widget />
</depends>
</StackExchange_Catalog>
</modules>
</config>
.
app/code/local/StackExchange/Catalog/etc/config.xml
- файл конфигурации
<?xml version="1.0"?>
<config>
<global>
<catalog>
<content>
<tempate_filter>widget/template_filter</tempate_filter>
</content>
</catalog>
</global>
</config>
.
Очистите кеш и попробуйте снова.
Другие советы
без взлома Magento Core, да;Без кода нет.
Вы можете написать наблюдатель, который слушает событие Catalog_Category_oLoad_After и манипулировать описанием категории.
/ edit: Когда категория с измененным описанием сохраняется, пользовательская переменная также будет сохранена, поэтому это не отличное решение.
Другой способ — добавить свой storecount
переменную в файл шаблона с помощью:
// To get the TEXT value of the custom variable:
Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('text');
// To get the HTML value of the custom variable:
Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('html');
Если вам интересно, какой шаблон, включите Подсказки по пути к шаблону и вы сможете найти, где добавить его в файл шаблона.Не переопределяйте основной шаблон, скопируйте его в каталог вашей темы, поэтому сделайте его копию где-нибудь вроде app/design/frontend/[Your Design Package]/[Your Theme]/template/catalog/category/view.phtml
.Если вы не будете следовать этой практике, вы потеряете свою работу при обновлении Magento.
Это, вероятно лучше попрактиковаться создавайте блоки CMS и добавляйте их в файлы шаблонов, чтобы их было легче редактировать и отключать.
создайте свой блок CMS с вашим контентом, включая {{customVar code=storecount}}
и добавьте его туда, где вам нужно, в файлы шаблона с помощью:
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('your_cms_block_identifier')->toHtml() ?>
ОБНОВЛЯТЬТолько что внимательно рассмотрел Ответ Мариуса - его решение кажется очень аккуратным и добавляет Magento конституционности, которая вам нужна.