Разница между getChildHtml () и getChildChildHtml () в Magento - PullRequest
17 голосов
/ 18 января 2012

Я хочу знать различия между этими двумя функциями. Я понимаю поведение getChildHtml (). Он возвращает html блока или всех блоков, если вы не передали никаких параметров. И я вижу

getChildHtml($name, $useCache, $sorted)
getChildChildHtml($name, $childName,$useCache, $sorted)

с первого взгляда я предложил использовать параметр $ useCache для использования кэша.

1 Ответ

43 голосов
/ 19 января 2012

Допустим, вы находитесь в файле шаблона phtml корневого блока, и у вас есть упрощенная структура блоков, которая выглядит следующим образом

root
    left
        promo_top
        navigation
        promo_bottom
    center
    right

Из файла шаблона корневого блока, чтобы распечатать левый блок, вы использовали бы getChildHtml.

echo $this->getChildHtml('left');

Однако, если по какой-то причине вы хотите напечатать блок promo_top в корневом шаблоне , вам придется сделать что-то подобное

$left = $this->getChildBlock('left')
echo $left->getChildHtml('promo_top')

Метод getChildChildHtml позволяет вам делать подобные вещи одним простым вызовом метода. Опять из корневого шаблона

echo $this->getChildChildHtml('left','promo_top');

Итак, семантика

  1. Получить блок «Мой ребенок» с именем X
  2. Затем получите это дочерний блок с Y
  3. Визуализация HTML

Если вы посмотрите на исходный код, то увидите, что, в конечном счете, этот метод просто оборачивает вызов getChildHtml

#File: app/code/core/Mage/Core/Block/Abstract.php
public function getChildChildHtml($name, $childName = '', $useCache = true, $sorted = false)
{
    if (empty($name)) {
        return '';
    }
    $child = $this->getChild($name);
    if (!$child) {
        return '';
    }
    return $child->getChildHtml($childName, $useCache, $sorted);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...