4

我想制作一个菜单,动态显示来自 CMS 的活动静态页面;例如,如果在我的 CMS 中有这些页面:

  • 关于我们(已启用)
  • 运输和退款(已禁用)
  • 条款和条件(启用)
  • 联系人(启用)

那么菜单看起来像:

关于我们 | 条款和条件 | 联系人

我只需要一些关于如何开始的提示;也许有人以前已经这样做过?

4

4 回答 4

5

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>
于 2009-08-06T16:14:16.723 回答
1

在您的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(仅供参考)中找到

于 2009-08-04T12:01:06.323 回答
1

这是将静态链接放置到 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 键来将类别链接转换为静态页面链接。

于 2011-10-20T16:43:15.867 回答
1

为了不只是排除无路由,我在 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') { ?>
于 2011-01-18T07:05:20.190 回答