Come usare i Campioni configurabili Magento 1.9.1.0 nel tema Pacchetto predefinito (o un tema personalizzato)?


28

AGGIORNAMENTO: la mia risposta ora supporta il cambio automatico dell'immagine di base del prodotto dopo il campione. Puoi anche trovare un tutorial più dettagliato su come farlo, includendo più immagini qui .

Magento CE 1.9.1.0 è dotato di una nuovissima funzionalità: Campioni configurabili. Sfortunatamente, questo è disponibile solo per il pacchetto RWD, fornito con l'installazione predefinita di Magento. Questa è una domanda con risposta autonoma su come rendere i campioni configurabili Magento disponibili per il pacchetto predefinito. Per chiunque desideri integrare i Campioni configurabili in un tema personalizzato, anche queste informazioni possono tornare utili.

Nota 1: si intende che sia una guida introduttiva su come rendere disponibili i Campioni configurabili per il pacchetto predefinito di Magento. Questo potrebbe (ma potrebbe non funzionare) per ogni tema personalizzato. Eseguire sempre il backup dei file originali (e del database) prima di apportare eventuali modifiche.

Nota 2: i campioni funzionano (schermata di seguito), ma non ho ancora ottenuto che l'immagine del prodotto cambi automaticamente insieme ai campioni. Proverò a esaminarlo quando troverò del tempo.

inserisci qui la descrizione dell'immagine

Sentiti libero di contribuire commentando e dando suggerimenti!


Il link che hai aggiunto alla domanda non funziona: bemaged.com/en/blog/use-magento-swatches-in-custom-theme
Mukesh Chapagain

Risposte:


27
  1. Copia la cartella

    app/design/frontend/RWD/default/template/configurableswatches/

    e il suo contenuto a

    app/design/frontend/DEFAULT/default/template/

    (o la cartella del modello del pacchetto)

  2. Copia il file

    app/design/frontend/RWD/default/template/catalog/product/view/type/options/configurable.phtml

    a

    app/design/frontend/DEFAULT/default/template/catalog/product/view/type/options/

    (o la cartella del modello del pacchetto)

  3. Copia il file

    app/design/frontend/RWD/default/template/catalog/product/view/media.phtml

    a

    app/design/frontend/DEFAULT/default/template/catalog/product/view/

    (o la cartella del modello del pacchetto)

  4. Copia le cartelle

    skin/frontend/RWD/default/js/configurableswatches/
    skin/frontend/RWD/default/js/lib/

    e il loro contenuto a

    skin/frontend/DEFAULT/default/js/

    (o la cartella della skin del pacchetto)

  5. Copia i file

    skin/frontend/RWD/default/js/app.js
    skin/frontend/RWD/default/js/minicart.js
    skin/frontend/RWD/default/js/slideshow.js

    a

    skin/frontend/DEFAULT/default/js/

    (o la cartella della skin del pacchetto)

  6. Copia il file

    app/design/frontend/RWD/default/layout/configurableswatches.xml

    a

    app/design/frontend/DEFAULT/default/layout/

    (o la cartella del layout del pacchetto)

  7. Crea il file

    app/design/frontend/DEFAULT/default/layout/local.xml

Se la cartella del layout del pacchetto contiene già un local.xmlfile, non sovrascriverlo. Dai un'occhiata alle modifiche nel passaggio successivo e copiale nella tua versione del local.xmlfile.

  1. Apri local.xmle aggiungi il seguente codice:

    <?xml version="1.0"?>
    <layout>
    
        <default>
    
            <reference name="head">
    
                    <action method="addJs"><script>lib/jquery/jquery-1.10.2.min.js</script></action>
                    <action method="addJs"><script>lib/jquery/noconflict.js</script></action>
    
                    <action method="addItem"><type>skin_js</type><name>js/lib/modernizr.custom.min.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/selectivizr.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.addListener.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/enquire.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/app.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.min.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.swipe.min.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action>
                    <action method="addItem"><type>skin_js</type><name>js/lib/imagesloaded.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/minicart.js</name></action>
    
            </reference>
    
        </default>
    
        <catalog_product_view>
    
            <reference name="head">
    
                <action method="addItem"><type>skin_js</type><script>js/lib/elevatezoom/jquery.elevateZoom-3.0.8.min.js</script></action>
    
            </reference>
    
            <reference name="product.info.media">
    
                <block type="core/text_list" name="product.info.media.after" as="after" />
    
            </reference>
    
        </catalog_product_view>
    
        <PRODUCT_TYPE_configurable>
    
            <reference name="product.info.options.configurable">
    
                <block type="core/text_list" name="product.info.options.configurable.renderers" as="attr_renderers">
                            <block type="configurableswatches/catalog_product_view_type_configurable_swatches" template="configurableswatches/catalog/product/view/type/options/configurable/swatches.phtml" />
                </block>
                <block type="core/text_list" name="product.info.options.configurable.after" as="after">
                <block type="core/template" template="configurableswatches/catalog/product/view/type/configurable/swatch-js.phtml" />
                </block>
    
            </reference>
    
        </PRODUCT_TYPE_configurable>
    
    </layout>
  2. Aggiungi i seguenti css al tuo file styles.css :

    /* ============================================ *
     * Configurable Swatches
     * ============================================ */
    /* Clears */
    .clearfix:after,
    .configurable-swatch-list:after,
    .product-view .product-options .swatch-attr:after {
      content: '';
      display: table;
      clear: both;
    }
    
    /* General Swatch Styling */
    .swatch-link,
    .swatch-label {
      display: block;
      border-radius: 3px;
      font-size: 14px;
      text-align: center;
      color: #636363;
      text-decoration: none;
      box-sizing: content-box;
    }
    
    .swatch-link {
      border: 1px solid #cccccc;
      margin: 0 0 3px;
    }
    .swatch-link img {
      border-radius: 2px;
    }
    .swatch-link:hover {
      cursor: pointer;
      text-decoration: none;
    }
    .swatch-link .x {
      display: none;
      text-indent: -999em;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      background: url(../images/bg_x.png) center no-repeat transparent;
      z-index: 10;
    }
    .swatch-link.has-image .swatch-label {
      position: relative;
    }
    .swatch-link.has-image img {
      position: absolute;
      top: 0;
      left: 0;
    }
    
    .swatch-label {
      border: 1px solid #fff;
      margin: 0;
      white-space: nowrap;
      background: #f4f4f4;
    }
    
    .configurable-swatch-list {
      margin-left: -3px;
      zoom: 1;
      clear: both;
      -webkit-transform: translateZ(0px);
    }
    .configurable-swatch-list li {
      float: left;
      zoom: 1;
      margin: 0 0 0 3px;
    }
    .products-grid .configurable-swatch-list li {
      display: inline-block;
      float: none;
      margin: 0;
      vertical-align: top;
    }
    .configurable-swatch-list .not-available .x {
      display: block;
    }
    .configurable-swatch-list .not-available .swatch-link {
      border-color: #ededed;
      position: relative;
    }
    .configurable-swatch-list .not-available .swatch-link.has-image img {
      opacity: 0.4;
      filter: alpha(opacity=40);
    }
    .configurable-swatch-list .not-available .swatch-label {
      color: #aaa;
      background: #fff;
    }
    .configurable-swatch-list .wide-swatch .swatch-label {
      padding: 0 6px;
    }
    .configurable-swatch-list .not-available a:focus {
      outline: 0;
    }
    
    #narrow-by-list dd .configurable-swatch-list li {
      margin: 0 0 0 3px;
      width: 47%;
    }
    #narrow-by-list dd .swatch-link {
      border: none;
      line-height: 25px;
      margin-right: 2px;
      text-align: left;
    }
    #narrow-by-list dd .swatch-link.has-image {
      line-height: inherit;
    }
    #narrow-by-list dd .swatch-link:hover .swatch-label {
      border-color: #3399cc;
    }
    #narrow-by-list dd .swatch-label {
      background: #f4f4f4;
      border: 1px solid #cccccc;
      border-radius: 3px;
      display: block;
      float: left;
      line-height: 1.5em;
      margin: 0 5px 0 0;
      padding: 1px 5px;
      white-space: nowrap;
    }
    #narrow-by-list dd .swatch-label img {
      border: 1px solid #fff;
      border-radius: 3px;
      box-sizing: content-box;
    }
    #narrow-by-list dd .has-image .swatch-label {
      padding: 0;
    }
    
    @media only screen and (max-width: 770px) {
      #narrow-by-list dd .configurable-swatch-list li:nth-child(odd) {
        clear: left;
      }
    }
    .currently .swatch-current {
      position: relative;
    }
    .currently .swatch-current .btn-remove {
      margin-top: -10px;
      position: absolute;
      right: 0;
      top: 50%;
    }
    .currently .swatch-current span {
      display: block;
      float: left;
    }
    .currently .swatch-link {
      display: inline-block;
      margin: 0 0 0 3px;
    }
    .currently .swatch-link:hover {
      border-color: #cccccc;
      cursor: default;
    }
    
    /* Other Swatch States */
    .configurable-swatch-list .hover .swatch-link,
    .configurable-swatch-list .selected .swatch-link,
    .swatch-link:hover {
      border-color: #3399cc;
    }
    
    .configurable-swatch-box {
      background: none !important;
    }
    .configurable-swatch-box select.swatch-select {
      display: none;
    }
    .configurable-swatch-box .validation-advice {
      margin: 0 0 5px;
      background: #df280a;
      padding: 2px 5px !important;
      font-weight: bold;
      color: #fff !important;
      float: left;
      display: block;
      border-radius: 3px;
    }
    .product-view .product-img-box .product-image img {
        max-width: 100%;
        max-height: 750px;
        margin: 0px auto;
    }
    .product-view .product-img-box .product-image-zoom {
        z-index: 0;
    }
    .product-view .product-image-thumbs img {
        max-width: 100%;
        max-height: 100%;
    }
  3. Copia il file

    skin/frontend/RWD/default/images/bg_x.png

    a

    skin/frontend/DEFAULT/default/images/

1
Come aggiungeresti i campioni ai singoli prodotti su Catalogo / Prodotto / Elenco? All'interno di RWD predefinito è possibile selezionare i diversi campioni direttamente da qui senza dover fare clic sul prodotto. Naturalmente, è necessario abilitare l'impostazione nel back-end: "Attributo del prodotto da utilizzare per i campioni nella scheda di prodotto" per primo.
Joe,

Inoltre, consiglierei di aggiungere .product-image-zoom.zoom-available .gallery-image { display: none; } .product-image-zoom.zoom-available .gallery-image.visible { display: block; }alla fine del CSS, poiché senza di essa, vedrai l'ultima immagine del prodotto aggiunto quando visiti un prodotto, ma quando passi con il mouse, vedrai l'immagine principale.
SebiF,

1
Galleria L'immagine non cambia al clic del colore del campione, puoi dirmi come farla funzionare?
Tahir Yasin,

2

la tua soluzione è ottima ma non mostra il campione di colore nell'elenco delle categorie o nella griglia. Qui aggiungo la soluzione per mostrarla, testata su magento 1.9.2.4.

In: app / design / frontend / CUSTOM-THEME / template / catalog / product aggiungi la linea seguita in list.phtml

1 - prima di mostrare nella vista elenco, controlla se questo, se no, aggiorna o cambia (aroud line 39):

<?php $_imgSize = 300; ?>
            <img id="product-collection-image-<?php echo $_product->getId(); ?>"
                 src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->keepFrame(false)->resize($_imgSize); ?>"
                 alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
        </a>

In alternativa puoi usare questo:

            <img id="product-collection-image-<?php echo $_product->getId(); ?>"
          src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(230,279); ?>" class="small-image" 
          alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />             

        </a>

regola l'immagine di ridimensionamento.

2 - dopo "getRatingSummary" = php end if =, intorno alla riga 53, aggiungi questo:

                        <?php
                    // Provides extra blocks on which to hang some features for products in the list
                    // Features providing UI elements targeting this block will display directly below the product name
                    if ($this->getChild('name.after')) {
                        $_nameAfterChildren = $this->getChild('name.after')->getSortedChildren();
                        foreach ($_nameAfterChildren as $_nameAfterChildName) {
                            $_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
                            $_nameAfterChild->setProduct($_product);
                            echo $_nameAfterChild->toHtml();
                        }
                    }
                    ?>

3 - apporta la stessa modifica alla vista cingoli attorno alle linee 120 e 152.

4 - alla fine del file aggiungi questo:

 <?php
// Provides a block where additional page components may be attached, primarily good for in-page JavaScript
if ($this->getChild('after')) {
    $_afterChildren = $this->getChild('after')->getSortedChildren();
    foreach ($_afterChildren as $_afterChildName) {
        $_afterChild = $this->getChild('after')->getChild($_afterChildName);
        //set product collection on after blocks
        $_afterChild->setProductCollection($_productCollection);
        echo $_afterChild->toHtml();
    }
}
?>

1

Questo è stato molto utile! Ho alcuni dettagli in più che sono stato in grado di elaborare per far funzionare l'immagine.

  1. Copia il file

    app/design/frontend/RWD/default/template/catalog/product/view/media.phtml

    a

    app/design/frontend/DEFAULT/default/template/catalog/product/view/

    o il tuo tema personalizzato

  2. Copia il seguente elenco di file:

    app/skin/frontend/RWD/default/js/app.js
    app/skin/frontend/RWD/default/js/slideshow.js
    app/skin/frontend/RWD/default/js/lib/* (all files and the elevatezoom folder)

    a

    app/skin/frontend/DEFAULT/default/js

    o il tuo tema personalizzato

  3. Per includere questi nuovi script, modifica app / design / frontend / DEFAULT / default / layout / page.xml (esegui prima un backup di questo file e assicurati di unire le modifiche se esegui aggiornamenti poiché il tema predefinito verrebbe sovrascritto)

    Aggiungi dopo la riga 38:

    <action method="addJs"><script>lib/jquery/jquery-1.10.2.min.js</script></action>
    <action method="addJs"><script>lib/jquery/noconflict.js</script></action>

    Aggiungi dopo la riga 50 (riga 52 se hai già aggiunto le due righe precedenti):

        <action method="addItem"><type>skin_js</type><name>js/lib/modernizr.custom.min.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/selectivizr.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.addListener.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/enquire.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/app.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.min.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.swipe.min.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action>
        <action method="addItem"><type>skin_js</type><name>js/lib/imagesloaded.js</name></action>
  4. Rimuovere la sezione / * Immagini prodotto * / dal file styles.css (attorno alle righe 783-803) e incollare il seguente CSS dal file RWD styles.css:

    * Product Images */
    .product-img-box {
      width: 50%;
      float: left;
    }
    .product-img-box .product-name h1 {
      border: 0;
    }
    .product-img-box .product-image {
      margin-bottom: 10px;
    }
    .product-img-box .product-image img {
      max-width: 100%;
      max-height: 750px;
      margin: 0px auto;
    }
    
    @media only screen and (max-width: 479px) {
      .product-img-box .product-image img {
        max-height: 450px;
      }
    }
    .product-image-gallery {
      position: relative;
    }
    .product-image-gallery .gallery-image {
      display: none;
    }
    .product-image-gallery .gallery-image.visible {
      display: block;
    }
    .product-image-gallery .gallery-image.visible.hidden {
      visibility: hidden;
    }
    .product-image-gallery:before, .product-image-gallery:after {
      content: '';
      position: absolute;
      top: 0px;
      left: 0px;
      width: 100%;
      height: 100%;
      display: none;
    }
    .product-image-gallery:before {
      background-color: white;
      opacity: 0.8;
      z-index: 2;
    }
    .product-image-gallery:after {
      background-image: url("../images/opc-ajax-loader.gif");
      background-repeat: no-repeat;
      background-position: center;
      z-index: 3;
    }
    .product-image-gallery.loading {
      position: relative;
    }
    .product-image-gallery.loading:before, .product-image-gallery.loading:after {
      display: block;
    }
    
    .product-image-thumbs li {
      display: inline-block;
    }
    .product-image-thumbs li:first-child {
      margin-left: -1px;
    }
    .product-image-thumbs a {
      display: inline-block;
      border: 1px solid transparent;
    }
    
    .no-touch .product-image-thumbs a:hover {
      border-color: #c7c7c7;
    }

Infine, ma non meno importante, alcune ottimizzazioni per elevateZoom grazie a Google e trovando il seguente post sul blog BelVG di Mishel Soiko , sono stato in grado di modificare e sfruttare più impostazioni per elevateZoom come lo zoom interno o l'offset della finestra dello zoom , ecc. Inoltre, volevo che l'immagine facesse clic su un popup di fantasia, che ho attivato con l'aiuto del blog sopra nei commenti.

  1. Apri quel file app.js che hai copiato sul tema in precedenza

    Sopra la riga 1153 ( var ProductMediaManager = {), incolla (copiato dal link al blog BelVG sopra):

    var settings = {
    
        // set tint background
        tint:true,
        tintColour:'#F90',
        tintOpacity:0.5,
    
        // Size
        zoomWindowHeight: 300,
        zoomWindowWidth: 400,
        borderSize: 0,
    
        // Position
        zoomWindowOffetx: 10,
        zoomWindowOffety: 0,
    
        // Additional settings for Zoomer positioning.
        // zoomWindowPosition: 1,
        // zoomType: "inner",
    
        // Fade-in speed settings
        zoomWindowFadeIn: 500,
        zoomWindowFadeOut: 500,
        lensFadeIn: 500,
        lensFadeOut: 500,
    
        // Ability to zoom by using the mouse scroll.
        scrollZoom : true,
    
        // inertia - my favorite one 
        easing: true
    }

    Se vuoi il popup fancybox, sopra quello che ora è la linea 1227, incolla:

    $j(".product-image-gallery").on("click", function(e) {
        var src = $j('.product-image img.visible').attr('src');
    $j.fancybox(src);
    });

    Nota, dovrai caricare la libreria js fancybox dopo jQuery nel tuo page.xml o altrove nel tuo tema

    Infine, modifica quella che ora è la linea 1232 (se hai fatto entrambi gli incollaggi dall'alto) da:

    image.elevateZoom();

    a:

    image.elevateZoom(settings);

Per una panoramica di tutte le impostazioni dello zoom, controlla la pagina ufficiale che descrive le impostazioni elevateZoom

E questo dovrebbe farlo funzionare. Se stai lavorando con un tema personalizzato (come lo ero io) potresti avere altro da fare.


Con un approccio leggermente diverso sono stato in grado di far funzionare anche il passaggio automatico delle immagini. Nel mio approccio sto usando local.xmlper caricare tutti i .jsfile nella headpagina. Aggiornerò la mia risposta quando troverò un po 'di tempo. Fino ad allora puoi trovare un tutorial dettagliato che ho scritto su come farlo qui .
ForMat,

0 voto negativo I Campioni configurabili non cambieranno l'immagine sul prodotto configurabile Si prega di controllare, ravichomal.blogspot.in/2015/12/…
Ravi Chomal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.