【问题标题】:Magento: creating temporary variable in PHTML template?Magento:在 PHTML 模板中创建临时变量?
【发布时间】:2015-12-21 11:49:48
【问题描述】:

在遵守 Magento 架构的同时,在 .phtml 模板中创建临时变量的最佳方法是什么?

示例

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

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

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

除了这个表达式之外,其他任何地方都不需要 $myVar。

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

$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
  • 这也使得 非常其他开发人员不太可能覆盖我的变量

这是我不喜欢的:

  • 它不纯且可能会损坏,但我可能只需要整个站点
  • 不使用 $_ 显示 var 是该模板的本地变量不是“Magento 方式”,但它使代码更具可读性。

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

$gravdept_someNiceData = true;

【问题讨论】:

标签: php magento


【解决方案1】:

一些历史: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 ?>

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

【讨论】:

  • 我想我是在寻求本地范围内的最佳选择。仅建议使用注册表模式,因为它具有防止覆盖变量的机制。
  • 虽然重写的代码有效,但它只是作为在模板中使用 var 的示例。在我的 actual 用例中,需要进行少量操作/比较,并且创建一个或两个 var 可以提高可读性。使用新方法扩展类对于可以(更容易)在模板中维护的东西(在这种情况下)来说是多余的。
  • 听起来你有你的答案:创造一些便利变量和利润 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多