Меню статических страниц Magento

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

  • О нас (включено)
  • Доставка и возврат (отключено)
  • Условия использования (включено)
  • Контакты (включено)

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

О нас | Условия | Контакты

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


person Community    schedule 04.08.2009    source источник


Ответы (4)


Дугл большое спасибо, это было действительно полезно!

Fede в Magento CMS вы можете создавать статические страницы, доступ к которым возможен только с помощью ИДЕНТИФИКАТОРА; то, что я хотел, это как-то сделать меню, которое будет автоматически отображать АКТИВНЫЕ (включенные) статические страницы; и если вы установите статус «Отключить», его не должно быть в меню;

вот код, который я использовал, обратите внимание, что 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>
person Community    schedule 06.08.2009
comment
Хорошо, это то, что я предусмотрел, хороший улов без маршрута, чтобы получить $ collection = Mage .... дерьмо из представления, вы можете поместить его в функцию в блоке. и вызовите $this-›getNavLinks(); - person Question Mark; 09.08.2009

Чтобы исключить больше, чем просто отсутствие маршрута, я добавил новое поле на страницы 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') { ?>

to

<?php if($PageData['menu']!= 'false') { ?>
person Wilks    schedule 18.01.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". коробка. После сохранения категории у вас появится ссылка на мою тестовую страницу в меню верхних категорий в Magento.

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

person prostosergik    schedule 20.10.2011

В блоке 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 (к вашему сведению)

person Question Mark    schedule 04.08.2009