Всем привет. Понадобилась реализация вывода на страницу многоуровневого дерева категорий с вложенными в него товарами. Помогите пожалуйста, не могу разобраться. controller.php Код (Text): $categories = get_cat(); $categories_tree = map_tree($categories); model.php Код (Text): function get_cat() { global $connection; $query = "SELECT * FROM categories ORDER BY position"; $res = mysqli_query($connection, $query); $arr_cat = array(); while($row = mysqli_fetch_assoc($res)) { $arr_cat[$row['category_id']] = $row; } return $arr_cat; } function map_tree($dataset) { $tree = array(); foreach ($dataset as $id=>&$node) { if (!$node['parent']){ $tree[$id] = &$node; } else { $dataset[$node['parent']]['childs'][$id] = &$node; } } return $tree; }
не самая удачная идея дергать в цикле БД при такой простой задаче... Вам надо сначала взять все категории из базы.. а потом рекурсией построить дерево.. https://ru.stackoverflow.com/questions/675209/phpКак-вывести-дерево-категорий
Я уже взял категории из БД Код (Text): $query = "SELECT * FROM categories ORDER BY position"; и без проблем с помощью функции map_tree в примере выстроил такое дерево. Вопрос в другом, как туда добавить товары все ссылки, что кидаете, это все про деревья категорий. Тема категории с ТОВАРАМИ
чет я не туда посмотрел)) да)) у Вас один запрос)) такое тяжелое для понимания)) через PID намного проще)) если надо что бы товары был прямо в этом массиве (хотя обычно не так) тогда брать массив всех товаров - обходить каждый элемент массива категорий - брать из массива товаров все товары которые относятся к этой категории и добавлять еще один вложенный массив..
Я так и хотел, есть какая-то функция рекурсивного добавления в массив категорий массива товаров? Или может вообще это не нужно? Какой тогда другой способ? --- Добавлено --- Для полноты понимания опишу задачу. На страницу заказа сайта предоставления услуг я хотел вывести все категории, в которых находились бы таблицы с самими услугами для удобства пользователям. Чтобы они не ходили по всем категориям и услугам а могли бы спокойно это все посмотреть на одной странице. Видел я решение данной задачи выводом табов (сначала главные категории а при нажатии на них и подкатегории), в которых находились бы таблицы с услугами.
@genych тебе нужны товары принадлежащие... чему? Всем категориям? -- тогда это просто все товары. Если только выбранному под-дереву категорий, то обойди эту ветку и собери id в массив. Потом запроси товары как Код (Text): ... WHERE cat_id IN($list) Где $list это список через запятую
у услуг, находящимся в таблице БД 'posts' есть строка 'parent' В принципе нет проблем с выборкой услуг. Есть проблема добавления массива товаров в массив категорий по 'parent'
Название столбца таблицы услуг --- Добавлено --- а так parent это принадлежность к категории. То есть он равен id категории
Прекрасно. Услуги - posts, категория - parent. Я ничего не перепутал? Видимо переименовать при копировании рука не поднялась for each $posts as $post .. $postsByCat[post[parent]] = $post array_walk_recursive $catTree, f(&$item) .. $id = $item[id] .. if isset $postsByCat[$id] .. .. $item[posts] = $postsByCat[$id]
я когда то ради интереса дерево через нестеды делал)) потом дальше делал всегда через PID)) чет как то они мне не зашли)) ПС я никогда не троллю)) всегда говорю то что думаю и как есть))
Оффтопик: работаю с сайтом где услуги в таблице store, а пользователи в company. При том, что есть таблица user, но она не используется. Ещё есть postcategory и post_category. Они обе используются для разных целей, ни одна из которых не ясна из названия. Матерюсь на трёх языках. Кто-то сэкономил время на нейминг.
Перепутал таблица категорий, о которой писал выше Код (Text): $query = "SELECT * FROM categories ORDER BY position"; таблица услуг называется posts (в ней есть связь с категориями по parent) --- Добавлено --- Здесь есть платные темы?