Добавить блок в макет заголовка


Я добавил свой пользовательский модульный блок в заголовок в макете, как показано ниже

Pinsearch.xml

 <default> 
   <reference name="header">
        <block type="core/template" name="pinsearch" as="pinSearch" template="pinsearch/pinsearch.phtml" output="toHtml"/>
     </reference> 
  <default> 

Pinsearch.phtml - поиск.

<form action="<?php echo $this->getBaseUrl()."pinsearch/index/search"?>" method="get" id="search_pin_form">
<div class="input-box">
    <label for="search"><?php echo $this->__('Search:') ?></label>
     <input id="pinsearch" type="search" name="<?php echo "pin" ?>" value="" class="input-text required-entry" maxlength="" placeholder="<?php echo $this->__('Enter here...') ?>" />
    <button type="submit" title="<?php echo $this->__('Search') ?>" class="button search-button"><span><span><?php echo $this->__('Search') ?></span></span></button>
</div> 

В интерфейсе я получил свою пользовательскую форму поиска, но не в заголовке. Эта форма отображается после блока div оболочки

enter image description here

Когда я добавляю этот блок только в нижний колонтитул, он отображается как в нижнем колонтитуле , так и после блока обертки div.

Я совершенно сбит с толку. Есть какие-либо идея, почему все так происходит?

Author: DRAJI, 2014-10-17

1 answers

Когда вы добавляете блок непосредственно в блок header, magento поместит ваш блок сразу после того, как все его дочерние блоки будут добавлены с помощью других xml-файлов макета, которые обрабатываются до вашего pinsearch.xml.

В основном блок заголовка по умолчанию содержит следующие блоки. Это добавляется через page.xml, который будет обработан до вашего pinsearch.xml

<block type="page/html_header" name="header" as="header">
    <block type="page/template_links" name="top.links" as="topLinks"/>
    <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
    <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
        <label>Navigation Bar</label>
        <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/>
    </block>
    <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
        <label>Page Header</label>
        <action method="setElementClass"><value>top-container</value></action>
    </block>
    <block type="page/html_welcome" name="welcome" as="welcome"/>
</block>

Смотрите top.container (я надеюсь, что это блок-оболочка, о котором вы упоминаете) блок загружается здесь. Поэтому, когда мы добавим ваш блок напрямую под блоком header он просто находится чуть ниже welcome (Это не точно. Но если мы рассмотрим только page.xml, это верно:-))

Итак, если вам нужен ваш блок только внутри блока обертки, то вам нужно включить ваш блок в сам блок обертки

<default> 
   <reference name="header">
       <reference name="top.container">
            <block type="core/template" name="pinsearch" template="pinsearch/pinsearch.phtml"/>
       </reference>
     </reference> 
  <default> 

Теперь предположим, что вам нужно включить блок в качестве дочернего элемента самого блока header, но нужно отобразить его над блоком-оболочкой (или любым другим дочерним блоком), тогда вам нужно сделать следующее.

<default> 
   <reference name="header">
        <block type="core/template" name="pinsearch" as="pinSearch" template="pinsearch/pinsearch.phtml"/>
     </reference> 
  <default> 

Затем перейдите к app/design/frontend/<package>/<theme>/template/page/html/header.phtml а затем укажите свой блок там, где вам нужно, чтобы он отображался следующим образом

  <?php echo $this->getChildHtml('pinSearch') ?>

Надеюсь, это развеет ваши сомнения.. Счастливого кодирования, сестренка:-)

 12
Author: Rajeev K Tomy, 2015-05-28 01:37:24