Используйте пользовательскую переменную в описании категории
Недавно я создал пользовательскую переменную с именем storecount
, которую я буду программно увеличивать для каждого магазина, добавляемого в мой плагин поиска магазинов.
Я хотел бы показать это в разных местах, включая описания продуктов и категорий, поэтому, когда мы добавляем новый магазин, нам не нужно находить каждое количество магазинов и вручную увеличивать его на 1.
Использование {{customVar code=storecount}}
не работает в описаниях категорий. Есть ли какой-нибудь способ, которым я могу это получить переменная без взлома ядра Magento на куски?
3 answers
Самый простой способ сделать это - использовать тот же процессор шаблонов для описания категорий, что и для блоков 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, да; без кода, нет.
Вы можете написать наблюдателя, который прослушивает событие catalog_category_load_after, и управлять описанием категории там.
/Редактировать: Когда категория с измененным описанием будет сохранена, пользовательская переменная также будет сохранена, так что это не лучшее решение.
Другим способом было бы добавить вашу переменную 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.