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

Реферальная программа Мегаплана

Партнерская программа Kredov

Вывод меню 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


#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

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

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


#3 Banderas

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

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

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

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


#4 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 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
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.



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