livestreet / livestreet-framework

Фреймворк LiveStreet
23 stars 17 forks source link

Проблемма с перезаписью блоков в конфиге #222

Closed kovaroman closed 7 years ago

kovaroman commented 7 years ago

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

убираем вывод блока 'blogs' в сайдбаре
$config['block']['rule_index_blog'] = array(
    'action' => array(
        'index',
        'blog' => array('{topics}', '{blog}')
    ),
    'blocks' => array(
        'right' => array(
            'activityRecent' => array('priority' => 100),
            'topicsTags'   => array('priority' => 50),
//            'blogs'  => array('params' => array(), 'priority' => 1)
        )
    ),
    'clear'  => false,
);

как быть с ассоциативными масивами в локальных конфигах? может доделать func_array_merge_assoc чтобы к нужным разделам конфига она перезаписывала целие разделы с ассоциативными масивами?

mzhelskiy commented 7 years ago

Менять нужно именно в локальном или админке

kovaroman commented 7 years ago

Так массивы сливаются и если в локальном 2 элемента, а в основном 3, тогда только эти 2 элемента апдейтятся... приходится комментировать в основном конфиге блоки

mzhelskiy commented 7 years ago

нужно привести пример конкретных значений, которые переопределяются

kovaroman commented 7 years ago

Выше есть пример со стандартного девелопер шаблона, справа на главной выводятся три блока, хочу убрать Блоги, копирую с основного конфига application/config/config.php в config.local.php код блока, в нем комментирую строку с Блогами, в итоге у меня все равно есть Блоги на главной. Причина в сливании конфигов, у вас конфиги заменяют значения в массивах, только если в них числоввые ключи, а если ассоциативные, тогда за основу берутся значения из основного массива, а в нем апдейтятся значения из локального... Т.е. проблемма у всех значениях конфигов с конечными ассоциативными ключами! Значения основного Конфига можно только изменить, но не убрать.

mzhelskiy commented 7 years ago

Сейчас можно вот так прописать в локальном конфиге:

Config::Set('block.rule_index_blog.blocks.right',array(
    'activityRecent' => array('priority' => 100),
    'topicsTags'   => array('priority' => 50),
));

Такой подход не очень рекомендуется, но задачу свою решает. А после этого фикса https://github.com/livestreet/livestreet-framework/commit/480e1643ef686657616bb92792656c9e34d51c48 можно вот так:

$config['block']['rule_index_blog']['blocks']['right']=array(
    'blogs'  => false
);