Перейти к содержимому



Вывод меню joomla своими силами

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 28 Апрель 2013 - 07:49

Здравствуйте уважаемые коллеги.
Недавно было у меня задание, как я думал - достаточно простое:

Установить джуумлу, форум IPB и в хедер форума вставить дубль меню джумлы.

Проанализировал связи я сделал просто 2 запроса, с такой логикой

Взять все категории
Вывести категорию
Если есть подкатегории:
взять соответсвенные подкатегории
вывести подкатегории

Конечно, в итоге у меня было запросов ровно Количество категорий+1, а это уже плохо!
Но суть не в этом... Суть в том что у меня начались проблемы с несоответствием подкатегорий к категориям и битыми ссылками.
На форуме джуумлы меня отправили на гит, там я нашёл репозиторий с исходником меню джумлы.
Конвертировал JQL в обычную строку:
SELECT m.id, m.menutype, m.title, m.alias, m.note, m.path AS route, m.link, m.type, m.level, m.language, m.browserNav, m.access, m.params, m.home, m.img, m.template_style_id, m.component_id, m.parent_id, e.element as component FROM tr_menu AS m LEFT JOIN tr_extensions AS e ON m.component_id = e.extension_id
WHERE m.published = 1 AND m.parent_id > 0 AND m.client_id = 0 ORDER BY m.lft

Но по какому алгоритму теперь стрктурировать массив - я не знаю. Как мне найти какие категории к каким подкатегориям относятся? Как мне собрать готовый структурированный массив?
С уважением, Bodyanuk :)

 

 

  • 0

I'm web-developer 

Magento one love!



robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Joomla вывод статей без категорий
  2. Cоздание блога на Joomla!
  3. Как самостоятельно создать шаблон joomla. Создание темы для джумлы своими руками
  4. Создание сайта на Joomla
  5. Изменить пункт меню в Joomla

#2 fedornabilkin

fedornabilkin
  • Модератор
  • 1 111 сообщений
  • Репутация: 180

Отправлено 28 Апрель 2013 - 10:00

Это все конечно очень индивидуально вкаждом случае, но если есть категории и подкатегории, то вероятно необходимо будет использовать рекурсию.
  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 30 Апрель 2013 - 14:55

А поточнее можно?
Сделал скрин результата запроса
Изображение

И то, что должно получиться
Изображение
  • 0

I'm web-developer 

Magento one love!



#4 fedornabilkin

fedornabilkin
  • Модератор
  • 1 111 сообщений
  • Репутация: 180

Отправлено 30 Апрель 2013 - 15:57

Сейчас попробую объяснить.
Насколько я понял, все категории находятся в одной таблице, а подкатегории формируются наличием родительской категории.
Для рекурсивного вывода категорий с дочерними подкатегориями необходимо создать массив типа
$cats[$row['parent_id']][] = $row;
где $row - это строка(ассоциативный массив) из приведенного скрина.
Дальше пишем функцию типа такой
// разбираем массив если есть родитель категории, то формируем листинг
function tree_cats ($cats, $parent ){
  if(is_array($cats) and  isset($cats[$parent])){
   $tree = '<ul>';
  
   foreach( $cats[$parent] as $cat ){
	$tree .= "<li><a href=".$cat['link']."/'>".$cat['title']."</a>";
	$tree .=  tree_cats ( $cats, $cat['parent_id'] ); // рекурсия
	$tree .= '</li>';		
   }
   $tree .= '</ul>';
  
  }
  else return null;		
  return $tree;	  
}

И в необходимом месте вызываем функцию. Передаем в нее сформированный массив и ноль вторым параметром
Вроде как-то так должно работать
  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.




Оформление форума – IPBSkins.ru