繁体   English   中英

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

[英]Magento: creating temporary variable in PHTML template?

遵循Magento的体系结构,在.phtml模板内创建临时变量的最佳方法是什么?

文件: /template/catalog/product/view.phtml

<?php
$myVar = $_product->getAttributeText('color');

if ( empty($myVar) ) {
    // does not exist
} else {
    // show the attribute
}
?>

除此表达式外,$ myVar在其他任何地方都不需要。

注意:我不是在寻找避免创建var的替代方法来编写此代码。 为了便于讨论,假设需要创建一个临时var的情况。

$myVar应该是什么?

  1. $ myVar
  2. $ namespaced_myVar
  3. $ _myVar
  4. Magento的注册表模式http://alanstorm.com/magento_registry_singleton_tutorial
  5. 还有别的...

寻找“现实世界”的解决方案不只是纯粹的答案。 你会怎么写呢?

回答

结合Ben的答案和Alan / Vinai的对话中的这一点https://twitter.com/VinaiKopp/status/225318270591442945 —这就是我要写的方式:

如果需要除基本逻辑以外的任何其他方法,我将使用新方法扩展该类。

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

$mynamespace_myVar = 'xyz';

这就是我喜欢的东西:

  • $mynamespace_提醒我我创建了这个而不是Magento
  • 这也使得它不可能另一家开发商将覆盖我的瓦尔

这是我不喜欢的:

  • 它是不纯净的并且可能会损坏,但是对于整个站点,我可能只需要此<5次,因此可以合理地屏蔽它。
  • 不使用$_来显示var是此模板的本地变量不是“ Magento方式”,但是会使代码更具可读性。

因此,我的模板大部分将具有以下代码:

$gravdept_someNiceData = true;

历史记录: https : //stackoverflow.com/a/3955757/833795

回复1,2,和3:这些选择之间的区别包括进入“纯粹主义者回答”领土,因为他们都是局部变量。

不需要使用注册表模式,因为所需范围被声明为模板渲染的本地范围。

根据您的示例,Magento中的适当构造可能是:

<?php if ($_product->getColor()): ?>
    <h2> I HAZ COLOR </h2>
<?php else: ?>
    <h2> I NO HAZ COLOR </h2>
<?php endif ?>

如果除了返回值的最简单测试外,没有什么比将逻辑添加为块类的方法(使用重写)更合适的了,因为实际上您提到的视图逻辑仅在此上下文中是本地的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM