2012-07-03 9 views
5

Ho lavorato alla mia prima distribuzione di Magento. Ho creato un tema abbastanza personalizzato ... affrontando alcune delle personalizzazioni non standard ora:Magento - come recuperare le immagini delle opzioni in bundle

Uno dei miei principali tipi di prodotto è una sedia da ufficio che ho impostato come prodotto in bundle. Ci sono molte opzioni disponibili per questo tipo di prodotto (circa 100 opzioni di tessuto, stile del braccio, lombari, poggiatesta, ecc.) E devo essere in grado di mostrare un'immagine per ognuno di questi nella pagina catalogo/prodotto/vista.

Essendo un prodotto in bundle (e mi asterrò da qualsiasi discussione sul fatto che questo fosse il giusto tipo di prodotto - siamo andati in giro in cerchio discutendo tra un configurabile e un in bundle) - ogni prodotto è assemblato da un numero di prodotti semplici (come opzioni). Questi prodotti semplici possono avere immagini caricate su di loro e io l'ho fatto. Ora voglio recuperare gli URL a quelli dalla cartella media ...

Dopo un po 'di caccia - questi sembrano essere gli elementi essenziali:

tema /../ template/catalogo/prodotto/view/options.phtml

<?php $_options = Mage::helper('core')->decorateArray($this->getOptions()) ?> 
<dl> 
    <?php foreach($_options as $_option): ?> 
     <?php echo $this->getOptionHtml($_option) ?> 
    <?php endforeach; ?> 
</dl> 

tema /../ template/fascio/catalogo/prodotto/view/tipo/bundle/opzione/select.phtml

<?php /* @var $this Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Select */ ?> 
<?php $_option  = $this->getOption(); ?> 
<?php $_selections = $_option->getSelections(); ?> 

ho trovato finalmente trovato getSelections() in:

class Mage_Bundle_Model_Resource_Price_Index extends Mage_Core_Model_Resource_Db_Abstract 
{ ... 


    /** 
     * Retrieve bundle options with selections and prices by product 
     * 
     * @param int $productId 
     * @return array 
     */ 
     public function getSelections($productId) 
     { 
      $options = array(); 
      $read = $this->_getReadAdapter(); 
      $select = $read->select() 
       ->from(
        array('option_table' => $this->getTable('bundle/option')), 
        array('option_id', 'required', 'type') 
       ) 
       ->join(
        array('selection_table' => $this->getTable('bundle/selection')), 
        'selection_table.option_id=option_table.option_id', 
        array('selection_id', 'product_id', 'selection_price_type', 
         'selection_price_value', 'selection_qty', 'selection_can_change_qty') 
       ) 
       ->join(
        array('e' => $this->getTable('catalog/product')), 
        'e.entity_id=selection_table.product_id AND e.required_options=0', 
        array() 
       ) 
       ->where('option_table.parent_id=:product_id'); 

      $query = $read->query($select, array('product_id' => $productId)); 
      while ($row = $query->fetch()) { 
       if (!isset($options[$row['option_id']])) { 
        $options[$row['option_id']] = array(
         'option_id'  => $row['option_id'], 
         'required'  => $row['required'], 
         'type'   => $row['type'], 
         'selections' => array() 
        ); 
       } 
       $options[$row['option_id']]['selections'][$row['selection_id']] = array(
        'selection_id'  => $row['selection_id'], 
        'product_id'  => $row['product_id'], 
        'price_type'  => $row['selection_price_type'], 
        'price_value'  => $row['selection_price_value'], 
        'qty'    => $row['selection_qty'], 
        'can_change_qty' => $row['selection_can_change_qty'] 
       ); 
      } 

      return $options; 
     } 

così torniamo un array con selection_id, product_id, price_type ecc ... ma niente riferendosi alla URL dell'immagine per quella selezione ...

Premesso che:

class Mage_Catalog_Helper_Product extends Mage_Core_Helper_Url 
{ ... 
public function getImageUrl($product) 
     { 
      $url = false; 
      if (!$product->getImage()) { 
       $url = Mage::getDesign()->getSkinUrl('images/no_image.jpg'); 
      } 
      elseif ($attribute = $product->getResource()->getAttribute('image')) { 
       $url = $attribute->getFrontend()->getUrl($product); 
      } 
      return $url; 
     } 

sto cercando di bu ild un oggetto js con arbitri a URL dell'immagine di ogni selezione un po 'come modo di tema /../ template/fascio/catalogo/prodotto/view/tipo/bundle/opzione/select.phtml

var option_set_<?php echo $_option->getId() ?> = {}; 
<?php foreach ($_selections as $_selection): ?> 
    option_set_<?php echo $_option->getId() ?>._<?php echo $_selection->getSelectionId() ?> = '<?php echo $_selection->getImageUrl(); ?>'; 
<?php endforeach; ?> 

Ma $_selection ovviamente non è stato digitato correttamente perché rimbalza solo sul grafico segnaposto.

Assumendo queste opzioni può essere digitato come un prodotto (o in qualche modo ottenere il semplice prodotto dal selection_id, sembra che una cosa del genere può funzionare. Non sono sicuro se questo è esattamente come voglio gestire questa funzione , ma se riesco a ottenere una pila di url - allora sarò in attività

Stranamente, l'interwebs è fondamentalmente silenzioso su questo argomento. Apparentemente nessuno ha bisogno di mostrare le immagini per le loro opzioni di prodotto (o, piuttosto, solo le soluzioni sono estensioni a pagamento - che sarà l'ultima risorsa)

Come posso fare a capirlo?

Gesù picchiaduro Cristo. Mage potrebbe essere più complicato?


Aggiornamento

Ottenuto questo per funzionare come tale:

<?php echo $this->helper('catalog/image')->init($_selection, 'small_image')->resize(40,40); ?> 

La risposta che ho selezionato funziona anche bene, se qualcuno ha bisogno di questa correzione.

risposta

3

Il product_id in $ _selections rappresenta l'id del prodotto semplice selezionato. Quindi tutto fare è:

  1. prendere la product_id dei $ _selections,
  2. carico del prodotto da questo product_id
  3. dare l'oggetto prodotto risultante a Mage_Catalog_Helper_Product :: getImageUrl.
+0

L'ho capito un paio d'ore dopo che l'ho postato (vedi aggiornamento). È abbastanza vicino alla tua risposta, ma rinuncia a ricevere il product_id. Anche questo funzionerebbe. Saluti – Bosworth99

Problemi correlati