2013-12-16 4 views
0

Я немного с этим справился, и я пробовал всевозможные разные значения с разных сайтов и пару электронных книг по этому вопросу. Полное отсутствие какого-либо подобия последовательности затруднило это, чем я считаю.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> 

Итак:

  1. Как бы я получить его на самом деле обновить content раздел макета?
  2. Как обновить другие части (то есть left) с помощью моего модуля, чтобы они могли получить доступ к тем же данным?

Update

Я столкнулся с еще одной проблемой. После вставки этого блока ссылочные компоненты успешно исчезли.

<reference name="left"> 
    <remove name="catalog.compare.sidebar"/> 
    <remove name="left.reports.product.viewed"/> 
    <remove name="catalog.product.related"/> 
</reference> 

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

+0

Пробовали ли вы просто называя это 2 строки в ваше действие '$ this-> loadLayout(); $ this-> renderLayout();' –

+0

Я полагаю, я должен был это указать. Да, они там. –

ответ

0

Я сам решил проблему. Контрольный список:

  1. Убедитесь, что вы можете создать экземпляр своего блока с контроллера. Если у вас нет проблемы с config.xml.
  2. Убедитесь, что используется правильная рукоятка (оберточный элемент в документе XML макета) (у меня не было) и что другие ручки не работают, чтобы перезаписать любые его изменения. Добавьте эту строку в ваш контроллер, чтобы получить список дескрипторов:

    var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles());

  3. В моем случае, кто-то в команде были удалены компоненты из базового шаблона, не давая мне знать. Убедитесь, что удаленные компоненты действительно существуют в шаблоне.

  4. Убедитесь, что ваш модуль действительно включен с панели управления в System > Configuration > Advanced.

Текущие рабочие конфигурации:

Файл: config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Company_AdvSearch> 
      <version>1.0</version> 
      <depends> 
       <Mage_Page/> 
       <Mage_Catalog/> 
      </depends> 
     </Company_AdvSearch> 
    </modules> 
    <frontend> 
     <routers> 
      <company_advsearch> 
       <use>standard</use> 
       <args> 
        <module>Company_AdvSearch</module> 
        <frontName>advsearch</frontName> 
       </args> 
      </company_advsearch> 
     </routers> 
     <layout> 
      <updates> 
       <company_advsearch module="Company_AdvSearch"> 
        <file>advsearch.xml</file> 
       </company_advsearch> 
      </updates> 
     </layout> 
    </frontend> 
    <global> 
     <blocks> 
      <company_advsearch> 
       <class>Company_AdvSearch_Block</class> 
      </company_advsearch> 
     </blocks> 
     <helpers> 
      <company_advsearch> 
       <class>Company_AdvSearch_Helper</class> 
      </company_advsearch> 
     </helpers> 
    </global> 
</config> 

Файл: advsearch.xml

<?xml version="1.0" encoding="UTF-8"?> 
<layout version="0.1.0"> 
    <company_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="left"> 
      <block type="company_advsearch/results" name="search_criteria" as="left" template="advsearch/left.phtml" before="-"/> 
     </reference> 
     <reference name="content"> 
      <block type="company_advsearch/results" name="search_results" as="content" template="advsearch/content.phtml"/> 
     </reference> 
    </company_advsearch_index_index> 
</layout> 
Смежные вопросы