Я пытаюсь создать под-навигацию основной навигации в Magento и вставить ее перед модулем хлебных крошек. Поэтому, когда вы переходите к корневому каталогу, подменю его основных дочерних категорий появляется в виде панели навигации над навигационными цепочками, но под корневой навигацией. В каталоге вы нажимаете корневую категорию, и все основные категории в корневой категории отображаются в виде горизонтальной панели навигации под ней.
Я могу вставить его только под заголовком категории, но не над модулем хлебных крошек. Я создал app / design / frontend / theme / template / catalog / navigation / topsub.phtml и ввел следующий код:
<?php
//get all sub categories for current category
$_category = $this->getCurrentCategory();
$_category_children = $_category->getChildren();
$catIds = explode(',',$_category_children);
$categories = array();
foreach($catIds as $catId) {
$category = Mage::getModel('catalog/category')->load($catId);
$categories[$category->getName()] = array(
'url' => $category->getUrl(),
'img' => $category->getImageUrl()
);
}
?>
<ul class="subnav">
<?php if($category->getIsActive()): ?>
<?php foreach($categories as $name => $data): ?>
<li>
<a href="<?php echo $data['url']; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>">
<img src="<?php echo $data['img']; ?>" />
<div class="category-title"><?php echo $name; ?></div>
</a>
<span>/ </span>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
В моем local.xml я ввел
<reference name="mtopsub">
<block type="catalog/navigation" name="topsub" as="topsub" template="catalog/navigation/topsub.phtml"/>
</reference>
В моем файле шаблона я назвал его
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
<head>
<?php echo $this->getChildHtml('head') ?>
</head>
<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
<?php echo $this->getChildHtml('after_body_start') ?>
<div class="wrapper">
<?php echo $this->getChildHtml('global_notices') ?>
<div class="page">
<?php echo $this->getChildHtml('header') ?>
<div class="main-container col1-layout">
<div class="main">
<div class="msubnav">
<?php echo $this->getChildHtml('mtopsub') ?>
</div>
<?php echo $this->getChildHtml('breadcrumbs') ?>
<div class="col-main">
<?php echo $this->getChildHtml('global_messages') ?>
<?php echo $this->getChildHtml('content') ?>
</div>
</div>
</div>
<?php echo $this->getChildHtml('footer') ?>
<?php echo $this->getChildHtml('before_body_end') ?>
</div>
</div>
<?php echo $this->getAbsoluteFooter() ?>
</body>
</html>
Теперь до этого момента ничего не появляется. Если я создам статический блок и введу в него следующий код:
<p>{{block type="catalog/navigation" name="catalog.navigation" template="catalog/navigation/topsub.phtml"}}</p>
Подменю навигации выглядит так, как должно, но в неправильном положении. Вместо того, чтобы отображаться над модулем хлебных крошек, он отображается под ним и под заголовком страницы категории.
Я уверен, что мне чего-то не хватает, и если кто-то может указать мне правильное направление, я был бы очень признателен.
1 ответ
Ты почти там :-)
По мере добавления кода в представление шаблона макета вам необходимо изменить XML макета, чтобы добавить блок в качестве дочернего элемента корневого элемента:
Layout / page.xml (или local.xml)
<reference name="root">
<block type="catalog/navigation" name="mtopsub" as="mtopsub"
template="catalog/navigation/topsub.phtml" />
</reference>
Теперь при звонке:
<?php echo $this->getChildHtml('mtopsub') ?>
Внутри вашего шаблона макета блок будет доступен и должен правильно отображаться.
Похожие вопросы
Новые вопросы
layout
Тег компоновки предназначен для вопросов о размещении, выравнивании и выравнивании объектов относительно содержащего элемента. Для вопросов, касающихся CSS, используйте вместо этого тег 'css'.