Обучение — Категории и подкатегории php


Урок 1. Вывод категорий

Дата публикации: 20-08-2013

От автора: совсем недавно мне пришлось переписывать движок для одного из сайтов. При этом передо мной встала задача реализации полноценного каталога товаров. В этой серии уроков я бы хотел поделиться с Вами в общих чертах своим решением.

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

Все уроки курса:

Комментарии (111)

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in G:\home\php_site\www\functions.php on line 16

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in G:\home\php_site\www\functions.php on line 19 В ЧЕМ ТУТ ПРОБЛЕМА

В ошибке… для решения подобных вопросов у нас есть форум .

И не думал даже.

Эрл, первый параметр в функции mysqli_query, который являет собой соединение с базой, в вашем случае таковым не является

Андрей, можно поинтересоваться? А что за редактор вы используете на видео?


Можно, конечно же. Это Sublime Text 2.

Добрый день, Андрей.
Тоже его использую, а что за горячие клавиши вот для этого
.wrapper>.sidebar+.content
хлоп и потом сразу все в «дивную» верстку превратилось? )))

Добрый день.
Это плагин Emmet. А вот и урок по работе с ним — Плагин Emmet — пишем код быстрее .

и снова спасибо! )

И снова пожалуйста )

Добрый день. Подскажите, делаю все по уроку, выводит массив. А когда вставляю ф-цию построения дерева, ничего не происходит, все остается, как и было. Даже если продолжить следование, то в конечном итоге получаю красивый список ссылок, но без «дерева»? Что я могу делать не так.

большое вам спасибо! учусь по вашим урокам — создание магазина с нуля. жаль, что пока не могу за них заплатить(извините))) но, надеюсь смогу вам оплатить ваш труд в дальнейшем..
хотелось бы еще увидеть ваши уроки по созданию сайта(например магазина) с нуля и без фреимворков. потому как sql уже устарел, php уже 7, а фреимворки на начальных этапах наверно лишнее..
еще раз вам Большое спасибо за работу. ваши уроки лучшее, что я смог найти.

Здравствуйте. Получил не очень понятный эффект. Аккордеон разворачивает список детей, но не кладет в GET category родителя всех этих детей. Дети прекрасно видны в аккордеоне и кликабельны. Я ожидал что вместе с разворачиванием детей category в строке GET останется от родителя — до момента выбора какого то из детей. Я неправильно думал ?

Здравствуйте. Насколько я понял, вы хотите, чтобы при клике по родительской категории не только она раскрывалась, но и происходил переход в саму эту категорию? Если я верно понял, то для этого нужно просто в метод плагина передать необходимую опцию. В уроке Каталог товаров. Отвечаем на вопросы. Часть 2 я показал этот момент.

Здравствуйте Андрей!
Ссылка на урок на YouTube не работает. Есть где-нибудь ещё данное решение?
Спасибо!

Здравствуйте.
Указанный урок — это 39-ый урок в данном разделе, он доступен по платной подписке.

Спасибо, глаза дырявые у меня просто


Вдогонку. Распечатываю массив $categories_menu — все ссылки на category нормально вижу в адресной строке.
Помещаю с (как сделано в уроке) и вывожу через аккордеон — возникает сдвигание-раздвигание, но category перестает формироваться у тех строк, которые имеют потомков.

1. Совсем не понял о чем речь… у вас что-то не получается по уроку или вы пытаетесь сделать что-то свое? Если не получается по уроку, тогда можно банально сравнить ваш код с кодом из исходников. Если не получается сделать что-то свое, то для того, чтобы что-то посоветовать, для начала нужно понять, что вы пытаетесь сделать. Также не понял, как распечатывая массив, можно видеть его ссылки в адресной строке.
2. Для решения вопросов, связанных с кодом, у нас есть форум .

Вижу, что отрезались теги в предыдущем послании. Там было написано, что я помещаю в меню ul и li.

Помогите, пожалуйста. У меня не работает mysqli (с mysql проблем нет). Почему-то Notepad++ его тоже не подсвечивает. В файле php.ini данное расширение подключено. В чем может быть проблема? В интернете решения данной проблемы не нашел. На Вас последняя надежда.

А что именно значит «не работает»? В чем это проявляется? Какие ошибки получаете? Создайте, пожалуйста, тему на нашем форуме, покажите ошибку и участок кода, вызывающий данную ошибку.

Цукерберг рекомендует:  Программирование - Oculus rift (Программное обеспечение)

Подскажите, а как в плагине accordion сделать по умолчанию изночально открытым один пункт меню?

Внимательнее пересмотрите урок, я ведь показывал такую возможность, за это отвечает опция active, значением которой можно установить индекс нужной секции. Также дополнительно нужно проверять, не установлена ли кука со своим индексом секции, чтобы не открывать секцию по умолчанию, если уже что-то записано в куки (это уже код не для комментариев, здесь можете создать тему на форуме, если не разберетесь).

Спасибо, просто урок до конца не досмотрел и принялся быстрей делать). разобрался..

Спасибо за уроки!
Т.к. «зелен» еще в PHP, попал на сайт — как клад нашел! Пошел на форум..

Добрый день!
Урок интересный и понятный.
я сделал вывод в браузер по другому мне кажется так проще, вот только на могу подключить аккордеон.

function map_tree($dataset) <
$tree = array();

foreach ($dataset as $id=>&$node) <
if (!$node[‘parent’]) <
$tree[$ > >else <
$dataset[$node[‘parent’]][‘childs’][$ > >
>


Эта функция намного мощнее чемта которая была в уроках по созданию магазина сябки за функцию терь точно менюшку передалаю на более многоуровневую)))))))

Да, эта функция будет немного универсальнее

Подскажите, как сделать сортировку категорий по названию

Использовать ORDER BY в запросе.

При таком запросе сортируются только подкатегории

Я не вижу вашего запроса и кода. Создайте тему на форуме, покажите запрос, тогда можно будет подсказать что-то конкретное.

Подскажите, как сделать постраничную навигацию такого меню?

Вы имеете в виду постраничную навигацию товаров в категориях этого меню? Если так, то такие уроки есть далее в цикле Каталог товаров.

не совсем. Допустим если нужно такое меню использовать на странице в виде контента.
т.е. нужно разбить основные категории по страницам.
На пример на первой стр. 5 основных категорий + подкатегорий
на второй стр. следующие 5 основных категорий + подкатегории и т.д.

Разницы нет, поскольку алгоритм постраничной навигации одинаков для любого контента, будь то статьи или категории. Просто получайте необходимое количество корневых категорий для каждой конкретной страницы и выводите их.

Андрей, благодарю Вас за урок. Но у меня один вопрос по плагину «аккордеон» — при переходе на главную страницу аккордеон так и показывает выбранный пункт меню до перехода на главную — это вводит в заблуждение, можно ли как-то сделать сброс по клику на ссылки с определённым id, например? С javascript я мало сталкивался…

Андрей, для этого достаточно при переходе на главную страницу удалять куку, в которой и запоминается состояние аккордеона. Такой вопрос уже задавался на форуме и там же есть ответ на него в этой теме — http://webformyself.com/forum/index.php/topic/3008/


Читал, но дело в том, что мне нужно не только при переходе на главную удалять куки. При переходе из карточки товара по хлебным крошкам, топ товаров и прочее там везде есть левый сайдбар с меню и необходимо очищение куков. нужно зацепить на наличие у ссылки передачи определённого data-type или ещё как-то лучше я ничего не придумал

Ну я с Вашим сайтом и ТЗ не знаком, поэтому конкретного ответа дать, конечно же, не могу, но суть остается той же — на нужных страницах необходимо удалять куку. Прикреплять для этого атрибуты к ссылке необязательно.

Notice: Undefined variable: string in C:\xampp\htdocs\catalog\functions.php on line 47

И далее в каждом дочернем пункте меню:

Notice: Undefined variable: string in C:\xampp\htdocs\catalog\functions.php on line 47

В том, что все ошибки выводятся на экран. Подробный ответ, как это исправить — в 11-ом уроке курса. Также ответ на аналогичный вопрос давался когда-то на нашем форуме, можете попробовать поискать.

А как из базы теперь удалить все подкатегории категории ? ведь их там может быть неограниченное ко-во.

Для этого создается админская часть, в которой и осуществляется управление категориями.

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

Я вот могу удалить не более 2-ух уровней, а все что находится глубже второго, остается в базе как мусор.

mysql_query(«DELETE FROM categories WHERE parent = $id»); // Удаляем подкатегории

mysql_query(«DELETE FROM categories WHERE >


Этого не сделать запросом при такой структуре БД. Задача решается работой с массивом категорий и решение можно найти в 3-ем уроке курса — Вывод товаров , где получаются все товары запрошенной категории (включая и вложенные категории). В уроке пишется функция, которая по переданному ID получает все ветки потомков без ограничения уровня вложенности.

Цукерберг рекомендует:  Бесплатка “Cardio” Шаблон одностраничника

Спасибо Андрей! Посмотрел и все стало понятно.
А у вас в этом видео курсе админка делается, просто из оглавления я не понял, все заканчивается на Уроке 52. Структура админской части., но в одном уроке всю админку не распишешь же.

Пожалуйста, Евгений
Да, как раз с 52-го урока и начинаем делать админку.

А как вы в Mozile поиск в низу включаете ?

Стандартной комбинацией клавиш Ctrl+F. Это сочетание клавиш актуально и для других браузеров.

Может как то можно получить все категории у которых parent не равен ни одному из всех доступных id.

Пожалуйста при написании админке сделайте что бы можно было выбрать checkboxом какие категории удалить, и соответственно всю вложенность каждой выбранной категории.

Собственно, примерно так и планировалось)

Подскажите пожалуйста я пытаюсь сделать это все в codeigniter 3

но он пишет ошибку на строку

Line: 32
Function: _error_handler

без фрэймворка все работает.


1. Для решения вопросов, связанных с кодом, у нас есть форум.
2. Из сообщения совсем не понять, что именно «не нравится» фреймворку. Если будете задавать вопрос на форуме, тогда неплохо было бы выложить текст ошибки — без этого можно только гадать, в чем именно ошибка и как ее исправить.
Рискну предположить, что ошибка в разной структуре массивов. Т.е. массив, который формирует фреймворк, отличается от массива из урока. Например, когда я использовал эту функцию во фреймворке CakePHP, причина была именно в этом. Соответственно, нужно вносить правки либо в код функции, либо, если это позволяет фреймворк, получать массив нужного формата.

Здравствуйте, сделал меню по вашему уроку, но почему-то когда меняешь в плагине Accordion() свойство » eventType:’mouseover’ » то не работает эффект открытия меню при наведении мыши
Почему? помогите разобраться

Здравствуйте, Алексей.
Для свойства eventType можно использовать значение hover, значения mouseover, насколько я вижу, нет.

Я пробовал — eventType:’hover’ , но все равно не работает, а при нажатии на пункт меню сразу переходит по ссылке, как будто нельзя использовать ‘hover’

Для работы события hover дополнительно нужно подключить файл jquery.hoverIntent.minified.js (подключать перед подключением плагина аккордеон). Подключили такой? Если подключили но все равно не работает, тогда задайте вопрос на нашем форуме, дайте ссылку на архив с Вашим кодом, я попробую посмотреть.

Установил два меню на аккордеоне на один сайт. Меню по разделам разные, но сам код аккордеона одинаковый. Проблема в том, что при открывании одного из разделов одного меню, параллельно после обновления страницы открывается этот же раздел у другого меню. То есть они взаимосвязаны, откроешь раздел в первом меню, сработает и во втором меню. Помогите, пожалуйста, как исправить это.

С уважение, Дмитрий.

Здравствуйте.
Используйте для второго меню другой класс и вызывайте аккордеон для нового класса. В качестве параметра укажите другое имя для куки. Если возникнут дополнительные вопросы, тогда задайте вопрос на форуме, и я покажу пример кода (здесь код выкладывать не очень удобно).

Здравствуйте Андрей!
Подскажите пожалуйста, откуда берется названия ссылок меню? Заранее спасибо!

Здравствуйте, Руслан. Названия берутся из базы данных.

С прежним вопросом разобрался, последний вопрос: как назначить адрес перехода на страницу детального описания товара? заранее спасибо.

Ответ на этот вопрос можно найти в одном из следующих уроков — Урок 6. Просмотр товара


Андрей, помогите сам аккордеон не работает. Ради теста скопировала файлы урока, не меняя имена класса. Не работает. Файлы подключены, через браузер их видно и можно открыть. Не пойму с чем может быть проблема.

Андрей я понимаю что это платный курс, и вы не обязаны помогать … но все же может быть хотя бы совет дадите с чем это может быть связано.

Екатерина, причин может быть сколько угодно, здесь только нужно смотреть, что Вы делаете не так. Одно могу сказать точно — исходники однозначно рабочие, поскольку вот только что скачал и проверил, у меня аккордеон работает. Да и сотни других людей прошли эти уроки — особых проблем ни у кого нет. Можете написать доступ к Вашему компьютеру через TeamViewer, в качестве исключения я подключусь и попробуем вместе посмотреть, почему у Вас не получается.

Андрей, спасибо вам большое за отзывчивость. Заработал аккордеон. Проблему была в последовательности подключаемых файлов .js. У меня первым был подключен workscripts.js. Первым сделала jquery-1.9.0.min.js и все заработало. Глупейшая ошибка, сидела 3 дня Спасибо еще раз

Почему это не в ООП. С пониманием ООП как то проблемы

Цукерберг рекомендует:  Games - Game engine

Можно ли оплатить в Украине на приват банк ?

Напишите, пожалуйста, в нашу службу поддержки .

Здравствуйте!1-й урок,выводит -»нет соединения с БД»,стоит OpenServer,что-то не так с настройками OpenServera?

Здравствуйте.
Проверяйте корректность настроек соединения с БД в коде. Настройки сервера здесь не при чем, скорее всего.

Здравствуйте!Вот это сообщение -»корректность настроек соединения с БД в коде»,это где?в коде,но я его перепроверял,всё как у Вас написано,точь в точь.Если OpenServer то где эти настройки?

Еще раз, это не Open Server и если Вы полезете в его настройки, то, скорее всего, просто все сломаете (ну а вообще, конфигурация MySQL доступна в меню Дополнительно — Конфигурация). Можете написать мне в личку на форуме доступ к Вашему компьютеру через TeamViewer, я подключусь и попробуем вместе посмотреть Вашу проблему.

Вот тут такой вопрос возник. Я сделал всё, как у вас. Всё работало. Потом добавил аккордеон ( подключил jquery-ui и сам jquery и дописал нужный скрипт вместе вывода), меню скомпоновалось, но подкатегории перестали выводится. Почему-то перестала работать функция построения дерева, она в упор не видит дочернии категории, а выводит только основные. Никаких ошибок не выдаёт не PHP не Mysql не JS. Я даже полностью удалил скрипты, но проблема не уходит. Не подскажите в чём может быть проблема, а то я уже не знаю за что схватится?


Здравствуйте, Олег.
Проблема либо в разметке, либо в конфликте сриптов, либо в других ошибках JS. Только такой абстрактный ответ можно дать, не работая с Вашим кодом. Что можно посоветовать здесь? Отказаться от jQuery UI. Зачем Вам его аккордеон, если мы итак сделали в уроке аккордеон не хуже?

В том то и дело, что я ничего не трогал из разметки, или самих функций, просто доставил скрипты и всё. А функция просто перестала работать…причём всё остальное работает. Далее, скрипты я полностью снёс, но проблема никуда не делась. А что касается аккордеона, то урок аж 2013 года, и я подумал что вы ставите именно Jquery аккордеон, мало ли, как названия файлов поменялись с того времени)У меня вообще создаётся впечатление, что функция то ли срабатывает наполовину, так как происходит баг при определении дочерних элементов… то ли попросту пропускается обработчиком, опять же при каком-то баге, при определении её, как функции. Ладно буду искать варианты решения) Кстати вопрос на засыпку, можете посоветовать какой-нибудь урок или статью, где будет объяснятся, как сделать комбинированное меню. Т.е первый уровень аккордеон например, а последующие открываются в бок при наведение или клике, а то в гугле всё время какая-то ерунда выдаётся. Заранее спасибо.

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

Здравствуйте!Почему то и сам набивал код.и материалы исходников дают такое положение http://pastenow.ru/1BAA3 Главная и следующие элементы на совмещаются в «единый блок»,почему так,особенно не понятно,что в уроке всё чётко расположено,код тот же,у меня «в разнобой».

Здравствуйте.
Урок записывался с шириной экрана 1024 пикселя, поэтому на экране все выглядит так аккуратно. Можете уменьшить ширину своего браузера и увидите то же самое. Чтобы все смотрелось хорошо и на большом экране — просто перенесите ссылку на главную страницу внутрь блока с классом sidebar.

Здравствуйте!Всё,супер!всё встало на место,я как-то про разрешение экрана и не подумал.Ссылку внутрь блога поставил и всё на месте.Спасибо.

Форум PHP программистов ► PHP практикум ► PHP для начинающих

Пейджер выключен!

Сообщений: 222
Пользователь №: 4258
На форуме:
Карма:

Доброго времени суток!

Возник вопрос по выводу категорий и подкатегорий —

Вывожу список разделов и их подкатегории следующим запросом


В каждой подкатегории возможны еще подкатегории и так далее.

Можно ли организовать выборку одним запросом — брать только две подкатегории от имеющегося каталога?

Присоединённое изображение

Форум PHP программистов ► PHP практикум ► PHP для начинающих

Пейджер выключен!

Сообщений: 222
Пользователь №: 4258
На форуме:
Карма:

Доброго времени суток!

Возник вопрос по выводу категорий и подкатегорий —

Вывожу список разделов и их подкатегории следующим запросом

В каждой подкатегории возможны еще подкатегории и так далее.

Можно ли организовать выборку одним запросом — брать только две подкатегории от имеющегося каталога?

Присоединённое изображение

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих