Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Группировка подкатегорий к с категориями

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dropoff
Отправлено: 26 Апреля, 2011 - 16:12:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Привет всем.

Есть такой запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, url, title, text, STATUS, img, sort, parent_id FROM category WHERE STATUS = 1

id - основной id категории
parent_id - записывается id категории для связи. типа подкатегории.

в результате имеем
категория 1
категория 2
категория 3
категория 4
категория 5
категория 6
категория 7

но категории 4, 5, 6 в parent_id имеют id категории 2.
т.е. являются ее подкатегориями.
Вот как можно в цикле категории 4, 5, 6 выводить ПОД категорией 2?

т.е. вот так
категория 1
категория 2
--категория 4
--категория 5
--категория 6
категория 3
категория 7

У меня вывод идет через smarty. может в нем можно как-то? Хотя лучше в php это предопределять.

Помогите пожалуйста.
 
 Top
DlTA
Отправлено: 27 Апреля, 2011 - 00:02:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а просто запросить сначала список категорий у которых нет родителя,
вопхнуть в массив, а потом для каждой категории запрашивать список подкатегорий проблемно??!
 
 Top
Саныч
Отправлено: 27 Апреля, 2011 - 08:08:18
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




вывод всех категорий и подкатегорий... вобщем выводим все...
PHP:
скопировать код в буфер обмена
  1. function c($id = 0,$level = 0)
  2. {
  3.    $sql = mysql_query('SELECT id,title FROM category WHERE id='.$id);
  4.    if(mysql_num_rows($sql) < 1) return;
  5.    while($res = mysql_fetch_assoc($sql))
  6.    {
  7.       for($n = 0; $n < $level; $n++) echo '---';
  8.       echo $res['title'];
  9.       c($res['id'],$level + 1);
  10.    }
  11. }
  12. c();

Как основу можете использовать это, но а там уже подгоняйте по свои нужды. Если что не понятно, спрашивайте.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
dropoff
Отправлено: 27 Апреля, 2011 - 12:20:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




DlTA
до меня туго доходят даже простые решения иногда. Я любитель. Много не знаю и не умею)

Саныч
Огромное спасибо! Вывелось как хотелось)
Только parent_id='.$id в моем случае.

Не могу что-то сообразить как сунуть теперь в шаблон это все.
У меня сейчас так
PHP:
скопировать код в буфер обмена
  1. function category()
  2. {
  3.         global $smarty;
  4.  
  5.         $s_category = mysql_query("SELECT id, url, title, text, status, img, sort, parent_id FROM category WHERE status = 1");
  6.  
  7.         while ($category = mysql_fetch_assoc($s_category))
  8.         {
  9.                 $category_array[] = array
  10.                 (
  11.                         'ID'            => $category['id'],
  12.                         'URL'           => $category['url'],
  13.                         'TITLE'         => $category['title'],
  14.                         'TEXT'          => $category['text'],
  15.                         'STATUS'        => $category['status'],
  16.                         'IMG'           => $category['img'],
  17.                         'SORT'          => $category['sort'],
  18.                         'PARENT_ID'     => $category['parent_id']
  19.                 );
  20.         }
  21.  
  22.         $smarty->assign('category',$category_array);
  23.         $category_content = $smarty->fetch(BLOCKS.'category/theme/category.tpl');
  24.         $smarty->assign('CATEGORY', $category_content);
  25. }

Пробовал скрещивать с вышеприведенным кодом, но что-то ничего не вышло.
 
 Top
Саныч
Отправлено: 27 Апреля, 2011 - 12:36:17
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




dropoff пишет:
Только parent_id='.$id в моем случае.

да, немного ошибся... И еще забыл написать, в моем коде parent_id у категорий, которые не имеют родителя (т.е. у самых "верхних") должно быть 0
dropoff пишет:
Не могу что-то сообразить как сунуть теперь в шаблон это все.

возможно так
PHP:
скопировать код в буфер обмена
  1. $category_array = array();
  2. function c($id = 0,$level = 0)
  3. {
  4.    global $category_array;
  5.    $sql = mysql_query('SELECT id, url, title, text, status, img, sort, parent_id FROM category WHERE status = 1 AND parent_id='.$id);
  6.    if(mysql_num_rows($sql) < 1) return;
  7.    while($res = mysql_fetch_assoc($sql))
  8.    {
  9.       for($n = 0, $pre = ''; $n < $level; $n++) $pre .= '---';
  10.       $category_array[] = array(
  11.          'ID' => $res['id'],
  12.          'URL' => $res['url'],
  13.          'TITLE' => ($pre.$res['title']),
  14.          'TEXT' => $res['text'],
  15.          'STATUS' => $res['status'],
  16.          'IMG' => $res['img'],
  17.          'SORT' => $res['sort'],
  18.          'PARENT_ID' => $res['parent_id']
  19.       );
  20.       c($res['id'],$level + 1);
  21.    }
  22. }
  23. c();
  24. $smarty->assign('category',$category_array);
  25. $category_content = $smarty->fetch(BLOCKS.'category/theme/category.tpl');
  26. $smarty->assign('CATEGORY', $category_content);

(Отредактировано автором: 27 Апреля, 2011 - 12:37:49)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
dropoff
Отправлено: 27 Апреля, 2011 - 15:12:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Да. у меня если без родителя категория, то 0.

У меня что-то типа плагинной системы как в wordpress.
функция category() вешается на хук. По этому все содержимое нужно в ней оформлять.
Тут я тему хотел поднять по данной системе http://forum.php.su/topic.php?fo...1&topic=6930

Вывод сейчас такой
PHP:
скопировать код в буфер обмена
  1. add_hook('main','category');
  2.  
  3. function category()
  4. {
  5.         global $smarty;
  6.  
  7.         $s_category = mysql_query("SELECT id, url, title, text, status, img, sort, parent_id FROM category WHERE status = 1");
  8.  
  9.         while ($category = mysql_fetch_assoc($s_category))
  10.         {
  11.                 $category_array[] = array
  12.                 (
  13.                         'ID'            => $category['id'],
  14.                         'URL'           => $category['url'],
  15.                         'TITLE'         => $category['title'],
  16.                         'TEXT'          => $category['text'],
  17.                         'STATUS'        => $category['status'],
  18.                         'IMG'           => $category['img'],
  19.                         'SORT'          => $category['sort'],
  20.                         'PARENT_ID'     => $category['parent_id']
  21.                 );
  22.         }
  23.  
  24.         $smarty->assign('category',$category_array);
  25.         $category_content = $smarty->fetch(BLOCKS.'category/theme/category.tpl');
  26.         $smarty->assign('CATEGORY', $category_content);
  27. }


и все. т.е. этот файл буквально почти так и оформлен.

Пробовал уместить все в эту функцию category(), но все время ругается на
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
 
 Top
Саныч
Отправлено: 27 Апреля, 2011 - 15:16:02
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




dropoff пишет:
Пробовал уместить все в эту функцию category(), но все время ругается на
покажи кусок кода, как пробовал... Получается какая-то ошибка в запросе


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
dropoff
Отправлено: 27 Апреля, 2011 - 15:31:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Ну да. Хотя в запросе все ровно.


вот такой код вызывает ошибку
PHP:
скопировать код в буфер обмена
  1. add_hook('main','category');
  2.  
  3. function category($id = 0,$level = 0)
  4. {
  5.         global $smarty;
  6.  
  7.         $s_category = mysql_query("SELECT id, url, title, text, status, img, sort, parent_id FROM category WHERE status = 1 AND parent_id=".$id."");
  8.  
  9.         $category_array = array();
  10.         while ($category = mysql_fetch_assoc($s_category))
  11.         {
  12.                 $category_array[] = array
  13.                 (
  14.                         'ID'            => $category['id'],
  15.                         'URL'           => $category['url'],
  16.                         'TITLE'         => $category['title'],
  17.                         'TEXT'          => $category['text'],
  18.                         'STATUS'        => $category['status'],
  19.                         'IMG'           => $category['img'],
  20.                         'SORT'          => $category['sort'],
  21.                         'PARENT_ID'     => $category['parent_id']
  22.                 );
  23.                 category($category['id'],$level + 1);
  24.         }
  25.  
  26.  
  27. $smarty->assign('category',$category_array);
  28. $category_content = $smarty->fetch(BLOCKS.'category/theme/category.tpl');
  29. $smarty->assign('CATEGORY', $category_content);
  30. }


Если убрать
аргументы - $id = 0,$level = 0
из запроса - AND parent_id=".$id."
и из цикла - category($category['id'],$level + 1);
то вывод работает. но естественно просто списком
 
 Top
Саныч
Отправлено: 27 Апреля, 2011 - 17:44:18
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




ну коли так, попробуй еще так сделать
PHP:
скопировать код в буфер обмена
  1. add_hook('main','category');
  2. $category_array = array();
  3. function c($id = 0,$level = 0)
  4. {
  5.    global $category_array;
  6.    $sql = mysql_query('SELECT id, url, title, text, status, img, sort, parent_id FROM category WHERE status = 1 AND parent_id='.$id);
  7.    if(mysql_num_rows($sql) < 1) return;
  8.    while($res = mysql_fetch_assoc($sql))
  9.    {
  10.       for($n = 0, $pre = ''; $n < $level; $n++) $pre .= '---';
  11.       $category_array[] = array(
  12.          'ID' => $res['id'],
  13.          'URL' => $res['url'],
  14.          'TITLE' => ($pre.$res['title']),
  15.          'TEXT' => $res['text'],
  16.          'STATUS' => $res['status'],
  17.          'IMG' => $res['img'],
  18.          'SORT' => $res['sort'],
  19.          'PARENT_ID' => $res['parent_id']
  20.       );
  21.       c($res['id'],$level + 1);
  22.    }
  23. }
  24. function category($id = 0,$level = 0)
  25. {
  26.         global $smarty, $category_array;
  27.         с();
  28.         $smarty->assign('category',$category_array);
  29.         $category_content = $smarty->fetch(BLOCKS.'category/theme/category.tpl');
  30.         $smarty->assign('CATEGORY', $category_content);
  31. }


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
dropoff
Отправлено: 27 Апреля, 2011 - 22:33:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Спасибо большое! Что-то не допер вторую функцию добавить)
 
 Top
dropoff
Отправлено: 28 Апреля, 2011 - 22:04:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Хм. Сделал вывод запросов и их количество. Оказалось данное решение делает столько запросов, сколько и категорий.

получается 27 запросов.
При этом сама страница без категорий делает всего 3 запроса Радость
 
 Top
Саныч
Отправлено: 28 Апреля, 2011 - 23:15:22
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




dropoff пишет:
получается 27 запросов.

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


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
dropoff
Отправлено: 28 Апреля, 2011 - 23:29:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Вылетело что-то из головы совсем, что там функция в цикле висит и будет запросы добавлять новые Улыбка

Подгрузка на AJAX это вариант. Наверное, так и буду пробовать реализовать, спасибо за подсказку.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB