Как модулю скрыть (или показать) свой экранный блок в зависимости от неких условий?

блок
модуль
(Дмитрий Федюк) #1

В Magento 2 доступны те же способы условного показа блоков, что и в Magento 1.x.

В простом случае, если видимость экранного блока задаётся значением административной настроечной опции, то Вы можете использовать стандартное и унаследованное из Magento 1.x выражение ifconfig:

<referenceContainer name='form.buttons'>
	<block
		class='Dfe\Google\Block\Backend\Template'
		name='Dfe_Google_Backend_Buttons'
		template='buttons.phtml'
		after='adminhtml_auth_login_buttons'
		ifconfig='dfe_google/login/enable'
	/>
</referenceContainer>

Если же логика показа / скрытия экранного блока более сложна, то Вы можете перекрыть метод \Magento\Framework\View\Element\AbstractBlock::toHtml().
Если Вы вернёте пустую строку в качестве результата этого метода, то Ваш блок, не будет виден:

<?php
namespace Dfe\Facebook\Block;
class Login extends \Magento\Framework\View\Element\Html\Link {
	/**
	 * @override
	 * @see \Magento\Framework\View\Element\Html\Link::toHtml()
	 * @return string
	 */
	public function toHtml() {return !rm_customer_logged_in() ? parent::toHtml() : '';}
}

Этот пример использует функцию rm_customer_logged_in, которая определяет, авторизован ли текущий посетитель витрины или анонимен.

0 Likes