在遵守Magento架构的同时,在.phtml
模板中创建临时变量的最佳方法是什么?
档案:/template/catalog/product/view.phtml
<?php
$myVar = $_product->getAttributeText('color');
if ( empty($myVar) ) {
// does not exist
} else {
// show the attribute
}
?>
除了这个表达式之外,其他任何地方都不需要$ myVar。
注意:我不是在寻找替代方法来编写此代码以避免创建变量。为了论证,假设需要创建临时var的场景。
$myVar
应该是什么?寻找“真实世界”的解决方案而不仅仅是纯粹的答案。你会怎么写这个?
Ben的答案与Alan / Vinai的谈话https://twitter.com/VinaiKopp/status/225318270591442945中的这一点相结合 - 这就是我要写的:
如果需要的不仅仅是基本逻辑,我将使用新方法扩展该类。
否则,我将在本地范围内创建新变量,如下所示:
$mynamespace_myVar = 'xyz';
这就是我喜欢的:
$mynamespace_
提醒我,我创造了这个,而不是Magento 这是我不喜欢的:
$_
来显示此模板的局部变量不是“Magento方式”,但它使代码更具可读性。所以我的模板大多会有这样的代码:
$gravdept_someNiceData = true;
答案 0 :(得分:3)
一些历史记录:https://stackoverflow.com/a/3955757/833795
Re 1,2,&amp; 3:区分这些选择涉及进入“纯粹回答”领域,因为它们是所有局部变量。
使用注册表模式是不必要的,因为所需的范围被声明为模板呈现的本地范围。
根据您的示例,Magento中的适当构造可能是:
<?php if ($_product->getColor()): ?>
<h2> I HAZ COLOR </h2>
<?php else: ?>
<h2> I NO HAZ COLOR </h2>
<?php endif ?>
如果除了最简单的返回值测试之外还有其他任何东西,那么将这个逻辑添加为块类的方法(使用重写)是合适的,因为实际上你提到的视图逻辑应该是本地的仅限上下文。