Дійсно, чим менше PHP у вашому, .phtml
тим краще, тому що:
- суміш PHP і HTML набагато важче розшифрувати, ніж кожен з них окремо, особливо для тих, хто комфортний лише для одного з них (наприклад, дизайнери передньої частини)
- є логічним сенсом розміщувати взаємодію з кодом сервера в Блоку, подалі від того, що має бути представлено у браузері - це стара мантра «розділення проблем».
Основний файл Magento /app/design/frontend/base/default/template/catalog/product/price.phtml
- це болючий випадок. Цей HTML-код «презентації» відображає ціну. Це 471 рядок! Переважно через логіку PHP.
Щоб зробити вашу .phtml
худішу та чистішу:
уникайте непотрібних послідовностей <?php … ?>
, з’єднайте їх разом у шматки<?php … ?>
натисніть стільки PHP, скільки зможете в Блок, а не .phtml
щоб допомогти у вищезазначеному, у Блоку скористайтеся assign(‘myvar’,
[expression])
для створення $ змінних, на які можна посилатися без
$this->...
.phtml, щоб ви могли мати справді короткий<?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; ?>
Я думаю, що ми можемо з цим все жити!