In der Tat ist es umso .phtml
besser, je weniger PHP Sie verwenden , da:
- Die Mischung aus PHP und HTML ist viel schwieriger zu entschlüsseln als jedes einzelne, insbesondere für diejenigen, die nur mit einem von ihnen vertraut sind (z. B. Front-End-Designer).
- Es ist logisch sinnvoll, die Interaktion mit dem Server-Code im Block zu platzieren, weg von dem, was im Browser dargestellt werden soll - dies ist das alte Mantra der "Trennung von Bedenken".
Die Magento-Kerndatei /app/design/frontend/base/default/template/catalog/product/price.phtml
ist ein schmerzhaftes Beispiel. Dieser HTML-Präsentationscode zeigt einen Preis an. Es ist 471 Zeilen lang! Hauptsächlich wegen der PHP-Logik.
Um .phtml
schlanker und sauberer zu werden:
Vermeiden Sie unnötige Abfolgen von <?php … ?>
, bündeln Sie sie zu Stücken mit einem einzigen<?php … ?>
Schieben Sie so viel PHP wie möglich in den Block und nicht in die .phtml-Datei
Um assign(‘myvar’,
[expression])
dies zu $this->...
erleichtern, müssen Sie im Block $ -Variablen erstellen, auf die in der .phtml-Datei nicht verwiesen werden
kann, damit Sie wirklich präzise vorgehen können<?php echo $myvar; ?>
Ich wünsche Magento, dass Twig in Zukunft für ein noch saubereres Aussehen übernommen wird
Wenden wir das Obige auf einen Ausschnitt aus dem Originalcode des obigen Beispiels an: /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) ?>
Erster Schritt: Entferne die Wiederholung von <?php … ?>
, um zu so etwas zu gelangen:
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)
?>
Das Obige setzt alle PHP in einem einzigen Code-Blob.
2 + 3. Entwickle dich zu etwas noch Besserem und verschiebe diesen Code in seinen Block:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
Beachten Sie dazu die Verwendung der _prepareLayout()
und der assign()
Funktionen.
Nun kann dieser verschachtelte Abschnitt der .phtml-Datei auf diese einfache Zeile reduziert werden:
<?php echo $minPrice; ?>
Ich denke, damit können wir alle leben!