Joomla.it Forum
Componenti per Joomla! => Gestione e-commerce => : MarcusJ 10 Jul 2009, 17:35:53
-
Salve a tutti, non so se può essere utile, ma ho realizzato una soluzione per poter avere nella visualizzazione del prodotto una lista di caselle di colori differenti che una volta cliccati mostrano in una lightbox l'immagine del prodotto relativa. Potrei postare una mini guida, lo faccio direttamente qui?
ciauz
Francesco
-
intanto si grazie, poi vediamo
ciao
jk
-
la mia soluzione parte da un presupposto: il cliente deve caricare il prodotto e le immagini dei relativi colori senza troppi problemi.
Basandomi su un post in questo form bisogna creare un attributo qualsiasi ad esempio di nome "colore" e poi aggiungere elementi al prodotto (i "subprodotti") di cui il nome sarà il colore RGB usato ad esempio "FF0000" e l'immagine quella che comparirà cliccando sul box che avrà come colore di sfondo il nome dell'elemento si aprirà una lightbox con l'immagine del subprodotto. Così facendo al cliente basterà caricare nuovi elementi mettendo come nome il colore del box.
-
ci sono un paio di modifiche da fare al core di virtuemart e un paio di file tpl da creare, non conosco benissimo virtuemart quindi mi sono basato sulla gestione degli elementi per estrapolare il codice, detto questo passiamo agli step:
bisogna modificare il file administrator/components/com_virtuemart/classes/
ps_product_attribute.php
e aggiungere la funzione list_attribute_color (l'ho creata basandomi su list_attribute):
function list_attribute_color( $product_id ) {
global $VM_LANG, $CURRENCY_DISPLAY, $mm_action_url, $sess ;
require_once (CLASSPATH . 'ps_product.php') ;
$ps_product = new ps_product( ) ;
$Itemid = $sess->getShopItemid() ;
$category_id = vmGet( $_REQUEST, 'category_id', "" ) ;
$db = new ps_DB( ) ;
$db_sku = new ps_DB( ) ;
$db_item = new ps_DB( ) ;
$tpl = new $GLOBALS['VM_THEMECLASS']( ) ;
$tpl->set( "cls_suffix", $cls_suffix ) ;
$tpl->set( "product_id", $product_id ) ;
// Get list of children
$q = "SELECT product_id,product_name,product_full_image FROM #__{vm}_product WHERE product_parent_id='$product_id' AND product_publish='Y'" ;
$db->query($q);
if( $db->num_rows() > 0 ) {
$flypage = $ps_product->get_flypage( $product_id ) ;
$html = "<div name=\"product_id\" value=\"$product_id\" />" ;
$html .= "<span>" . $VM_LANG->_( 'PHPSHOP_PLEASE_SEL_COLOR' ) . "</span>: <br />\n" ;
while( $db->next_record() ) {
$html .= "<div style=\"width:20px;height:20px;float:left;margin-right:5px;border: 2px solid #FFFFFF; background-color:#".$db->f( "product_name" ).";\"><a href=\"components/com_virtuemart/shop_image/product/".$db->f( "product_full_image" )."\" style=\"width:100%;height:100%;display:block;\" rel=\"lightbox[product2]\"></a></div>";
}
$html .= "</div>\n " ;
$tpl->set( "select_color", $html ) ;
} else {
$html = "<div name=\"product_id\" value=\"$product_id\" />" ;
$html .= "</div>\n " ;
$tpl->set( "select_color", $html ) ;
}
$html = $tpl->fetch( 'product_details/includes/select_color.tpl.php' ) ;
return array( $html , "drop" ) ;
}
e bisogna aggiungere ai file di lingua in administrator/components/com_virtuemart/languages/common la costante PHPSHOP_PLEASE_SEL_COLOR con il testo che preferite tipo "Visualizza colori differenti"
-
dopo create il file components/com_virtuemart/themes/nome del vostro tema/templates/product_details/includes/product_color.tpl.php
con il codice:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) )
die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>
<div class="vmColorContainer">
<?php
mm_showMyFileName(__FILE__);
list($html,$children) = $ps_product_attribute ->
list_attribute_color( ( $product_parent_id > 0 ) ? $product_parent_id : $product_id );
echo $html;
?>
</div>
e poi create il file components/com_virtuemart/themes/kronosystem/templates/product_details/includes/select_color.tpl.php
con il codice:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) )
die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>
<div class="vmColorDetails<?php echo $cls_suffix; ?>">
<?php echo $select_color ?>
</div>
e in
components/com_virtuemart/themes/nome del vostro tema/theme.css
aggiungere il css per .vmColorContainer
-
bene siamo alla fine adesso aggiungete le 2 righe di codice a shop.product_detail.php
$product_color = $tpl-> fetch('product_details/includes/product_color.tpl.php' );
$tpl->set( "product_color", $product_color );
Modificate infine il file flypage.tpl.php inserendo dove preferite
<?php echo $product_color ?>
questo creerà un box con una serie di div cliccabili! spero di essere stato chiaro!
ciauz vado al mare!!!
-
Io ho provato a seguire la tua guida ma non funziona niente.
Quando visualizzo il prodotto ricevo questo errore:
Fatal error: Call to a member function fetch() on a non-object in /var/www/miosito/administrator/components/com_virtuemart/html/shop.product_details.php on line 44
Perchè non fai un modulo, cosi è + facile da installarlo.
Come inserisci l'immagine??
Grazie