De fato, quanto menos PHP você .phtml
tiver, melhor, porque:
- a mistura de PHP e HTML é muito mais difícil de decifrar do que cada um deles individualmente, especialmente para quem se sente à vontade com apenas um deles (por exemplo, designers de front-end)
- faz sentido lógico colocar a interação com o código do servidor no bloco, longe do que será apresentado no navegador - esse é o antigo mantra da "separação de preocupações".
O arquivo principal do Magento /app/design/frontend/base/default/template/catalog/product/price.phtml
é um caso doloroso. Este código HTML de "apresentação" exibe um preço. Tem 471 linhas! Principalmente por causa da lógica do PHP.
Para tornar seu .phtml
esbelto e limpo:
Para evitar seqüências desnecessárias <?php … ?>
, junte-as em pedaços com um único<?php … ?>
insira o máximo de PHP possível no bloco, em vez de no arquivo .phtml
Para ajudar com o exposto acima, no bloco use assign(‘myvar’,
[expression])
para criar $ variáveis que podem ser consultadas sem
$this->...
no .phtml, para que você possa ser realmente conciso<?php echo $myvar; ?>
deseja que o Magento adote o Twig no futuro para um visual ainda mais limpo
Vamos aplicar o acima em um trecho do código original do exemplo dado acima: /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) ?>
Primeiro passo: remova a repetição de <?php … ?>
para chegar a algo assim:
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)
?>
O texto acima coloca todo o PHP em um único blob de código.
2 + 3. Evoluindo para algo melhor ainda, mova esse código para seu bloco:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
Observe o uso do _prepareLayout()
e as assign()
funções para isso.
Agora essa seção complicada do arquivo .phtml pode ser reduzida a apenas esta linha simples:
<?php echo $minPrice; ?>
Eu acho que todos nós podemos viver com isso!