Infatti, meno PHP è nella tua .phtml
, meglio è perché:
- il mix di PHP e HTML è molto più difficile da decifrare rispetto a ciascuno di essi singolarmente, specialmente per quelli che si sentono a proprio agio con uno solo di essi (ad es. designer front-end)
- ha senso logico collocare l'interazione con il codice del server nel Blocco, lontano da ciò che deve essere presentato nel browser: questo è il vecchio mantra della "separazione delle preoccupazioni".
Il file core di Magento /app/design/frontend/base/default/template/catalog/product/price.phtml
è un caso doloroso al punto. Questo codice HTML di "presentazione" mostra un prezzo. È lungo 471 linee! Principalmente a causa della logica di PHP.
Per rendere il tuo .phtml
corpo più magro e pulito:
evitare sequenze inutili di <?php … ?>
, raggrupparle insieme in blocchi con un singolo<?php … ?>
inserisci più PHP che puoi nel Blocco, piuttosto che nel .phtml
per aiutare con quanto sopra, nel Blocco utilizzare assign(‘myvar’,
[expression])
per creare $ variabili a cui si può fare riferimento senza
$this->...
.phtml, in modo da poter avere conciso<?php echo $myvar; ?>
auguro a Magento di adottare Twig in futuro per un look ancora più pulito
Applichiamo quanto sopra su uno snippet dal codice originale dell'esempio fornito sopra: /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) ?>
Primo passo: rimuovere la ripetizione di <?php … ?>
arrivare a qualcosa del genere:
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)
?>
Quanto sopra mette tutto PHP in un unico blocco di codice.
2 + 3. Sempre evolvendo in qualcosa di meglio, sposta questo codice nel suo blocco:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
Si noti l'uso della _prepareLayout()
e le assign()
funzioni di questo.
Ora quella sezione contorta di .phtml può essere ridotta a questa semplice riga:
<?php echo $minPrice; ?>
Penso che tutti noi possiamo conviverci!