Меню статических страниц Magento - PullRequest
4 голосов
/ 04 августа 2009

Я хочу создать меню, которое будет динамически показывать активные статические страницы из CMS; например, если в моей CMS у меня есть эти страницы:

  • О нас (включено)
  • Доставка и возврат (отключено)
  • Положения и условия (включено)
  • Контакты (включены)

тогда меню будет выглядеть так:

О США | Условия использования | Контакты

Мне нужно всего несколько советов о том, как начать; может быть, кто-то уже делал это раньше?

Ответы [ 4 ]

5 голосов
/ 06 августа 2009

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>
1 голос
/ 20 октября 2011

Вот еще один способ добавить статические ссылки в меню каталога 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» check -Box. После сохранения категории у вас будет ссылка на мою тестовую страницу в верхнем меню категорий в Magento.

Таким образом, после всех этих изменений вы можете преобразовать ссылку категории в ссылку статической страницы, добавив префикс «static-» к ключу URL категории.

1 голос
/ 18 января 2011

Чтобы исключить больше, чем просто отсутствие маршрута, я добавил новое поле на страницы CMS, чтобы указать, должен ли на странице быть элемент меню или нет, используя true или false. Я следовал за Добавить новое поле CMS и использовал следующее в 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') { ?>
1 голос
/ 04 августа 2009

В вашем блоке 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 (FYI)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...