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

каталог товаров

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

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


скачать урок скачать исходники

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

Метки: , ,

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

  1. Эрл

    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 В ЧЕМ ТУТ ПРОБЛЕМА

  2. Александр

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

  3. Владимир

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

  4. Дмитрий

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

    • Андрей Кудлай

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

  5. Дмитрий

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

    • Андрей Кудлай

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

  6. Дмитрий

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

  7. Евгений

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

    • Андрей Кудлай

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

  8. Алексей

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

    • Андрей Кудлай

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

  9. Алексей

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

  10. Дмитрий

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

  11. Борис

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

    :

    $item): ?>

    — <a href="?view=cat&category=»>

    $item): ?>
    - <a href="?view=cat&category=»>

  12. Борис

    :

    $item): ?>

    — <a href="?view=cat&category=»>

    $item): ?>
    - <a href="?view=cat&category=»>

  13. Alexsandrbios

    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;
    }

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

  14. Александр

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

    • Андрей Кудлай

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

      • Александр

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

        • Андрей Кудлай

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

  15. Алексей

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

    • Андрей Кудлай

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

      • Алексей

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

        • Андрей Кудлай

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

  16. Андрей

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

    • Андрей Кудлай

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

      • Андрей

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

        • Андрей Кудлай

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

  17. Sergei

    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-ом уроке курса. Также ответ на аналогичный вопрос давался когда-то на нашем форуме, можете попробовать поискать.

  18. Евгений

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

    • Андрей Кудлай

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

  19. Евгений

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

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

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

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

    • Андрей Кудлай

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

      • Евгений

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

        • Андрей Кудлай

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

          • Евгений

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

          • Андрей Кудлай

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

  20. Евгений

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

  21. Евгений

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

  22. Евгений

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

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

    $dataset[$node['parent']]['childs'][$id] = &$node;

    Line: 32
    Function: _error_handler

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

    • Андрей Кудлай

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

  23. Алексей

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

    • Андрей Кудлай

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

      • Алексей

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

        • Андрей Кудлай

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

  24. Дмитрий

    Здравствуйте!

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

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

    • Андрей Кудлай

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

  25. Руслан

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

  26. Руслан

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

  27. Екатерина

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

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

    Заранее спасибо.

    • Андрей Кудлай

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

      • Екатерина

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

  28. Alex

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

  29. Игорь

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

  30. medvedevivan21@mail.ru

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

    • Андрей Кудлай

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

      • medvedevivan21@mail.ru

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

        • Андрей Кудлай

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree