Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 15.03.2024)
428420
осіб
347
літаків
325
гелікоптерів
6758
танків
12949
ББМ
10580
артилерія
717
ППО
1017
РСЗВ
13993
машин
26
кораблі і катери
Основи використання Блоків при розробці на Magento 2
Опубліковано

Основи використання Блоків при розробці на Magento 2

Сьогоднішня стаття присвячена дуже важливому аспекті при розробці на Magento 2 – основам використання Блоків. Будуть розглянуті наступні моменти: основи блокової архітектури та її використання, етапи життєвого циклу Блоку, відображення і кешування Блоків.

 

 

Основи блокової архітектури; її використання при розробці

Яка типова роль Блоку?

Поділ на блок-шаблон дозволяє відокремити бізнес-логіку від дизайну. Блоки зазвичай (але не завжди) пов’язані з файлами шаблонів .phtml. Блоки можна розглядати як контейнер даних для шаблону, в якому представлений HTML-код. За допомогою XML макетів можна керувати блоками на сторінці, наприклад, додавати нові, задавати шаблони для них, переміщати і видаляти.

 

 

Які об’єкти доступні з Блоку?

Всі Блоки розширюють клас \Magento\Framework\View\Element\Template, тому за замовчуванням блоки додаються з об’єктом \Magento\Framework\View\Element\Template\Context і підтримують гетери і сетери для повернення і зберігання будь-яких об’єктів або даних. Цей об’єкт містить ряд інших об’єктів, які завантажуються в екземпляр:

$this->validator: \Magento\Framework\View\Element\Template\File\Validator
$this->resolver: \Magento\Framework\View\Element\Template\File\Resolver
$this->_filesystem: \Magento\Framework\Filesystem
$this->templateEnginePool: \Magento\Framework\View\TemplateEnginePool
$this->_storeManager: \Magento\Store\Model\StoreManagerInterface
$this->_appState: \Magento\Framework\App\State
$this->pageConfig: \Magento\Framework\View\Page\Config

 

 

Етапи життєвого циклу Блоку

Існують дві фази життєвого циклу блоку: генерація блоків і рендеринг блоків. Блоки створюються в момент створення макету. Вони не виконуються в цей момент, а тільки створюються. Також на цьому етапі будується структура, задаються дочірні блоки, і для кожного блоку викликається метод prepareLayout().

 

Візуалізація відбувається на більш пізньому етапі рендерингу.

 

Фаза генерації:

Magento\Framework\View\Page\Config::publicBuild()
Magento\Framework\View\Page\Config::build()
Magento\Framework\View\Layout\Builder::build()
Magento\Framework\View\Layout\Builder::generateLayoutBlocks()
Magento\Framework\View\Layout::generateElements()
Magento\Framework\View\Layout\GeneratorPool::process()

 

GeneratePool проходить через всі генератори і генерує всі заплановані елементи. Він має генератори з наступними елементами:

Magento\Framework\View\Page\Config\Generator\Head
Magento\Framework\View\Page\Config\Generator\Body
Magento\Framework\View\Layout\Generator\Block
Magento\Framework\View\Layout\Generator\Container
Magento\Framework\View\Layout\Generator\UiComponent

 

 

Фаза рендерингу:

Magento\Framework\View\Result\Page::render()
Magento\Framework\View\Layout::getOutput()

 

 

На цьому етапі у нас вже є весь xml-макет для згенерованої сторінки, і всі класи блоків створені.

Magento\Framework\View\Layout::renderElement()
Magento\Framework\View\Layout::renderNonCachedElement()

 

У цьому методі перевіряється тип відображуваних елементів. Він створює їх і повертає html, використовуючи метод toHtml(). Цей метод не рекомендується перевизначати. Якщо ви хочете змінити блок рендеринга, перевизначайте метод _toHtml().

 

 

Основні моменти використання методів _prepareLayout(), _beforeToHtml() і _toHtml()

_prepareLayout() – найчастіше використовується для:

  • додавання нащадків
  • додавання вкладок (табів) в бекенді
  • призначення заголовку
  • додавання посторінкової навігації, хлібних крихт і т.д.
  • установки рендеру для елементів

 

 

_beforeToHtml()

  • підготовка даних
  • присвоєння значень
  • додавання нащадків

 

 

_toHtml()

Використовуючи цей метод, ви можете керувати рендерингом Блоку, доповнювати умови, створювати обгортки для html, змінювати шаблон для блоку і т.д.

 

 

Генерування Блоків та їх кешування

Найважливіший метод для рендеринга блоку – це Magento\Framework\View\Element\AbstractBlock::toHtml(). Спочатку він запускає _loadCache(), якщо кеш відсутній, він запускає _beforeToHtml() після того, як блок візуалізується методом _toHtml(), після чого зберігається кеш _saveCache($html), і запускає _afterToHtml($html).

Метод _loadCache() використовує повернення cache_key від getCacheKey() і _saveCache($html)cache_tags, отримані методом getCacheTags(). Значення cache_key кожного блоку складається як BLOCK_$cache_key, а якщо цю властивість не визначено – BLOCK_sha1($name_in_layout). Значення cache_tags є масивом і складається з властивості $cache_tags, якщо вона визначена в блоці і якщо в масив додані значення примірника Magento\Framework\DataObject\IdentityInterface, які повертаються методом getIdentities(). Ми можемо керувати змінною $cache_lifetime. Значення встановлюється в секундах, якщо ви хочете відключити кеш, тоді ви можете встановити значення 0 або не встановлювати значення, тому що всі блоки не кешуються за замовчуванням.

 

 

Для чого використовуються різні типи блоків?

  • Magento\Framework\View\Element\AbstractBlock – батьківський блок для всіх користувацьких блоків;
  • Magento\Framework\View\Element\Template – блок з заданим шаблоном (.phtml);
  • Magento\Framework\View\Element\Text – простий рендеринг тексту;
  • Magento\Framework\View\Element\FormKey – повертає прихований input з ключем форми;
  • Magento\Framework\View\Element\Messages – відображення повідомлень різних типів.

 

 

На сьогодні це все по темі використання Блоків в Magento 2. В подальших статтях ми будемо більш детально розбирати дану тему.

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *