2012-02-09 1 views
0

Мне нужно отобразить боковую панель с меню навигации, которое содержит все категории и соответствующие подкатегории приложения. Однако, когда текущая страница относится к категории или подкатегории, текущая категория должна быть первой из меню, но я понятия не имею, как это сделать правильно.Внутри меню отобразите текущую категорию вверх

Первое, что перешло мне в голову, состояло в том, чтобы повторить цикл дважды, в первом цикле проверить, соответствует ли категория, соответствующая категории текущего запроса, а затем визуализировать ее, в противном случае пропустить цикл. Другой цикл будет почти таким же, но если категория совпадает с категорией текущего запроса, пропустите цикл к следующему элементу. Но это очень плохая идея, дважды повторяйте HTML, делая обслуживание головной болью.

Мой текущий код:

//View Helper 
<?php 
namespace App\View\Helper; 

class Category extends AbstractHelper { 

    protected $category; 

    /** 
    * @param \Entities\Product\Category $category 
    * @return \App\View\Helper\Category 
    */ 
    public function category(\Entities\Product\Category $category = null) 
    { 
     $this->category = $category; 
     return $this; 
    } 

    /** 
    * @return string 
    */ 
    public function renderSidebar() 
    { 
     $repositoryHelper = \Zend_Controller_Action_HelperBroker::getStaticHelper('repository'); 
     $categories = $repositoryHelper->getRepository('Product\Category')->getCategoriesWithSubCategories(); 

     $isCorrectAction = ($this->getRequestVariable('action', false) === 'products'); 
     $isACategoryPage = false; 
     $requestedCategoryId = $this->getRequestVariable('category', false); 

     if($isCorrectAction && $requestedCategoryId){ 
      $isACategoryPage = true; 
     } 

     return $this->view->partial(
      'partials/categoriesSidebar.phtml', 
      array(
       'categories'  => $categories, 
       'isACategoryPage' => $isACategoryPage, 
       'requestedCategoryId' => (int) $requestedCategoryId 
      ) 
     ); 
    } 


} 

//inside categoriesSidebar.phtml 
<ul class="sidebar-menu"> 
    <?php foreach($this->categories as $category): ?> 
     <?php if($this->isACategoryPage && $this->requestedCategoryId === $category->getId()): ?> 
      //??? 
     <?php endif; ?> 
     <li class="category" id="category-<?= $category->getId() ?>"> 
      <a href="..." class="category-link"><?= $category->getName() ?></a> 
      <?php if($category->hasSubCategories()): ?> 
       <span class="subcategory-view desactivated"></span> 
       <ul class="category-subcategories"> 
        <?php foreach($category->getSubCategories() as $subCategory): ?> 
         <li class="subcategory category-<?= $category->getId() ?>-subcategories" id="subcategory-<?= $subCategory->getId() ?>" data-category="<?= $category->getId() ?>"> 
          <a href="..." class="subcategory-link"><?= $subCategory->getName() ?></a> 
         </li> 
        <?php endforeach; ?> 
       </ul> 
      <?php endif; ?> 
     </li> 
    <?php endforeach; ?> 
</ul> 

У вас есть идеи о том, как я могу это сделать? Я не использую Zend_Navigation, в этом случае я должен использовать его? Или я должен сделать это только с помощью CSS?

ответ

1
//inside categoriesSidebar.phtml 
<ul class="sidebar-menu"> 
    <?php ob_start(); ?> 
    <?php foreach($this->categories as $category): ?> 
     <?php if($this->isACategoryPage && $this->requestedCategoryId === $category->getId()): ?> 
      <?php $current = $this->partial(
           'partials/categoriesSidebarItem.phtml', 
           array(
            'category'  => $category, 
           )); ?> 
     <?php endif; ?> 
     <?php echo $this->partial(
         'partials/categoriesSidebarItem.phtml', 
         array(
          'category'  => $category, 
         )); ?> 
    <?php endforeach; ?> 
    <?php $list = ob_get_clean(); echo $current; echo $list; ?> 
</ul> 

// inside categoriesSidebarItem.phtml 
     <li class="category" id="category-<?= $category->getId() ?>"> 
      <a href="..." class="category-link"><?= $category->getName() ?></a> 
      <?php if($category->hasSubCategories()): ?> 
       <span class="subcategory-view desactivated"></span> 
       <ul class="category-subcategories"> 
        <?php foreach($category->getSubCategories() as $subCategory): ?> 
         <li class="subcategory category-<?= $category->getId() ?>-subcategories" id="subcategory-<?= $subCategory->getId() ?>" data-category="<?= $category->getId() ?>"> 
          <a href="..." class="subcategory-link"><?= $subCategory->getName() ?></a> 
         </li> 
        <?php endforeach; ?> 
       </ul> 
      <?php endif; ?> 
     </li> 
Смежные вопросы