2013-10-27 2 views
6

Vorrei aggiungere un evento onclick ai filtri Opencart per sostituire il pulsante di invio che è nascosto fuori dalla pagina. Presumo che questo dovrebbe essere fatto con javascript/jquery , ma l'implementazione è un po 'oltre me, puoi aiutare?I filtri Opencart aggiungono onclick evento per sostituire il pulsante di invio

PHP:

<div class="box"> 
<div class="box-heading"><?php echo $heading_title; ?></div> 
<div class="box-content"> 
    <ul class="box-filter"> 
    <?php foreach ($filter_groups as $filter_group) { ?> 
    <li><span id="filter-group<?php echo $filter_group['filter_group_id']; ?>"><?php echo $filter_group['name']; ?></span> 
    <ul> 
    <?php foreach ($filter_group['filter'] as $filter) { ?> 
    <?php if (in_array($filter['filter_id'], $filter_category)) { ?> 
    <li> 
     <input type="checkbox" value="<?php echo $filter['filter_id']; ?>" class="click_checkbox_manufacturers-filter" id="filter<?php echo $filter['filter_id']; ?>" checked="checked" /> 
     <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label> 
    </li> 
    <?php } else { ?> 
    <li> 
     <input type="checkbox" value="<?php echo $filter['filter_id']; ?>" class="click_checkbox_manufacturers-filter" id="filter<?php echo $filter['filter_id']; ?>" /> 
     <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label> 
    </li> 
    <?php } ?> 
    <?php } ?> 
    </ul> 
    </li> 
    <?php } ?> 
    </ul> 
    <a id="button-filter" class="button"><?php echo $button_filter; ?></a> 
</div> 
</div> 

output HTML:

<div class="box"> 
<div class="box-heading">Refine Search</div> 
<div class="box-content"> 
    <ul class="box-filter"> 
    <li><span id="filter-group2">Colour</span> 
    <ul> 
    <li> 
    <input type="checkbox" value="33" class="click_checkbox_manufacturers-filter" id="filter33"> 
    <label for="filter33">Black</label> 
    </li> 
    <li> 
    <input type="checkbox" value="35" class="click_checkbox_manufacturers-filter" id="filter35"> 
    <label for="filter35">Blue</label> 
    </li> 
    <li><span id="filter-group4">Scent Name</span> 
    <ul> 
    <li> 
     <input type="checkbox" value="64" class="click_checkbox_manufacturers-filter" id="filter64"> 
     <label for="filter64">Almond</label> 
    </li> 
    <li> 
     <input type="checkbox" value="65" class="click_checkbox_manufacturers-filter" id="filter65"> 
     <label for="filter65">Coconut</label> 
    </li> 
    </ul> 
    </li> 
    </ul> 
    <a id="button-filter" class="button">Refine Search</a> 
</div> 
</div> 

JavaScript

<script type="text/javascript"> 
$('#button-filter').bind('click', function() { 
    filter = []; 

    $('.box-filter input[type=\'checkbox\']:checked').each(function(element) { 
     filter.push(this.value); 
    }); 

    location = '<?php echo $action; ?>&filter=' + filter.join(','); 
}); 
//--></script> 

risposta

4

Si può fare qualcosa di simile (invece dello script corrente):

<script type="text/javascript"> 
$(document).ready(function() { 
    // hide the "submit" button 
    $('#button-filter').hide(); 

    // bind onChange event to the checkboxes 
    $('.click_checkbox_manufacturers-filter').live('change', function() { 
     filter = []; 

     $('.box-filter input[type=\'checkbox\']:checked').each(function(element) { 
      filter.push(this.value); 
     }); 

     window.location = '<?php echo $action; ?>&filter=' + filter.join(','); 
    }); 
}); 
//--></script> 

Ecco link to my JsFiddle dello stesso codice JS, che, sorprendentemente è lavorare. L'unico problema potrebbe essere il reindirizzamento ... Ho modificato il codice di reindirizzamento qui sopra, quindi dovrebbe funzionare altrettanto bene.

+0

Non sembra funzionare? Lo fa? – Stuart

+0

@Stuart Il mio male, mi mancava la funzione 'live'. Prova subito ... – shadyyx

+0

Grazie per il tuo aiuto Shadyx, ma non funziona .. nasconde il pulsante però! – Stuart

1

Per la versione 2 modificare il codice JavaScript nel file filter.tpl (dal catalogo/vista/tema/default/modello/estensione/modulo/filtro.tpl - modificare 'predefinito' nel nome del tema, se necessario) in questo

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#button-filter').hide(); 

     $('input[name^=\'filter\']').on('change', function() { 
      filter = []; 

      $('input[name^=\'filter\']:checked').each(function(element) { 
       filter.push(this.value); 
     }); 

     location = '<?php echo $action; ?>&filter=' + filter.join(','); 
    }); 
}); 
</script> 

Testato in OC 2.3.0.2.