2014-09-24 4 views
0

Я хочу включить Категории и все их подкатегории, используя цепочку, в расширенном поиске. Цепной выбор - это всего лишь предложение.Как включить категории с цепочкой Выберите в Расширенный поиск в Magento

Если какой-либо другой способ заключается в загрузке категорий вместе с подкатегориями в другое раскрывающееся меню, эти методы также приветствуются.

ответ

0

Я достиг вышеуказанного, используя Ajax в magento. приложение/дизайн/интерфейс/базы/по умолчанию/шаблон/catalogsearch/расширенный/form.phtml

<li> 
     <label for="section_search_field">Select Vehicle</label><br> 
     <select name="category" id="vehicle"> 
     <option selected="selected">--Select Vehicle--</option> 
      <?php 
     $sql=mysql_query("select name,entity_id from catalog_category_flat_store_1 where parent_id=8"); 
     while($row=mysql_fetch_array($sql)) 
     { 
     $id=$row['entity_id']; 
     $data=$row['name']; 
     echo '<option value="'.$id.'">'.$data.'</option>'; 
     } ?> 
     </select> 
    </li> 
    <li> 
     <label for="category_search_field">Select Manufacturere</label><br> 

     <select name="category" id="manufacturere" class="manufacturere" > 
      <option value="">--Choose Manufacturere--</option> 

         </select> 
    </li> 

    <li> 
    <label for="subcategory_search_field">Select Type</label><br> 
    <select name="sub" id="vehicle_type" class="vehicle_type"> 
     <option value="">--Choose type--</option> 
    </select> 
    </li> 
    <li> 
     <label for="category_search_field">Select Model</label><br> 
     <select name="category" id="vehicle_model" class="vehicle_model"> 
      <option value="">--Choose Model--</option> 
     </select></li> 
     <?php foreach ($this->getSearchableAttributes() as $_attribute): ?> 
     <?php $_code = $_attribute->getAttributeCode() ?> 
      <li> 
      <label for="<?php echo $_code ?>"><?php echo $this->getAttributeLabel($_attribute) ?></label> 
      <?php switch($this->getAttributeInputType($_attribute)): 
       case 'number': ?> 
       <div class="input-range"> 
        <input type="text" name="<?php echo $_code ?>[from]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'from')) ?>" id="<?php echo $_code ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text validate-number" maxlength="<?php echo $maxQueryLength;?>" /> 
        <span class="separator">-</span> 
        <input type="text" name="<?php echo $_code ?>[to]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'to')) ?>" id="<?php echo $_code ?>_to" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text validate-number" maxlength="<?php echo $maxQueryLength;?>" /> 
       </div> 
       <?php break; 
       case 'price': ?> 
       <div class="input-range"> 
        <input name="<?php echo $_code ?>[from]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'from')) ?>" id="<?php echo $_code ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text validate-number" type="text" maxlength="<?php echo $maxQueryLength;?>" /> 
        <span class="separator">-</span> 
        <input name="<?php echo $_code ?>[to]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'to')) ?>" id="<?php echo $_code ?>_to" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text validate-number" type="text" maxlength="<?php echo $maxQueryLength;?>" /> 
        <small>(<?php echo $this->getCurrency($_attribute); ?>)</small> 
       </div> 
       <?php break; 
       case 'select': ?> 
        <div class="input-box"> 
         <?php echo $this->getAttributeSelectElement($_attribute) ?> 
        </div> 
       <?php break; 
       case 'yesno': ?> 
        <?php echo $this->getAttributeYesNoElement($_attribute) ?> 
       <?php break; 
       case 'date': ?> 
       <div class="input-range"> 
        <?php echo $this->getDateInput($_attribute, 'from') ?> 
        <span class="separator">-</span> 
        <?php echo $this->getDateInput($_attribute, 'to') ?> 
       </div> 
       <?php break; 
       default: ?> 
       <div class="input-box"> 
        <input type="text" name="<?php echo $_code ?>" id="<?php echo $_code ?>" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute)) ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text <?php echo $this->getAttributeValidationClass($_attribute) ?>" maxlength="<?php echo $maxQueryLength;?>" /> 
       </div> 
      <?php endswitch; ?> 

     </li> 

     <?php endforeach; ?> 

    </ul> 

В этом же файле Within тег сценария я использовал AJAX вызов следующим образом:

<script type="text/javascript"> 
    var $j = jQuery.noConflict(); 
    $j(document).ready(function($) {  

    $j('#vehicle').change(function() 
    { 

     var optionCheckVechile = $j('select#vehicle option:selected').text(); 
     var optionCheckManufacturer = $j('select#manufacturere option:selected').text(); 
     var optionCheckType = $j('select#vehicle_type option:selected').text(); 
     var optionCheckModel = $j('select#vehicle_model option:selected').text(); 


      if(optionCheckType != '--Select type--'){ 
        $('select#vehicle_type option:eq(0)').attr("selected", true); 
        } 
        if(optionCheckModel != '--Select Model--'){ 
        $('select#vehicle_model option:eq(0)').attr("selected", true); 
        } 


      if((optionCheckVechile == 'Car')|| (optionCheckVechile == 'Bus')){ 
      $j("#vehicle_type").prop('disabled',false); 
      $j('#vehicle_type').css('background-color','#fff'); 
      $j("#vehicle_model").prop('disabled',false); 
      $j('#vehicle_model').css('background-color','#fff'); 
      } 
      else if((optionCheckVechile == 'Bike') || (optionCheckVechile == 'Truck')|| (optionCheckVechile == 'Auto')){ 
      $j("#vehicle_model").prop('disabled',true); 
      $j('#vehicle_model').css('background-color','#ccc'); 
      } 
      else{ 
      $j("#vehicle_type").prop('disabled',true); 
      $j('#vehicle_type').css('background-color','#ccc'); 
      $j("#vehicle_model").prop('disabled',true); 
      $j('#vehicle_model').css('background-color','#ccc'); 
      } 


    var id=$j(this).val(); 
      var dataString = 'id='+ id; 
      $j.ajax 
      ({ 
      type: "POST", 
      url: "<?php echo $this->getUrl('catalogsearch/ajax/vehicle') ?>", 
      data: dataString, 
      cache: false, 
      success: function(html) 
      { 

      $j("#manufacturere").html(html); 
      } 
      }); 
      $j("#manufacturer").load(); 
      $j("#vehicle_model").load(); 
      $j("#vehicle_type").load(); 
    }); 
    $j('#manufacturere').change(function() 
    { 
    var optionCheckModel = $j('select#vehicle_model option:selected').text(); 
    if(optionCheckModel != '--Select Model--'){ 
        $('select#vehicle_model option:eq(0)').attr("selected", true); 
        } 
    var id=$j(this).val(); 
      var dataString = 'id='+ id; 

      $j.ajax 
      ({ 
      type: "POST", 
      url: "<?php echo $this->getUrl('catalogsearch/ajax/manufacturer') ?>", 
      data: dataString, 
      cache: false, 
      success: function(html) 
      { 
      $j("#vehicle_type").html(html); 
      } 
      }); 
    }); 
    $j('#vehicle_type').change(function() 
    { 
    var id=$j(this).val(); 
      var dataString = 'id='+ id; 

      $j.ajax 
      ({ 
      type: "POST", 
      url: "<?php echo $this->getUrl('catalogsearch/ajax/type') ?>", 
      data: dataString, 
      cache: false, 
      success: function(html) 
      { 
      $j("#vehicle_model").html(html); 
      } 
      }); 
    }); 
}); 

Далее в приложении/code/core/Mage/CatalogSearch/контроллеры/AjaxController.php добавьте следующий код.

class Mage_CatalogSearch_AjaxController extends Mage_Core_Controller_Front_Action 
{ 

public function vehicleAction() 
{ 
    $id=$_POST['id']; 
    $sql=mysql_query("select name,entity_id from catalog_category_flat_store_1 where parent_id='$id'"); 
    echo '<option value=0>--Select Manufacturere--</option>'; 
while($row=mysql_fetch_array($sql)) 
    { 
    $id=$row['entity_id']; 
    $data=$row['name']; 
    echo '<option value="'.$id.'">'.$data.'</option>'; 
    } 
} 
public function manufacturerAction() 
{ 
$id=$_POST['id']; 
    $sql=mysql_query("select name,entity_id from catalog_category_flat_store_1 where parent_id='$id'"); 
    echo '<option value=0>--Select type--</option>'; 
while($row=mysql_fetch_array($sql)) 
    { 
    $id=$row['entity_id']; 
    $data=$row['name']; 
    echo $id; 
    echo '<option value="'.$id.'">'.$data.'</option>';  
    } 

} 
public function typeAction() 
{ 
$id=$_POST['id']; 
    $sql=mysql_query("select name,entity_id from catalog_category_flat_store_1 where parent_id='$id'"); 
    echo '<option value=0>--Select Model--</option>'; 
while($row=mysql_fetch_array($sql)) 
    { 
    $id=$row['entity_id']; 
    $data=$row['name']; 
    echo $id; 
    echo '<option value="'.$id.'">'.$data.'</option>'; 
    } 

} 

}

Затем обновите страницу и запустить расширенный поиск. Цепной выбор будет работать для категорий, загруженных в соответствии с родительским идентификатором.

Примечание: Это относится только к загрузке определенной категории и подкатегории.