Multiple select attribute
-
06-10-2020 - |
Frage
Im working on a sports e shop and some shoes belong to specific techs which i would like to be shown as images
like this:
I thought of creating a multi select attribute named techs and put values as shown below and create for each option a seperate cms block so that i would call many of these simultanously
View.phtml
<?php /* @var $this Mage_Catalog_Block_Product_View_Abstract */?>
<?php $_product = $this->getProduct() ?>
<?php echo $this->getChildHtml('product_type_data_extra') ?>
<?php echo $this->getPriceHtml($_product) ?>
<?php if ($this->displayProductStockStatus()): ?>
<?php if ($_product->isAvailable()): ?>
<p class="availability in-stock"><?php echo $this->__('Availability:') ?> <span><?php echo $this->__('In stock') ?></span></p>
<?php else: ?>
<p class="availability out-of-stock"><?php echo $this->__('Availability:') ?> <span><?php echo $this->__('Out of stock') ?></span></p>
<?php endif; ?>
<?php endif; ?>
<!-- Step 1 We need to add this to be able to get the attribute values -->
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct()
?>
<!-- Step 2 Allow for techs attribute to display different images based on value of attribute -->
<?php if ($_product->getAttributeText('tech') == "Pulsor"): ?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('tech_pulsor')->toHtml() ?>
<?php elseif ($_product->getAttributeText('tech') == "Flexo"): ?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('tech_flexo')->toHtml() ?>
<?php endif; ?>
However when i put 2 cms nothing is shown if i put one its ok
Lösung
You need to use it as an array
$techTypes = explode(",",$_product->getResource() ->getAttribute('tech')->getFrontend() ->getValue($_product));
foreach($techTypes as $key => $value){
if ($_product->getAttributeText('tech') == "Pulsor"):
echo $this->getLayout()->createBlock('cms/block')->setBlockId('tech_pulsor')->toHtml();
elseif ($_product->getAttributeText('tech') == "Flexo"):
echo $this->getLayout()->createBlock('cms/block')->setBlockId('tech_flexo')->toHtml();
endif;
}
Andere Tipps
I managed to do this without the use of cms blocks
<!-- Display Product Tech Images -->
<div class="techs">
<div class="techs-title">
<span><strong>Technology</strong></span>
</div>
<ul>
<?php
$multiSelectArray = $this->getProduct ()->getAttributeText('tech');
$lastItem = end ($multiSelectArray);
foreach ($multiSelectArray as $multiSelectItem) :?>
<li>
<a tabindex="0" role="button" title="" data-toggle="popover" data-trigger="hover" data-placement="top" data-original-title="<? echo $multiSelectItem; ?>">
<img src="/media/wysiwyg/techs/<?php echo $multiSelectItem ?>.jpg"></img>
<p class="tech-name"><? echo $multiSelectItem; ?></p>
<div class="hidden popover-content">
</div>
</a>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.noConflict();
$('[data-toggle="popover"]').popover();
});
</script>
</li>
<?php endforeach;?>
</ul>
</div>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange