2010-11-13 5 views
2

J'ai ce problème avec OpenCart où je veux afficher mes catégories de boutique d'une manière personnalisée et compter les catégories parentes.Afficher et compter des catégories dans OpenCart

Je suis actuellement modifié le code à ce jour que je reçois la sortie suivante

<ul id="catOpContainer"> 
<li id="switchCatOp1">Parent Cat 1 
    <ul id="catOp1"> 
    <li>Child cat 1</li> 
    Child Cat 2</li> 
    </ul> 
</li> 
Parent Cat 2 
    <ul id="catOp1"> 
    <li>Child cat 1</li> 
    Child cat 2</li> 
    </ul> 
</li> 
Parent Cat 3</li> 
</ul> 
</ul> 

au lieu du choix

<ul id="catOpContainer"> 
<li id="switchCatOp1">Parent Cat 1 
    <ul id="catOp1"> 
    <li>Child Cat 1</li> 
    <li>Child Cat 2</li> 
    </ul> 
    </li> 
    <li id="switchCatOp2">Parent Cat 2 
    <ul id="catOp2"> 
    <li>Child Cat 1</li> 
    <li>Child Cat 2</li> 
    <li>Child Cat 3</li> 
    </ul> 
</li> 
</ul> 

Il est évident qu'il ya des éléments manquants, mais je n'ai pas la moindre idée une solution possible. Je n'ai pas non plus la moindre idée de comment compter les catégories parentes, de sorte que je peux basculer les sous-catégories.

J'ai actuellement l'extrait de code suivant:

<?php 
class ControllerModuleCategory extends Controller { 
    protected $category_id = 0; 
    protected $path = array(); 

    protected function index() { 
     $this->language->load('module/category'); 

     $this->data['heading_title'] = $this->language->get('heading_title'); 

     $this->load->model('catalog/category'); 
     $this->load->model('tool/seo_url'); 

     if (isset($this->request->get['path'])) { 
      $this->path = explode('_', $this->request->get['path']); 

      $this->category_id = end($this->path); 
     } 

     $this->data['category'] = $this->getCategories(0); 

     $this->id = 'category'; 

     if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/category.tpl')) { 
      $this->template = $this->config->get('config_template') . '/template/module/category.tpl'; 
     } else { 
      $this->template = 'default/template/module/category.tpl'; 
     } 

     $this->render(); 
     } 

    protected function getCategories($parent_id, $current_path = '') { 
     $category_id = array_shift($this->path); 

     $output = ''; 

     $results = $this->model_catalog_category->getCategories($parent_id); 

     if ($results) { 
      if ($parent_id == 0) { 
       $output .= '&lt;li id="switchCatOp1">'; 
      } else { 
       $output .= '&lt;ul id="catOp1">&lt;li>'; 
      } 
     } 

     foreach ($results as $result) {  
      if (!$current_path) { 
       $new_path = $result['category_id']; 
      } else { 
       $new_path = $current_path . '_' . $result['category_id']; 
      } 

      $output .= ''; 

      $children = ''; 

      // if ($category_id == $result['category_id']) { 
       $children = $this->getCategories($result['category_id'], $new_path); 
      // } 

      if ($this->category_id == $result['category_id']) { 
       $output .= '&lt;a href="' . $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&amp;path=' . $new_path) . '">' . $result['name'] . '&lt;/a>'; 
      } else { 
       $output .= '&lt;a href="' . $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&amp;path=' . $new_path) . '">' . $result['name'] . '&lt;/a>'; 
      } 

      $output .= $children; 

      $output .= '&lt;/li>'; 
     } 

     if ($results) { 
      $output .= '&lt;/ul>'; 
     } 

     return $output; 
    }   
} 
?> 

J'espère vraiment que quelqu'un connaît une solution.

Répondre

0

Vous n'avez pas besoin de personnaliser le contrôleur. Il a déjà la liste des catégories Parent et enfant, Il suffit d'ouvrir le module de catégorie, et passé le code ci-dessous.

<div class="box-category"> 
    <ul> 
    <?php foreach ($categories as $category) { ?> 
    <li> 
     <?php if ($category['category_id'] == $category_id) { ?> 
     <a href="<?php echo $category['href']; ?>" class="active"><?php echo $category['name']; ?></a> 
     <?php } else { ?> 
     <a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a> 
     <?php } ?> 
     <?php if ($category['children']) { ?> 
     <ul> 
     <?php foreach ($category['children'] as $child) { ?> 
     <li> 
      <?php if ($child['category_id'] == $child_id) { ?> 
      <a href="<?php echo $child['href']; ?>" class="active"><?php echo $child['name']; ?></a> 
      <?php } else { ?> 
      <a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a> 
      <?php } ?> 
     </li> 
     <?php } ?> 
     </ul> 
     <?php } ?> 
    </li> 
    <?php } ?> 
    </ul> 
</div> 
Questions connexes