De hecho, cuanto menos PHP tenga .phtml
, mejor, porque:
- La combinación de PHP y HTML es mucho más difícil de descifrar que cada uno de ellos individualmente, especialmente para aquellos que se sienten cómodos con solo uno de ellos (por ejemplo, diseñadores de front-end)
- tiene sentido lógico colocar la interacción con el código del servidor en el Bloque, lejos de lo que se presentará en el navegador: este es el viejo mantra de "separación de preocupaciones".
El archivo principal de Magento /app/design/frontend/base/default/template/catalog/product/price.phtml
es un caso doloroso en este punto. Este código de "presentación" HTML muestra un precio. ¡Tiene 471 líneas de largo! Principalmente por la lógica PHP.
Para hacer tu .phtml
más delgado y más limpio:
evitar secuencias innecesarias de <?php … ?>
, agruparlos en trozos con un solo<?php … ?>
inserte tanto PHP como pueda en el Bloque, en lugar del .phtml
para ayudar con lo anterior, en el Bloque utilice assign(‘myvar’,
[expression])
para crear $ variables a las que se pueda hacer referencia sin
$this->...
en el .phtml, para que pueda ser realmente conciso<?php echo $myvar; ?>
desea que Magento adopte Twig en el futuro para una apariencia aún más limpia
Apliquemos lo anterior en un fragmento del código original del ejemplo dado anteriormente: /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) ?>
Primer paso: eliminar la repetición de <?php … ?>
llegar a algo como esto:
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)
?>
Lo anterior pone todo PHP en un solo blob de código.
2 + 3. Evolucionando en algo mejor aún, mueve este código a su bloque:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
Tenga en cuenta el uso de _prepareLayout()
y las assign()
funciones para esto.
Ahora esa sección enrevesada del .phtml se puede reducir a esta simple línea:
<?php echo $minPrice; ?>
¡Creo que todos podemos vivir con eso!