Magento - wie man gebündelte Optionsbilder abruft
Ich habe an meinem ersten Magento-Deployment gearbeitet. Es wurde ein hübsches benutzerdefiniertes Thema erstellt, das einige der nicht standardmäßigen Anpassungen angeht:
Einer meiner primären Produkttypen ist ein Bürostuhl, den ich als gebündeltes Produkt eingerichtet habe. Für diesen Produkttyp sind viele Optionen verfügbar (etwa 100 Stoffoptionen, Armstil, Lendenwirbel, Kopfstütze usw.), und ich muss in der Lage sein, auf der Katalog- / Produkt- / Ansichtsseite für jede dieser Optionen ein Bild anzuzeigen.
Als gebündeltes Produkt (und ich werde keine Diskussion darüber führen, ob dies der richtige Produkttyp ist - wir haben in Kreisen zwischen einem konfigurierbaren und einem gebündelten Produkt diskutiert) - wird jedes Produkt aus einer Reihe einfacher Produkte zusammengesetzt (als Optionen). . Auf diese einfachen Produkte können Bilder hochgeladen werden, und das habe ich auch getan.Ich möchte jetzt die URLs zu denen aus dem Medienordner abrufen ...
Nach einigem Jagen scheinen dies die wesentlichen Elemente zu sein:
theme /../ template / catalog / product / 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>
theme /../ template / bundle / catalog / product / view / type / bundle / option / select.phtml
<?php /* @var $this Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Select */ ?>
<?php $_option = $this->getOption(); ?>
<?php $_selections = $_option->getSelections(); ?>
Ich habe endlich gefundengetSelections()
im:
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;
}
so bekommen wir ein Array mit zurückselection_id
, product_id
, price_type
etc ... aber nichts mit Bezug auf die Bild-URL für diese Auswahl ...
Vorausgesetzt, dass:
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;
}
Ich versuche, ein js-Objekt mit Verweisen auf die Bild-URL jeder Auswahl zu erstellentheme /../ template / bundle / catalog / product / view / type / bundle / option / 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; ?>
Aber$_selection
Offensichtlich ist die Eingabe nicht korrekt, da sie mich nur an die Platzhaltergrafik weiterleitet.
Angenommen, diese Optionen können als Produkt eingegeben werden (oder erhalten Sie das einfache Produkt auf irgendeine Weise von derselection_idEs scheint, als könnte so etwas funktionieren. Ich bin mir nicht sicher, ob ich diese Funktion genau so verwalten möchte, aber wenn ich nur einen Stapel von URLs abrufen kann, bin ich im Geschäft
Seltsamerweise schweigen die Interwebs zu diesem Thema. Anscheinend muss niemand Bilder für seine Produktoptionen zeigen (oder vielmehr, die einzigen Lösungen sind kostenpflichtige Erweiterungen - was ein letzter Ausweg sein wird).
Wie kann ich das herausfinden?
Jesus, der Christus tapdanzt. Könnte Magier noch komplizierter sein?
Aktualisieren
Habe dies als solches zu arbeiten:
<?php echo $this->helper('catalog/image')->init($_selection, 'small_image')->resize(40,40); ?>
Die Antwort, die ich ausgewählt habe, funktioniert auch, wenn jemand diese Korrektur benötigt.