Back to top

Autore Topic: [RISOLTO] Incrementare il carrello per multipli  (Letto 3103 volte)

Offline fottutoblues

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
[RISOLTO] Incrementare il carrello per multipli
« il: 09 Dic 2010, 19:07:15 »
Ciao, torno a smanettare VM dopo qualche mese di assenza (come si dimenticano in fretta le cose!).
nel post http://forum.joomla.it/index.php/topic,107993.msg476988.html#msg476988 avevo ideato una soluzione semplice per vendere prodotti a multipli di una determinata quantità (es. 3,6,9,...).
Ora vorrei che quel multiplo di acquisto (es. 3) fosse:
1. predefinito come valore quantità del carrello quando si visualizza il prodotto
2. che gli incrementi/decrementi della quantità tramite click dei due pulsanti avvenissero per step di multiplo (es. 3,6,9,...)
Al momento non sono riuscito a trovare una soluzione e chiedo speranzoso se qualcuno ha già affrontato o risolto il problema.
Grazie.

Il funzionamento dei pulsanti è gestito da quantity_box_general.tpl.php
Per il pulsante di incremento la linea di codice è questa:
<input type="button" class="quantity_box_button quantity_box_button_up" onclick="var qty_el = document.getElementById(\'quantity'.$prod_id.'\'); var qty = qty_el.value; if( !isNaN( qty )) qty_el.value++;return false;" />
in grassetto ho evidenziato l'incremento di unità.
La difficoltà ora è capire come incrementare questa variabile con l'entità del minimo di acquisto, ovvero come richiamare la variabile $min specificata nella scheda prodotto.
« Ultima modifica: 15 Dic 2010, 21:23:55 da fottutoblues »

Offline fottutoblues

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:[RISOLTO] Incrementare il carrello per multipli
« Risposta #1 il: 15 Dic 2010, 22:07:21 »
Bene, anche questa è andata.
La vendita per multipli non è gestita nativamente da VM allora occorre ricorrere a qualche trucchetto.
Come prima cosa si devono seguire alcune semplici (e migliorabili) indicazioni contenute qui: http://forum.joomla.it/index.php/topic,107993.msg476988.html#msg476988
Dopo questo dobbiamo utilizzare un piccolo trucchetto che consiste nel lavorare sulla variabile $quantity_start che normalmente servirebbe solo nel caso dell'impiego di una casella combinata al posto della casella di testo della quantità.

1. Definiamo la variabile $quantity_start per tutti quei prodotti che devono essere incrementati oltre l'unità.
Lo possiamo fare manualmente dal back-end di VM Lista prodotti/Opzioni di visualizzazione/Valore iniziale oppure serialmente tramite CSV Im proved.

2. Apriamo il file quantity_box_general.tpl.php

3. All'inizio del file, dopo extract( $quantity_options ); facciamo in modo che la variabile $quantity_start sia impostata a 1 se non diversamente specificato da noi:
if ($quantity_start == 0) {
   $quantity_start = 1;
}
Senza questo blocco if dovremmo impostare a Valore iniziale = 1 per tutti i prodotti che vengono venduti a multipli di 1... e la cosa è abbastanza inutile.

4. Impostiamo il valore predefinito della quantità iniziale di acquisto sostituendo
$html .= '<input type="text" class="inputboxquantity" size="4" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity.'"
con:
$html .= '<input type="text" style="float:left" class="inputboxquantity" size="4" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity_start.'" />

5. Modifichiamo l'incremento sostituendo qty_el.value++ con:
qty_el.value=parseInt(qty_el.value,10) +'.$quantity_start.'
A titolo di curiosità specificare la conversione in base 10 serve se un utente scrive manualmente nella casella di quantità un numero che inizia per zero.

6. Modifichiamo il  decremento sostituendo qty_el.value-- con:
qty_el.value=parseInt(qty_el.value,10) -'.$quantity_start.'

A questo punto la Browse Page presenterà come quantità predefinita di acquisto il valore da noi specificato.
Incrementi e decrementi tramite i pulsantini accanto alla quantità non saranno necessariamente di 1 unità, ma del valore da noi specificato.

Questo è il mio quantity_box_general.tpl.php con le modifiche

Codice: [Seleziona]
<?php if( !defined'_VALID_MOS' ) && !defined'_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); 
mm_showMyFileName(__FILE__);
/** This template is used for the quantity box arrangement of products, within the add-to-cart form */
// Contiene le modifiche per incrementare il carrello di multipli
// Info su http://forum.joomla.it/index.php/topic,120776.0

extract$quantity_options );
$html '';

// mostra l'etichetta di testo della quantita'
if(!$child && $display_type != 'hide') {
$html '<label for="quantity'.$prod_id.'" class="quantity_box">'.$VM_LANG->_('PHPSHOP_CART_QUANTITY').':&nbsp;</label>';
}

// $quantity_start la uso per gli incrementi
// se non è stata definita deve valere 1
if ($quantity_start == 0) {
$quantity_start 1;
}

switch(
$display_type) {
// con radio box non ho testato
case "radio" //Radio Box
$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity.'" />';
$html .= '<input type="radio" class="quantitycheckbox" id="selItem'.$prod_id.'" name="selItem" value="0" ';
if ($quantity ) {
$html .= 'checked="checked" ';
}
$html .= 'onclick="alterQuantity(this.form)" />';
break;
case "hide" // Hide box - but set quantity to 1!
$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]" value="1" />';
break;
// con check box non ho testato
case "check" :
$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity.'" style="vertical-align: middle;"/>
<input type="checkbox" class="quantitycheckbox" id ="selItem'
.$id.'" name="check[]" ';
if ($quantity ) {
$html .= 'checked="checked"';
}
$html .= ' value="1" onclick="javascript: if(this.checked==true) document.getElementById(\'quantity'.$prod_id.'\').value = 1; else {document.getElementById(\'quantity'.$prod_id.'\').value=0;} "/> ';
break;
// con la casella di controllo non ho testato
case "drop" :
$code '<select class="inputboxquantity" id="quantity'.$prod_id.'" name="quantity[]">';
for($i=$quantity_start;$i<$quantity_end+1;$i += $quantity_step) {
$code .= '  <option value="'.$i.'"';
if ($i == $quantity) {
$code .= ' selected="selected"';
}
$code .= '>'.$i."</option>\n";
}
$code .= "</select>\n";
$html .= $code;
break;
// con la input box funziona
case "none" :
default:
$html .= '<input type="text" style="float:left" class="inputboxquantity" size="4" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity_start.'" />
<input type="button" class="quantity_box_button quantity_box_button_up" onclick="var qty_el = document.getElementById(\'quantity'
.$prod_id.'\'); var qty = qty_el.value; if( !isNaN( qty )) qty_el.value=parseInt(qty_el.value,10) +'.$quantity_start.';return false;" />
<input type="button" class="quantity_box_button quantity_box_button_down" onclick="var qty_el = document.getElementById(\'quantity'
.$prod_id.'\'); var qty = qty_el.value; if( !isNaN( qty ) &amp;&amp; qty > 0 ) qty_el.value=parseInt(qty_el.value,10) -'.$quantity_start.';return false;" />
'
;

break;
}
echo 
$html;
?>

« Ultima modifica: 17 Dic 2010, 19:04:59 da fottutoblues »

Offline ritz2

  • Esploratore
  • **
  • Post: 136
    • Mostra profilo
Re:[RISOLTO] Incrementare il carrello per multipli
« Risposta #2 il: 16 Dic 2010, 19:24:14 »
Bella, fottutoblues,  :o sono andato in tilt per capire tutti i passi, ma penso proprio di adottarlo sul mio sito, ho prodotti a basso prezzo che devo vendere a gruppi di 50 e questo dovrebbe fare al caso mio.
Joomla 1.5.(sempre in aggiornamento)

Offline fottutoblues

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:[RISOLTO] Incrementare il carrello per multipli
« Risposta #3 il: 17 Dic 2010, 18:43:48 »
Grazieee! ;)
E' ancora tutto un po' grezzotto però...
C'era un blocco if di troppo che ho rimosso, ma che comunque non serviva a niente. Era un rimasuglio di un altro esperimento: sto infatti lavorando per fare in modo di differenziare la quantità minima di acquisto dall'entità dell'incremento. In modo da permettere l'acquisto di un minimo M e di successivi incrementi di N.
Ci metterò un bel po', ma sperò che ne nascerà un piccolo tutorial completo...
Ho cercato di rendere più leggibile il post rimuovendo la formattazione del codice.
E' importante che tu faccia prima le modifiche del post che ho citato in apertura. Ah! Segnalami eventuali perfezionamenti. Ad esempio se l'utente seleziona zero e aggiunge al carrello sul mio VM il messaggio di avvertimento è incompleto... roba da poco che si risolve.
Si dovrebbe anche inserire un controllo nel caso venisse messo manualmente un valore non multiplo e poi incrementato: in ogni caso è impossibile aggiungere al carrello quantità non multiple...
Ciao!

 



Web Design Bolzano Kreatif