livestreet / livestreet-framework

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

nav hook #215

Closed Xmk closed 7 years ago

Xmk commented 7 years ago

Столкнулся с таким багом

Есть хук {hook run="nav_{$hook}" assign='hookItems' params=$hookParams items=$items array=true}

Добавляем новые элементы так: array_merge($aParams['items'], $aResult); как в плагине page например

На примере главного меню. Есть меню: Блоги, Пользователи

добавляет элемент плагин_#1 - Страницы На выходе получается Блоги, Пользователи, Страницы

добавляет элемент плагин_#2 - Рисунки На выходе получается Блоги, Пользователи, Страницы, Блоги, Пользователи, Рисунки

добавляет элемент плагин_#3 - Звуки На выходе получается: Блоги, Пользователи, Страницы, Блоги, Пользователи, Рисунки, Блоги, Пользователи, Звуки

каждый плагин у нас возвращает мерж исходного меню + свои пункты. А потом smarty_function_hook мержит их вместе

Xmk commented 7 years ago

вот скрин (меню правда другое, но суть та же) https://yadi.sk/i/oi4CASMp3FJEcr

Xmk commented 7 years ago

пока временно решил так:

в компоненте nav переписал эту строку вот так: {$items = ( $hookItems ) ? array_merge($items, $hookItems) : $items}

в хуках все: return array_merge($aParams['items'], $aResult); заменил на return $aResult;

mzhelskiy commented 7 years ago

fix https://github.com/livestreet/livestreet-framework/commit/0260afec402ccf322562ac774b57e3b59f00912c

в плагинах теперь надо так - https://github.com/livestreet/lsplugin-page/commit/f8560ea85ad38b3c03ce28fa5d5b4f263a359127

Xmk commented 7 years ago

круто! правда хочется без лишних движений - то бишь мержей в функциях. просто отдал массив элементов и не паришься.

mzhelskiy commented 7 years ago

Можно делать и без передачи входного по ссылке, но тогда нельзя будет изменить меню, можно будет только добавить новый элемент в конец/начало

Xmk commented 7 years ago

При добавлении новых элементов единожды дублируется исходный элемент меню (у меня он один, так что может и всё меню). сейчас проверю на чистой лс, отпишусь

Xmk commented 7 years ago

но тогда нельзя будет изменить меню

По хорошему бы менеджер завести менюшек, и управлять ими в админке.

При добавлении новых элементов единожды дублируется исходный элемент меню (у меня он один, так что может и всё меню).

отбой, это я свой костыльный мерж в nav убрать забыл

Xmk commented 7 years ago

а как ты смотришь на добавление обработчика хуков по регулярке? например: $this->AddHookPreg('/^template_nav_(.+)$/i', 'NavPreg');

Так я смогу перехватывать все менюшки, что есть на сайте и выводить в визуальном виде для редактирования + соответственно подменять их. Без регулярки не так интересно - можно сделать редактирование только заранее прописанных мной менюшек.

mzhelskiy commented 7 years ago

можешь запилить пул-реквест