Перемещение поиска Magento на панель навигации

Я знаю, что эта проблема несколько раз задавалась в Интернете, но ни одно из этих решений не работает для меня.

В шаблоне app/design/frontend/themename/default/template/page/html/header.phtml

У меня звонок для <?php echo $this->getChildHtml('headernav') ?>

В headernav.phtml лежит вызов панели поиска <?php echo $this->getChildHtml('topSearch') ?>

Соответствующее содержимое app/design/frontend/themename/default/layout/catalogsearch.xml:

<reference name="top.menu">
    <block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
</reference>

Это заставляет панель поиска появляться, но она размещается за пределами содержимого headernav.phtml, а не внутри, где я ее поместил. (Я проверил разметку в Chrome Dev Tools, она далеко не там, где должна быть). Я мог бы взломать его с помощью CSS или вставить содержимое form.mini.phtml так, чтобы оно было именно там, где я хочу, но я знаю, что это неправильный способ справиться с этим, и это приведет только к изменениям позже.

Я также пробовал:

<reference name="headernav">
    <block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
</reference>

Может ли кто-нибудь просветить меня, почему это не отображается в правильном файле шаблона и как я могу получить xml, чтобы позволить мне использовать его внутри «подшаблона» header.phtml

(например, header.phtml звонит heavernav.phtml, который звонит form.mini.phtml)


person DWils    schedule 19.12.2013    source источник


Ответы (2)


В теме layout\catalogsearch.xml изменить строку

<reference name="header">

to

<reference name="catalog.topnav">

тогда поставь

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

в catalog/navigation/top.phtml, где вы хотите видеть блок поиска

person Sanketkumar Biswas    schedule 19.12.2013
comment
вау @Sanketkumar Biswas, ваш ответ спас меня от нескольких недель разочарований, когда мой topSearch исчез с полным кешем страниц из-за того, что для ссылочного имени не было установлено catalog.topnav- БОЛЬШОЕ спасибо! :) - person Joe; 07.11.2014

Просто пытался понять это в течение последних нескольких часов и застрял, пока не увидел ответ Санкеткумара.

Многие другие решения скажут вам изменить <reference name="header"> на <reference name="top.menu">. Я пробовал это много раз и имел ту же ошибку, что и вы, с панелью навигации, появляющейся прямо под панелью навигации.

Я также попытался удалить вызов <?php echo $this->getChildHtml('topSearch') ?> в моем файле topmenu.phtml, но он все еще каким-то образом отображался.

Я внес изменение Санкеткумара, и оно сработало правильно.

Мои точные изменения:

Use local.xml or create a new one and add this code:

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        <reference name="catalog.topnav">
            <block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
        </reference>
   </default>
</layout>

Open topmenu.phtml and add <?php echo $this->getChildHtml('topSearch') ?> to the area you want to display. My exact section of the navigation looked like:

<?php $_menu = $this->getHtml('level-top') ?>
<?php if($_menu): ?>
<div class="nav-container">
	<div class="container">
		<div class="row">
            <div class="span12">
                <div id="menu-icon"><?php echo $this->__('Navigate') ?></div>
                <ul id="nav" class="sf-menu">
                    <?php echo $_menu ?>

			        <li style="float: right;">
						<?php echo $this->getChildHtml('navSearch') ?>
					</li>

                </ul>
                <ul class="sf-menu-phone">
                    <?php echo $_menu ?>

        			<li>
						<?php echo $this->getChildHtml('navSearch') ?>
					</li>

                </ul>
            </div>
        </div>
		<div class="clear"></div>
	</div>
</div>
<?php endif ?>

(Обратите внимание, что я добавил его дважды — один раз для рабочего стола и один раз для мобильного сайта. Я также добавил его в список, чтобы он правильно отображался и плавал прямо на настольной версии.)

Надеюсь это поможет!

person Alban    schedule 25.09.2014