回答:
実際、PHPの数が少ない.phtml
ほど良いのです。理由は次のとおりです。
Magentoコアファイル /app/design/frontend/base/default/template/catalog/product/price.phtml
は、適切な例です。このHTML「プレゼンテーション」コードは価格を表示します。長さ471行です!主にPHPロジックが原因です。
あなたのようにするために.phtml
スリムとクリーナー:
の不要なシーケンスを回避し<?php … ?>
、それらを単一のチャンクにまとめます<?php … ?>
.phtmlではなく、できるだけ多くのPHPをブロックにプッシュします
上記を支援するために、ブロックで.phtml assign(‘myvar’,
[expression])
なし$this->...
で参照できる$ variablesを作成
するために利用するので、本当に簡潔にすることができます<?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コード補完とナビゲーション機能を失いたくないので、「割り当てられた」変数よりもテンプレートのメソッド呼び出しを実際に好みます。テンプレートの「割り当て」はより簡潔に見えますが、私の好みにはあまりにも多くの魔法であり、魔法のゲッターやセッターよりもさらに悪くなります。