Пункт в меню {groups:my}

InstantCMS 2.X
#1 6 апреля 2019 в 01:29
Есть специальная ссылка {groups:my} | Мои группы (клубы).
1 — Данный пункт есть в "Персональное меню"
2 — Он выводит список групп на которые я подписан.
3 — Выводит это в стиле выпадающего меню.

В Группах в datasets-panel ссылка /groups/index/my | Мои группы — это группы которые я создал.

В чем собственная тема, если я подписан на 100 групп то выпадающий список в "Персональное меню" превратится в портянку (но это не точно).
А вот собственно и сам вопрос, это не ошибка и специальная ссылка {groups:my} и должна выводить список групп на которые я подписан? Или же всё таки список групп которые я создал?

и еще если я не создал группу может мне и не надо показывать в datasets-panel ссылку на /grups/index/my | Мои группы?
#2 6 апреля 2019 в 11:11

должна выводить список групп на которые я подписан

Killer's dream
Судя по коду метода getUserGroups github.com/instantsoft/icms2/blob/2782bcf3bb2bab14d3055bf6c8f306cf55dcd51a/system/controllers/groups/model.php#L292 выводятся все группы, в которых состоит пользователь.
Вы можете:
1.
создать свой шаблон меню по аналогии с templates\default\assets\ui\menu.tpl.php и ограничить там вывод количества групп, затем указать этот шаблон меню в виджете аватар templates\default\controllers\users\widgets\avatar\avatar.tpl.php
2.
воспользоваться возможностями css и js, скрыв группы больше нужного количества
#3 7 апреля 2019 в 01:56
Zau4man, Спасибо за совет! Но буду думать как сделать пункт в меню "мои группы (те которые создал) " так было бы логичней на мой взгляд. Zau4man, нет случайно на этот счёт у вас совета? )))
#4 7 апреля 2019 в 10:31
Killer's dream, откройте файл system\controllers\groups\hooks\menu_groups.php и после

  1.  
  2. if ($action == 'my'){
  3.  
  4. $groups = $this->model->getUserGroups($this->cms_user->id);
  5. if (!$groups) { return false; }
  6.  
  7. foreach($groups as $id => $group){
  8.  
  9. $result['items'][] = array(
  10. 'id' => 'group' . $id,
  11. 'parent_id' => $menu_item_id,
  12. 'title' => $group['title'],
  13. 'childs_count' => 0,
  14. 'url' => href_to($this->name, $group['slug'])
  15. );
  16.  
  17. }
  18.  
  19. }
  20.  
вставить код
  1.  
  2. if ($action == 'own'){
  3.  
  4. $groups = $this->model->filterEqual('owner_id',$this->cms_user->id)->get('groups');
  5. if (!$groups) { return false; }
  6.  
  7. foreach($groups as $id => $group){
  8.  
  9. $result['items'][] = array(
  10. 'id' => 'group' . $id,
  11. 'parent_id' => $menu_item_id,
  12. 'title' => $group['title'],
  13. 'childs_count' => 0,
  14. 'url' => href_to($this->name, $group['slug'])
  15. );
  16.  
  17. }
  18.  
  19. }
  20.  
и использовать в меню {groups:own} вместо {groups:my}

Не люблю править системные файлы, поэтому рекомендую сделать отдельным хуком.
По аналогии.
Создать пустой компонент. В нем файл манифест со строкой menu_groups
папку hooks
и в ней такой же файл menu_groups
заменяя по аналогии имя компонента на свое и т.п.
Обновить события

Управитесь быстро.
#5 7 апреля 2019 в 14:06
Zau4man, Спасибо за развёрнутый ответ!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.