我想制作一个菜单,动态显示来自 CMS 的活动静态页面;例如,如果在我的 CMS 中有这些页面:
- 关于我们(已启用)
- 运输和退款(已禁用)
- 条款和条件(启用)
- 联系人(启用)
那么菜单看起来像:
关于我们 | 条款和条件 | 联系人
我只需要一些关于如何开始的提示;也许有人以前已经这样做过?
Dougle 非常感谢,这真的很有帮助!
在Magento CMS 中,您可以制作只能使用其 IDENTIFIER 访问的静态页面;我想要的是以某种方式制作一个菜单,该菜单将自动显示活动(启用)静态页面;如果您将状态设置为禁用它不应该在菜单中;
这是我使用的代码,注意 IF $PageData['identifier']!='no-route';
no-rute 是 404 页面,所以我不需要在菜单中使用它,但必须启用它,以便 Magento 将 404 错误重定向到此页面;
<div>
<?php $collection = Mage::getModel('cms/page')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId());?>
<?php $collection->getSelect()
->where('is_active = 1'); ?>
<ul>
<?php foreach ($collection as $page): ?>
<?php $PageData = $page->getData(); ?>
<?php if($PageData['identifier']!='no-route') { ?>
<li>
<a href="/<?php echo $PageData['identifier']?>"><?php echo $PageData['title'] ?></a>
</li>
<?php } ?>
<?php endforeach; ?>
</div>
在您的page/html
块中创建一个方法,其中包含:
$collection = Mage::getModel('cms/page')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId());
$collection->getSelect()
->where('is_active = 1')
->order('main_table.sort_order ASC');
return $collection;
您可以在模板中调用它并foreach()
通过创建您的 LI
可能需要一些调整的想法,具体取决于您的设置。
虽然我认为这是内置的,但从记忆中看,design/frontend/../../templates/page/
我似乎记得在其中的一个 phtml 文件中删除了一些类似的功能。
在哪里,订单和其他选择的东西可以在/lib/Zend/Db/Select.php
(仅供参考)中找到
这是将静态链接放置到 Magento 目录菜单的另一种方法。
首先,创建静态页面,为其分配一些 url 键,例如“my-test-page”。
转到/app/code/core/Mage/Catalog/Block,将文件复制Navigation.php
到/app/code/local/Mage/Catalog/Block,现在您可以对其进行编辑,而不必担心使用 Magento 升级可能会丢失您的更改.
Navigation.php
在第 265 行打开文件(magento 1.4)function _renderCategoryMenuItemHtml(...)
,更改代码:
$htmlLi .= '>';
$html[] = $htmlLi;
$html[] = '<a href="'.$this->getCategoryUrl($category).'"'.$linkClass.'>';
$html[] = '<span>' . $this->escapeHtml($category->getName()) . '</span>';
$html[] = '</a>';
对此:
$htmlLi .= '>';
$html[] = $htmlLi;
if(preg_match('/\/static-/', $this->getCategoryUrl($category))) {
$link_url = str_replace("static-", "", $this->getCategoryUrl($category));
} else {
$link_url = $this->getCategoryUrl($category);
}
$html[] = '<a href="'.$link_url.'"'.$linkClass.'>';
$html[] = '<span>' . $this->escapeHtml($category->getName()) . '</span>';
$html[] = '</a>';
现在转到类别管理,编辑类别,将 URL 键更改为:“static-my-test-page”并取消选中“为旧 URL 创建永久重定向”复选框。保存类别后,您将在 Magento 的顶级类别菜单中获得指向 my-test-page 的链接。
因此,在所有这些更改之后,您可以通过将前缀“static-”添加到类别 URL 键来将类别链接转换为静态页面链接。
为了不只是排除无路由,我在 CMS 页面中添加了一个新字段,以指定页面是否应具有菜单项或不使用 true 或 false。我跟着Add a new CMS Field并在 main.php 中使用了以下内容
$fieldset->addField('menu', 'text', array(
'name' => 'menu',
'label' => Mage::helper('cms')->__('On Menu'),
'title' => Mage::helper('cms')->__('On Menu'),
'required' => true,
'disabled' => $isElementDisabled
));
然后更改了这一行:
<?php if($PageData['identifier']!='no-route') { ?>
至
<?php if($PageData['menu']!= 'false') { ?>