답변:
실제로 PHP가 적을 .phtml
수록 좋습니다.
Magento 코어 파일 /app/design/frontend/base/default/template/catalog/product/price.phtml
은 어려운 사례입니다. 이 HTML“프레젠테이션”코드는 가격을 표시합니다. 471 줄입니다! 주로 PHP 논리 때문입니다.
당신을 만들기 위해 .phtml
더 깔끔하고 깨끗하게 :
불필요한 순서를 피하십시오 <?php … ?>
단일 청크로 묶습니다.<?php … ?>
.phtml 대신 블록에 PHP를 최대한 많이 넣으십시오.
위의 내용을 돕기 위해 블록 에서 .phtml에서 assign(‘myvar’,
[expression])
참조 할 수없는 $ 변수를 만드는
데 사용 $this->...
하므로 실제로 간결 할 수 있습니다<?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; ?>
우리 모두가 그걸로 살 수 있다고 생각합니다!
멋진 글씨, @fris, 나는 거의 모든 점에 동의합니다.
주요 논리는 모든 로직을 블록 클래스로 옮기고 템플릿을 가능한 한 "멍청한"것으로 만드는 것입니다.
IDE 코드 완성 및 탐색 기능을 잃고 싶지 않기 때문에 실제로 "할당 된"변수보다 템플릿에서 메소드 호출을 선호합니다. "할당"은 템플릿에서 더 간결 해 보이지만 내 취향에 비해 너무 많은 마술이므로 마술 게터와 세터보다 더 나쁩니다.