Динамическое получение страниц CMS и добавление активного состояния на основе текущего идентификатора страницы в Magento - PullRequest
1 голос
/ 03 апреля 2012

Я создал шаблон навигации левой боковой панели, который перетаскивает обе категории (динамически) и страницы CMS, которые были добавлены вручную (см. Код ниже), и мне удалось заставить активное состояние работать, но в идеале я хотел быдинамически перетаскивать страницы, а затем добавить активное состояние.Есть идеи?Заранее спасибо.

<?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?>
<?php if($_menu): ?>
<?php
$current_page = '';
/*
* Check to see if its a CMS page
* if it is then get the page identifier
*/
if(Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms'):
    $current_page = Mage::getSingleton('cms/page')->getIdentifier();
endif
?>
<nav class="nav-container">
<ul id="nav">
    <?php echo $_menu; ?>
    <li <?php if ($current_page == 'home') { echo 'class="active"'; } else { echo 'class="home"'; } ?>><a href="<?php echo $this->getUrl('home')?>"><span><?php echo $this->__('Home') ?></span></a></li>
    <li <?php if ($current_page == 'about') { echo 'class="active"'; } else { echo 'class="about"'; } ?>><a href="<?php echo $this->getUrl('about')?>"><span><?php echo $this->__('About') ?></span></a></li>
    <li <?php if ($current_page == 'faqs') { echo 'class="active"'; } else { echo 'class="faqs"'; } ?>><a href="<?php echo $this->getUrl('faqs')?>"><span><?php echo $this->__('FAQS') ?></span></a></li>
    <li <?php if ($current_page == 'contacts') { echo 'class="active"'; } else { echo 'class="contacts"'; } ?>><a href="<?php echo $this->getUrl('contacts')?>"><span><?php echo $this->__('Contact Us') ?></span></a></li>
    <li <?php if ($current_page == 'artworks') { echo 'class="active"'; } else { echo 'class="artworks"'; } ?>><a href="<?php echo $this->getUrl('artworks')?>"><span><?php echo $this->__('Artworks') ?></span></a></li>
    <li <?php if ($current_page == 'how-it-works') { echo 'class="active"'; } else { echo 'class="how-it-works"'; } ?>><a href="<?php echo $this->getUrl('how-it-works')?>"><span><?php echo $this->__('How it Works') ?></span></a></li>
</ul>
</nav>
<?php endif ?>

1 Ответ

0 голосов
/ 09 июля 2013

Роберт Кент имеет пример динамического построения списков страниц Magento CMS , который работает путем перебора всей коллекции страниц CMS и исключая неактивные и системные страницы (без файлов cookie, без маршрута и т. Д.).

Для обработки активных состояний просто сравните $current_page со значением $page['identifier'] внутри цикла foreach:

foreach ( $_menu_cms as $cmspage ) {
  $page = $cmspage->getData();
  if ( ! in_array( $page['identifier'], array( 'no-route', 'enable-cookies' ) ) ) {
    $class = ( $page['identifier'] == $current_page ? 'active' : '' );
    printf( '<li><a href="%s" title="%s" class="%s">%s</a></li>',
      $this->getUrl( $page['identifier'], $this->htmlEscape( $page['title'] ), $class, $page['title']
    );
  }
}
...