2012-07-03 18 views
5

He estado trabajando en mi primer despliegue de magento. Obtuve un tema bastante personalizado ... abordando algunas de las personalizaciones no estándar ahora:Magento: cómo recuperar imágenes de opciones incluidas

Uno de mis principales tipos de productos es una silla de oficina que he configurado como un producto agrupado. Hay muchas opciones disponibles para este tipo de producto (aproximadamente 100 opciones de tela, estilo de brazo, lumbar, reposacabezas, etc.) y necesito poder mostrar una imagen para cada uno de estos en la página de catálogo/producto/vista.

Al tratarse de un producto agrupado (y me abstendré de cualquier discusión sobre si este era el tipo de producto correcto - dimos vueltas en círculos debatiendo entre un configurable y un paquete) - cada producto se ensambla a partir de una serie de productos simples (como opciones). Estos productos simples pueden tener imágenes cargadas, y lo he hecho. ahora quiero recuperar las direcciones URL a los de la carpeta de medios ...

Después de algo de caza - estos parecen ser los elementos esenciales:

tema /../ plantilla// Catálogo de productos/Ver/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 /../ plantilla/paquete// catálogo de productos/view/tipo/bundle/opción/select.phtml

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

encontré finalmente encontró getSelections() en:

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; 
     } 

así que volvamos una matriz con selection_id, product_id, price_type etc ... pero nada en referencia a la URL de la imagen para que la selección ...

Teniendo en cuenta que:

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; 
     } 

estoy tratando de bu ILD un objeto js con referencias a URL de la imagen de cada tipo de selección como tal en tema /../ plantilla/paquete// Catálogo de productos/view/tipo/Bundle/opción/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; ?> 

Pero $_selection obviamente no está tipeado correctamente porque me rebota en el gráfico de marcador de posición.

Suponiendo que estas opciones se pueden escribir como un producto (o de alguna manera obtener el simple producto de la selection_id, parece que algo así puede trabajar. No estoy seguro de si eso es exactamente lo que yo quiero manejar esta función , pero si solo puedo obtener una pila de URL, entonces estaré en el negocio

Extrañamente, las interwebs son básicamente silenciosas sobre este tema. Aparentemente, nadie necesita mostrar imágenes para sus opciones de producto (o, mejor dicho, el solo las soluciones son extensiones de pago, que será el último recurso).

¿Cómo puedo averiguarlo?

Jesus tapdancing christ. ¿Podría Mage ser más complicado?


actualización

Tienes que esto funcione como tal:

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

La respuesta que he seleccionado también funcionan bien, si alguien necesita esta revisión.

Respuesta

3

El product_id en $ _selections representa la identificación del producto simple seleccionado. Así que todo lo que hacer es:

  1. tomar la product_id de los $ _selections,
  2. carga del producto por este product_id
  3. dar el objeto producto resultante a Mage_Catalog_Helper_Product :: getImageUrl.
+0

Me di cuenta de esto un par de horas después de haber publicado esto (ver la actualización). Está bastante cerca de tu respuesta, pero renuncia a obtener el product_id. Esto también funcionaría. Aclamaciones – Bosworth99

Cuestiones relacionadas