Magento:在PHTML模板中创建临时变量?

时间:2012-09-19 17:34:39

标签: php magento

在遵守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应该是什么?

  1. $ myVar的
  2. $ namespaced_myVar
  3. $ _ myVar的
  4. Magento的注册表模式http://alanstorm.com/magento_registry_singleton_tutorial
  5. 别的......
  6. 寻找“真实世界”的解决方案而不仅仅是纯粹的答案。你会怎么写这个?

    答案

    Ben的答案与Alan / Vinai的谈话https://twitter.com/VinaiKopp/status/225318270591442945中的这一点相结合 - 这就是我要写的:

    如果需要的不仅仅是基本逻辑,我将使用新方法扩展该类。

    否则,我将在本地范围内创建新变量,如下所示:

    $mynamespace_myVar = 'xyz';
    

    这就是我喜欢的:

    • $mynamespace_提醒我,我创造了这个,而不是Magento
    • 它也使高度不太可能另一个开发者覆盖我的vars

    这是我不喜欢的:

    • 它不纯净且可能具有腐败性,但我可能只需要这个&lt; 5次就可以完全屏蔽它。
    • 不使用$_来显示此模板的局部变量不是“Magento方式”,但它使代码更具可读性。

    所以我的模板大多会有这样的代码:

    $gravdept_someNiceData = true;
    

1 个答案:

答案 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 ?>

如果除了最简单的返回值测试之外还有其他任何东西,那么将这个逻辑添加为块类的方法(使用重写)是合适的,因为实际上你提到的视图逻辑应该是本地的仅限上下文。