Я немного с этим справился, и я пробовал всевозможные разные значения с разных сайтов и пару электронных книг по этому вопросу. Полное отсутствие какого-либо подобия последовательности затруднило это, чем я считаю.Magento layout XML не создает экземпляры блоков
В основном я не могу использовать его content.phtml
, чтобы переопределить раздел content
в главном шаблоне. Я сделал это, заставляя его через контроллер, как так:
$content = $this->getLayout()->createBlock(...);
$this->getLayout()->getBlock('content')->append($content);
Но я чувствую, что это делает мой модуль негибкой и делает части конфигурации излишним и вводящим в заблуждение.
Я использую блок под названием Company_AdvSearch_Block_Results
, который расширяет Mage_Core_Block_Template
.
Файл: config.xml
<?xml version="1.0"?>
<config>
<modules>
<Company_AdvSearch>
<version>0.1.0</version>
</Company_AdvSearch>
</modules>
<frontend>
<routers>
<advsearch>
<use>standard</use>
<args>
<module>Company_AdvSearch</module>
<frontName>advsearch</frontName>
</args>
</advsearch>
</routers>
<layout>
<updates>
<advsearch module="Company_AdvSearch">
<file>advsearch.xml</file>
</advsearch>
</updates>
</layout>
</frontend>
<global>
<blocks>
<advsearch>
<class>Company_AdvSearch_Block</class>
</advsearch>
</blocks>
</global>
</config>
Файл: advsearch.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<advsearch_index_index>
<reference name="head">
<action method="setTitle">
<title>Advanced Search</title>
</action>
</reference>
<reference name="root">
<action method="setTemplate">
<template>page/2columns-left.phtml</template>
</action>
</reference>
<reference name="content">
<block type="advsearch/results" name="advsearch" template="advsearch/content.phtml"/>
</reference>
</advsearch_index_index>
</layout>
Итак:
- Как бы я получить его на самом деле обновить
content
раздел макета? - Как обновить другие части (то есть
left
) с помощью моего модуля, чтобы они могли получить доступ к тем же данным?
Update
Я столкнулся с еще одной проблемой. После вставки этого блока ссылочные компоненты успешно исчезли.
<reference name="left">
<remove name="catalog.compare.sidebar"/>
<remove name="left.reports.product.viewed"/>
<remove name="catalog.product.related"/>
</reference>
Теперь, после того, комментируя этот блок, и даже удаление файла с сервера, я не могу получить эти части, чтобы вернуться на эту страницу. Кажется, что полностью игнорируется XML-файл (как нормальное кэширование, так и кэширование компилятора отключены).
Пробовали ли вы просто называя это 2 строки в ваше действие '$ this-> loadLayout(); $ this-> renderLayout();' –
Я полагаю, я должен был это указать. Да, они там. –