Il mio non è un problema ma una soluzione.
La mia non è una vera e propria contrib (quindi spero che qui sia il posto giusto per parlarne).
La contrib per la Posta Raccomandata è utile ma manca di cose fondamentali.
Una di queste è l'esclusione di determinati articoli che non possono essere inviati tramite questo servizio (soprattutto perché eccedono i 5cm di spessore impostati come limite).
Così ho pensato di escludere direttamente alcune determinate categorie di prodotti. Si poteva eslcudere articolo per articolo ma la cosa era più complicata.
La modifica funziona per la versione osCommerce Online Merchant v2.2 RC2a Released. Per altre versioni non so.
Comunque in nessun modo mi ritengo responsabile di problemi che possono nascere inserendo tale codice. E' tutto a vostro rischio e pericolo

Soprattutto, prima di procedere, fatevi un backup del file catalog/checkout_process.php di modo da poterlo ripristinare in caso di problemi.
E' una beta, andrebbe migliorata inserendo la possibilità di scegliere le categorie da poter escludere direttamente scegliendole dal pannello di controllo. Ma per ora le categorie vanno inserite manualmente nel codice.
Per il momento prevede che si abbia un minimo di conoscenza di MySql, per poter visualizzare gli ID delle categorie. Ma, come ho detto, in uno sviluppo futuro non vi sarà bisogno di interagire con niente.
Aprite il file checkout_process.php sotto la cartella catalog.
Cercate il codice:
Codice: Seleziona tutto
$radio_buttons = 0;
for ($i=0, $n=sizeof($quotes); $i<$n; $i++) {
Modificate il codice:
Codice: Seleziona tutto
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td colspan="2"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" colspan="3"><b><?php echo $quotes[$i]['module']; ?></b> <?php if (isset($quotes[$i]['icon']) && tep_not_null($quotes[$i]['icon'])) { echo $quotes[$i]['icon']; } ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
if (isset($quotes[$i]['error'])) {
?>
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" colspan="3"><?php echo $quotes[$i]['error']; ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
} else {
for ($j=0, $n2=sizeof($quotes[$i]['methods']); $j<$n2; $j++) {
// set the radio button to be checked if it is the method chosen
$checked = (($quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'] == $shipping['id']) ? true : false);
if ( ($checked == true) || ($n == 1 && $n2 == 1) ) {
echo ' <tr id="defaultSelected" class="moduleRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
} else {
echo ' <tr class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
}
?>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" width="75%"><?php echo $quotes[$i]['methods'][$j]['title']; ?></td>
<?php
if ( ($n > 1) || ($n2 > 1) ) {
?>
<td class="main"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], (isset($quotes[$i]['tax']) ? $quotes[$i]['tax'] : 0))); ?></td>
<td class="main" align="right"><?php echo tep_draw_radio_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'], $checked); ?></td>
<?php
} else {
?>
<td class="main" align="right" colspan="2"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax'])) . tep_draw_hidden_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id']); ?></td>
<?php
}
?>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
$radio_buttons++;
}
}
?>
</table></td>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
}
Codice: Seleziona tutto
if ($quotes[$i]['module']=='PostaRaccomandata') {
$products = $cart->get_products();
for ($x=0, $y=sizeof($products); $x<$y; $x++) {
if ($y>1) {
$continua = false;
break;
}
$sql = "select categories_id from products_to_categories where products_id = " . (int)$products[$x]['id'];
$categories = tep_db_query($sql);
$categories_id = tep_db_fetch_array($categories);
$cat_id = $categories_id['categories_id'];
if ((int)$cat_id==2 || (int)$cat_id==10 || (int)$cat_id==11|| (int)$cat_id==12 || (int)$cat_id==13 || (int)$cat_id==14 || (int)$cat_id==15 || (int)$cat_id==16) {
$continua = false;
}
else $continua = true;
}
}
else {
$continua = true;
}
if ($continua) {
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td colspan="2"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" colspan="3"><b><?php echo $quotes[$i]['module']; ?></b> <?php if (isset($quotes[$i]['icon']) && tep_not_null($quotes[$i]['icon'])) { echo $quotes[$i]['icon']; } ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
if (isset($quotes[$i]['error'])) {
?>
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" colspan="3"><?php echo $quotes[$i]['error']; ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
} else {
for ($j=0, $n2=sizeof($quotes[$i]['methods']); $j<$n2; $j++) {
// set the radio button to be checked if it is the method chosen
$checked = (($quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'] == $shipping['id']) ? true : false);
if ( ($checked == true) || ($n == 1 && $n2 == 1) ) {
echo ' <tr id="defaultSelected" class="moduleRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
} else {
echo ' <tr class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
}
?>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main" width="75%"><?php echo $quotes[$i]['methods'][$j]['title']; ?></td>
<?php
if ( ($n > 1) || ($n2 > 1) ) {
?>
<td class="main"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], (isset($quotes[$i]['tax']) ? $quotes[$i]['tax'] : 0))); ?></td>
<td class="main" align="right"><?php echo tep_draw_radio_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'], $checked); ?></td>
<?php
} else {
?>
<td class="main" align="right" colspan="2"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax'])) . tep_draw_hidden_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id']); ?></td>
<?php
}
?>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
$radio_buttons++;
}
}
?>
</table></td>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
<?php
}
}
Codice: Seleziona tutto
if ($quotes[$i]['module']=='PostaRaccomandata') {
Attenzione! Se il modulo si chiama in maniera leggermente diversa, come Posta Raccomandata, il codice non funziona, pertanto modificate il valore nella condizione della if con il nome effettivo del modulo.
Codice: Seleziona tutto
$products = $cart->get_products();
Codice: Seleziona tutto
for ($x=0, $y=sizeof($products); $x<$y; $x++) {
Codice: Seleziona tutto
if ($y>1) {
$continua = false;
break;
}
Si può togliere o modificare in base alle proprie esigenze.
Questo per evitare che vi ordino troppi prodotti che insieme facciano uno spessore superiore a 5cm.
Per modificarlo, in modo, ad esempio, di accettare fino a tre prodotti, invece di $y>1 mettere $y>3.
Codice: Seleziona tutto
$sql = "select categories_id from products_to_categories where products_id = " . (int)$products[$x]['id'];
$categories = tep_db_query($sql);
$categories_id = tep_db_fetch_array($categories);
$cat_id = $categories_id['categories_id'];
if ((int)$cat_id==2 || (int)$cat_id==10 || (int)$cat_id==11|| (int)$cat_id==12 || (int)$cat_id==13 || (int)$cat_id==14 || (int)$cat_id==15 || (int)$cat_id==16) {
$continua = false;
}
else $continua = true;
}
}
else {
$continua = true;
}
Codice: Seleziona tutto
if ((int)$cat_id==2 || (int)$cat_id==10 || (int)$cat_id==11|| (int)$cat_id==12 || (int)$cat_id==13 || (int)$cat_id==14 || (int)$cat_id==15 || (int)$cat_id==16) {
$continua = false;
}
else $continua = true;
Se è una categoria che non può usufruire del servizio, allora la variabile $continua viene impostata a false. Altrimenti viene impostata a true.
Come dicevo, ho inserito manualmente l'ID delle categorie, mentre si potrebbe fare in modo di creare una tabella di configurazione, inserire i valori lì, e tirarseli fuori con una query.
Di modo anche da poter permettere di modificare i valori nella tabella direttamente dal pannello di controllo di os-commerce.
Mettiamo che avete tre categorie da escludere, e che i relativi ID sono 5, 7 e 9. Il codice cambierebbe così:
Codice: Seleziona tutto
if ((int)$cat_id==5 || (int)$cat_id==7 || (int)$cat_id==9) {
Codice: Seleziona tutto
if ((int)$cat_id==10) {
Codice: Seleziona tutto
if ($continua) {
Spero che vi sia stato utile.
Cercherò al più presto di migliorarlo come vi ho detto.