Answers:
实际上,PHP .phtml
越少越好,因为:
Magento核心文件 /app/design/frontend/base/default/template/catalog/product/price.phtml
就是一个令人痛苦的例子。此HTML“演示”代码显示价格。长471线!主要是因为PHP逻辑。
为了使您的.phtml
身体更清洁更清洁:
避免不必要的序列<?php … ?>
,将它们打包成一个大块<?php … ?>
将尽可能多的PHP推送到Block中,而不是.phtml
为了帮助上述工作,在Block中利用它assign(‘myvar’,
[expression])
来创建$ variables,而$this->...
.phtml中无需
引用它,因此您可以非常简洁<?php echo $myvar; ?>
希望Magento 将来采用Twig以获得更干净的外观
让我们将以上内容应用到上面给出的示例的原始代码中: /app/design/frontend/base/default/template/catalog/product/price.phtml
<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice; ?>
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice+$_weeeTaxAmount; ?>
<?php endif; ?>
….
<?php echo $_coreHelper->currencyByStore($_minimalPriceDisplayValue, $_storeId, true, false) ?>
第一步:删除重复的内容,<?php … ?>
以达到以下目的:
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
$_minimalPriceDisplayValue = $_minimalPrice;
if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))) {
$_minimalPriceDisplayValue = $_minimalPrice+$_weeeTaxAmount;
}
…
echo $_coreHelper->currencyByStore($_minimalPriceDisplayValue, $_storeId, true, false)
?>上面的代码将所有PHP放在一个代码块中。
2 +3。要发展成为更好的东西,请将以下代码移入其代码块:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
请注意_prepareLayout()
和assign()
功能的使用。
现在,.phtml的复杂部分可以简化为以下简单行:
<?php echo $minPrice; ?>
我想我们都可以忍受!
好文章,@ fris,我几乎在所有方面都同意。
主要的收获是将所有逻辑移到块类中,并使模板尽可能“愚蠢”。
实际上,我更喜欢模板中的方法调用而不是已“赋值”的变量,因为我不想失去IDE代码的完成和导航功能。“ assign”在模板中看起来更加简洁,但对我来说却太神奇了,这使得它比魔术获取者和安装者更糟糕。