将Magento搜索移动到导航栏

时间:2013-12-19 00:51:20

标签: magento search navigationbar

我知道这个问题已在网络上多次被问过,但这些解决方案似乎都不适用于我。

在模板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

2 个答案:

答案 0 :(得分:3)

在主题 layout \ catalogsearch.xml 更改字符串

<reference name="header">

<reference name="catalog.topnav">

然后把

<?php echo $this->getChildHtml('topSearch') ?> 
目录/导航/ top.phtml 中的

,您要查看搜索块

答案 1 :(得分:1)

过去几个小时试图解决这个问题,直到我看到Sanketkumar的答案才陷入困境。

许多其他解决方案会告诉您将<reference name="header">更改为<reference name="top.menu">。我尝试了很多次并且出现了与你相同的错误,导航栏出现在导航栏的正下方。

我也尝试在topmenu.phtml中删除<?php echo $this->getChildHtml('topSearch') ?>的调用,但它仍然以某种方式呈现。

我做了Sanketkumar的改变,它运作正常。

我的确切更改:

使用local.xml或创建新代码并添加以下代码:

<?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>

打开topmenu.phtml并将<?php echo $this->getChildHtml('topSearch') ?>添加到您要显示的区域。导航的确切部分如下所示:

<?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 ?>

(请注意,我添加了两次 - 一次用于桌面,一次用于移动网站。我还将其添加到列表中,以便正确显示并浮动在桌面版本上。)

希望这有帮助!