Переопределение конфигов(виджетов) из common

Всем привет!

Вопрос наверное нубский, но я ничего поиском не нашел...

Пытаюсь разделить все по максимуму, чтобы common & engine были не затронутыми приложением... Делаю конфиги в app или в своей теме. Но как обнулить или переопределить именно то что было сделано в common/config/widgets? Конкретно, я хочу все виджеты переместить в левый сайдбар. И как это сделать в конфиге приложения или темы? Там же индекса у массива нету... Можно добавить элемент с таким же 'name' — для обнуления это годится, но для того чтобы поменять один параметр — никак...

Хотелось бы иметь возможность в локальных конфигах обращаться к тому что уже «наконфигурировано» и свободно это менять. Подозреваю что такое таки возможно, просто я не в теме. Ну и вообще, если есть какое чтиво по теме(как конфиги собираются, кто кого и как переопределяет и тд) — буду благодарен. Ссылка на файл:строку(гитхаб) с соответсвующим кодом — ну это очень спасибо :)

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

0
Я просто копирую весь файл в /app/*/*
Открывал топик недавно altocms.ru/934.html
Отредактирован:
+1
Скорее всего вы правильно делаете, но не до конца
1. Переопределяем виджет в конфиге приложения. Например, если я хочу перенести влево виджет прямого эфира, то в конфиг приложения app/config/widgets.php копирую определения виджета из основного конфига (заметьте, я поменял только 'wgroup' => 'left')
$config['widgets'][] = array(
    'name' => 'stream',     // исполняемый виджет Stream
    'wgroup' => 'left',    // группа, куда нужно добавить виджет
    'priority' => 100,      // приоритет
    'action' => array(
        'index',
        'community',
        'filter',
        'blogs',
        'blog' => array('{topics}', '{topic}', '{blog}'),
        'tag',
    ),
    'params' => array(
        'items' => array(
            'comments' => array('text' => 'widget_stream_comments', 'type'=>'comment'),
            'topics' => array('text' => 'widget_stream_topics', 'type'=>'topic'),
        ),
    ),
);


2. Но в шаблоне старт-кит у меня нет левой колонки, добавив в шаблон common/templates/skin/start-kit/tpls/_index.tpl строки
{block name="layout_vars"}
    {$sidebarPosition='left'}
{/block}


3. Но это поможет не во всех случаях, поскольку в шаблонах экшенов также могут быть переменные, которые наш левый зайдбар затрут, потому в шаблонах экшенах нужно проверить есть ли еще переменные и если есть, то корректно их переслать в _index.tpl так, например, для шаблона экшена главной страницы common/templates/skin/start-kit/tpls/actions/index/action.index.index.tpl добавить в блок шаблонов флаг append что бы получилось так:
...
{block name="layout_vars" append}
    {$menu="topics"}
{/block}
...


4. Ну и в конце проверить какая группа шаблонов всё таки выводится в сайдбаре. В шаблоне common/templates/skin/start-kit/tpls/commons/common.sidebar.tpl видим, что выводится правая группа
{wgroup group='right'}

а в настройках виджета — левая, соответственно поменяем на
{wgroup group='left'}


Это был длинный способ, а короче можно просто в шаблоне common/templates/skin/start-kit/themes/default/layouts/default.tpl поменять местами колонки )
0
Спасибо за оперативные ответы!

Но как то не очень красиво — копировать объявление всего виджета. Вот бы, скажем, указать лишь name(или что там ключем служит) и wgroup, а остальное пусть остается как в common прописано… А то избыточность получается, как по тексту кода, так и, скорее всего, по выполнению.
И если что то изменится в релизе альты на эту тему, тогда придется заново копиравать изменившийся код с релиза и опять менять там right=>left и тд и тп…

Я нашел Config:Get и тд, но это немного не в кассу: Config::Get('widgets') возвращает массив с циферками в качестве ключей… то есть получить конфиг виджета по его имени с помощью Config::*** я не понял как… Догадываюсь, что есть хелперы именно про виджеты, но еще не докопал.

По остальному — очень интересно, хотя и не все понятно :) Спасибо!

Я использую experience и там тоже подобное в layout'е. И тут меня путает как раз $sidebarPosition… Я не догоняю — это вариант для одно-сайдбарного вида, где лишь меняется его позиция, но он один? И это определяется как раз значением $sidebarPosition. Но тогда нафига left/right в конфигах виджетов?
Или же это для двух-сайдбарных видов(где может быть левый, правый по отдельности и вместе, уже в зависимости от значений wgroup виджетов). В таком случае, как в один момент времени значение могет быть == 'left и != 'left'? :) Или как то за два прохода? :) Ну короче я тут плыву…
Отредактирован:
+2
Но как то не очень красиво — копировать объявление всего виджета. Вот бы, скажем, указать лишь name...
Такой функционал реализован в версии 1.1. Кроме того, положение виджетов вы можете менять и в админке «Сайт > Виджеты», а не в файле конфига.

На счет left/right. Тут всё просто: в любом месте шаблона вы можете указать
{wgroup group='very_very_right_position'}

а в конфиге виджета
'wgroup' => 'very_very_right_position', 

он там и выведется. То есть left/right — это просто места в шаблоне. Если вам удобно — назовите мето размещения виджетов column и используйте его )

В таком случае, как в один момент времени значение могет быть == 'left и != 'left'? :)
Не может — тема одноколоночная — либо слева, либо справа. Может быть тема трёхколоночная вообще без переменной sidebarPosition — это особенности конкретного шаблона.
0
«Сайт > Виджеты»

Только хотел сказать — туда же и виджеты лпгинов попадают, и там же можно их настраивать, верно?
0
Да, конечно, все виджеты туда попадают.
0
положение виджетов вы можете менять и в админке «Сайт > Виджеты», а не в файле конфига.
чет у меня не сработало :( попробовал пару раз написать left — оно тут же после сабмита формы в списке виджетов все равно все в right. В базе с ходу не нашел таблицы «про виджеты», разбираться не стал — полез в конфигах копаться. Нада будет еще пробить в админке эту фичу.

тема одноколоночная — либо слева, либо справа. Может быть тема трёхколоночная вообще без переменной sidebarPosition — это особенности конкретного шаблона.
ага! и поэтому приходится и $sidebarPosition задавать, и в шаблонах зон прописывать left, и в самих виджетах задавать «положение» как left… верно?
В этом смысле, для большей унификации наверное лучше отталкиваться от именования зон в конфигах виджетов по типу: main-sidebar, second-sidebar и тд...? А геометрическое позиционирование самих зон будет задаваться уже в шаблоне и/или его конфигах/настройках. При таком подходе имена зон не несут в себе информации о позиции геометрической, но задают (смысловую?) группу/зону… и тогда смена лево-право-верх-вних-итд уже действительно делается в одном месте(в шаблоне или его конфиге), а перемещение виджетов из зоны в зоны — путем смены wgroup… верно мыслю? :)
Отредактирован:
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.