Переопределение конфигурации плагина

Всем привет.
Возник вопрос касательно плагинов и их конфигурации.
Создал плагин. В конфигурации указал
Config::Set('block.rule_subscription', array(
    'action' => array( 'newspaper', 'index', 'topics' ),
    'blocks'  => array(
        'bottom' => array(
            'subscriptionView' => array('params'=>array('plugin'=>'subscription'),'priority'=>700),
        ),
    ),
    'clear' => false,
));
Config::Set('block.rule_subscription_social', array(
    'action' => array( 'newspaper', 'index', 'topics' ),
    'blocks'  => array(
        'bottom' => array(
            'subscriptionViewSocial' => array('params'=>array('plugin'=>'subscription'),'priority'=>700),
        ),
    ),
    'clear' => false,
));


Вывод двух блоков в одном месте.
Но мне нужно выводить эти блоки по очереди. Один раз обновили страницу — один блок. Второй раз обновили другой блок или опять первый.

Я так понял, что в хуке мне необходимо переопределить конфигурацию.

$this->AddHook('template_body_end', 'Subscription');
            $config = Config::Get('block.rule_subscription');
            foreach($config as $sName=>&$aRule){
                if(isset($aRule['blocks']['bottom'])){
                    unset($aRule['blocks']['bottom']);
                }
            }
            Config::Set('block.rule_subscription', $config);


И вот тут я попал в тупик.
Во-первых я не представляю, как обратиться к конфигурации плагина.
Погуглив и прошерстив все блоки я пришёл к выводу, что есть два варианта —
$config = Config::Get('block.rule_subscription');

и
$config = Config::Get('plugin.subscription');

Это первый вопрос.
Следующий вопрос — когда я получу конфигурацию файла — могу ли я сделать вот такую проверку, которая у меня сейчас
if(isset($aRule['blocks']['bottom'])){
                    unset($aRule['blocks']['bottom']);
                }

И исключить эту настройку из конфигурации?
Заранее спасибо за помощь.

7 комментариев

avatar
Но мне нужно выводить эти блоки по очереди. Один раз обновили страницу — один блок. Второй раз обновили другой блок или опять первый.
Вам нужно выводить содержимое блоков по-очереди, а не блоки туда-сюда включать.

Можете в сессии хранить номер текущего блока и переключать содержимое в зависимости от этого в самом
Exec()
блока.
avatar
Вам нужно выводить содержимое блоков по-очереди, а не блоки туда-сюда включать.
Спасибо большое за идею. Буду реализовывать через сессию, но всё же хотелось и на эти вопросы получить ответы для опыта.
avatar
Если настройки блогов одинаковые, то можно прямо в конфиге вот так:
$name = rand(1,2)==1 ? 'subscriptionView' : 'subscriptionViewSocial';

Config::Set('block.rule_subscription', array(
    'action' => array( 'newspaper', 'index', 'topics' ),
    'blocks'  => array(
        'bottom' => array(
            $name => array('params'=>array('plugin'=>'subscription'),'priority'=>700),
        ),
    ),
    'clear' => false,
));

Будет менять блоки в случайном порядке.
  • ort
  • +2
avatar
Спасибо большое. Не думал, что конфиг можно так менять. Тогда и переопределять в хуке нечего
avatar
но это не:
Но мне нужно выводить эти блоки по очереди.
avatar
увидел суть вопроса не в алгоритме выбора блока, а в методе «переопределения» конфига
avatar
имхо, чем
Config::Set

логичнее и красивее
$config['$root$']['block']['rule_subscription'] = array(
    'action' => array( 'newspaper', 'index', 'topics' ),
    'blocks'  => array(
        'bottom' => array(
            $name => array('params'=>array('plugin'=>'subscription'),'priority'=>700),
        ),
    ),
    'clear' => false,
);

меньше рекурсивных вызовов и конфиги выглядят больше конфигами, а не частью кода (хоть таковой и являются), конечно бывают ситуации когда без кода в конфигах некуда, но лучше этим не баловаться.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.