Magento如果属性值是x或y,则显示自定义块

时间:2015-02-12 22:34:52

标签: magento if-statement attributes

在view.phtml上,我正在尝试获取自定义块" console"显示属性平台的值是否为" xbox"," playstation"或者"任天堂"。

我得到的代码适用于xbox,但是如何解决它以便显示块,而不是playstation或nintendo?

BR, 托拜厄斯

<?php if ($_product->getAttributeText('platform') == "xbox"): ?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('console')->toHtml() ?><?php endif; ?>

2 个答案:

答案 0 :(得分:1)

你的意思是你想要任何游戏机的同一块?我建议switch statement

用你写的if语句替换:

switch($_product->getAttributeText('platform')){
  case "xbox" :
  case "nintendo" :
  case "playstation" :
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('console')->toHtml();
    break;
  default :
    //here you can put a default other block or show nothing or whatever you want to do if the product is not a console
}

现在,您可以添加更多case "other console" :语句来添加更多控制台。

还有其他方法。您可以从属性值创建所有控制台的数组,然后使用inArray(); - 如果您的客户端通过Magento管理员向该属性添加更多控制台,则可能更适合一般情况。

**编辑**以下评论

如果属性&#39;平台&#39;是多选,然后$_product->getAttributeText('platform')将是字符串,如果选择了一个项目,但如果选择了多个项目,它将是一个数组。所以你需要处理一个可以是字符串或数组的变量。在这里,我们将字符串转换为数组并使用PHP's handy array_intersect() function

我建议:

$platformSelection = $_product->getAttributeText('platform');
if (is_string($platformSelection))
{
    //make it an array
    $platformSelection = array($platformSelection); //type casting of a sort
}

//$platformSelection is now an array so:

//somehow know what the names of the consoles are:
$consoles = array('xbox','nintendo','playstation');

if(array_intersect($consoles,$platformSelection)===array())
{
    //then there are no consoles selected
    //here you can put a default other block or show nothing or whatever you want to do if the product is not a console
}
else
{
    //there are consoles selected
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('console')->toHtml();
}

请注意,array_intersect()函数严格比较===的数组元素,因此它区分大小写,如果没有交集,函数将返回一个空数组array()

答案 1 :(得分:0)

如果你想为这3个值中的任何一个使用相同的块,那么应该这样做:

<?php 
$productAttribute = $_product->getAttributeText('platform');
if ($productAttribute == "xbox" || $productAttribute == "playstation" || $productAttribute == "nintendo"): ?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('console')->toHtml() ?><?php endif; ?>

如果你想要不同的块取决于值,这应该这样做:

<?php
$productAttribute = $_product->getAttributeText('platform');
switch ($productAttribute){
  case "xbox":
echo $this->getLayout()->createBlock('cms/block')->setBlockId('xbox')->toHtml();
break;
  case "playstation":
echo $this->getLayout()->createBlock('cms/block')->setBlockId('playstation')->toHtml();
break;
  case "nintendo":
echo $this->getLayout()->createBlock('cms/block')->setBlockId('nintendo')->toHtml();
break;
}
?>