2009-12-10 4 views
0

J'ai le code ci-dessous courtoisie à Edmond's Ecommerce qui convertit le formulaire de mini-recherche standard de Magento à une mini-recherche plus détaillée comme celles vues dans Amazon et eBay. À ce stade, je suis en mesure d'accéder aux sous-catégories du répertoire racine, mais à la place, je voudrais sortir le tableau des sous-sous-catégories. Répertoire racine> Sous-catégorie> Sous-sous-catégorie.Besoin d'aide avec Magento Mini-Search

Essayé de mettre en œuvre de nombreuses permutations de getSubCategories, y compris les suivantes, mais a continué à obtenir des erreurs.

$category->load(Mage::app()->getStore()->getRootCategoryId()->getSubCategories()); 

Une indication qui a été partagée n'a pas été utile. Peut-être que je ne suis pas capable de le lire.

if($this->getSubCategories($c)){ 
foreach($this->getSubCategories($c) as $sc){ 
foreach($this->getSubCategories($sc) as $ssc){ 
... 
} 
} 
} 

Vous pouvez remarquer l'option $ exclude_array. Le tableau des sous-sous-catégories doit être précis pour que je puisse exclure des catégories qui ne sont pas pertinentes pour la mini-recherche. Toute suggestion serait appréciée.

<?php 
$category = Mage::getModel('catalog/category'); 
if(is_object(Mage::registry('current_category'))){ 
    $current_category_path=Mage::registry('current_category')->getPathIds(); 
}else{ 
    $current_category_path = array(); 
} 
$category->load(Mage::app()->getStore()->getRootCategoryId()); 
$children_string = $category->getChildren(); 
$children = explode(',',$children_string); 
$extra_options=''; 
$exclude_array=array(1,2,3); 
foreach($children as $c){ 
if(in_array($c, $exclude_array)){continue;} 
    $selected = (in_array($c, $current_category_path))?'SELECTED':''; 
    $extra_options.= '<option value="' . $c . '" ' . $selected . '>' . $category->load($c)->getName() . '</option>' . "\n";  
} 
?> 

<form id="search_mini_form" action="<?php echo $this->helper('catalogSearch')->getResultUrl() ?>" method="get"> 
    <fieldset> 
     <legend><?php echo $this->__('Search Site') ?></legend> 
     <div class="mini-search"> 
       <?php echo $this->__('I am celebrating my') ?> 
      <select name="cat" id="cat" class="input-text"> 
      <option value="">Any Occassion</option> 
      <?= $extra_options ?> 
      </select> 
      <input id="search" type="text" class="input-text" name="<?php echo $this->helper('catalogSearch')->getQueryParamName() ?>" value="<?php echo $this->helper('catalogSearch')->getEscapedQueryText() ?>" /> 
      <input class="search-box" type="submit" value="Go" alt="<?php echo $this->__('Search') ?>" /> 
      <div id="search_autocomplete" class="search-autocomplete"></div> 
      <script type="text/javascript"> 
      //<![CDATA[ 
       var searchForm = new Varien.searchForm('search_mini_form', 'search', '<?php echo $this->__('and looking for...') ?>'); 
       searchForm.initAutocomplete('<?php echo $this->helper('catalogSearch')->getSuggestUrl() ?>', 'search_autocomplete'); 
      //]]> 
      </script> 
     </div> 
    </fieldset> 
</form> 

Répondre

0

Voici une solution plus simple que j'ai pu mettre en place qui fonctionne bien. Si quelqu'un est capable de condenser cela encore plus, ce serait apprécié.

<?php 
$category = Mage::getModel('catalog/category')->load(enter category id here); 
if(is_object(Mage::registry('current_category'))){ 
    $current_category_path=Mage::registry('current_category')->getPathIds(); 
}else{ 
    $current_category_path = array(); 
} 
$children_string = $category->getChildren(); 
$children = explode(',',$children_string); 
$extra_options=''; 
$exclude_array=array(1,2,3); /* exclude categories */ 
foreach($children as $c){ 
if(in_array($c, $exclude_array)){continue;} 
    $selected = (in_array($c, $current_category_path))?'SELECTED':''; 
    $extra_options.= '<option value="' . $c . '" ' . $selected . '>' . $category->load($c)->getName() . '</option>' . "\n";  
} 
?>