Сегодня будет интересно - мы напишем рекурсивное дерево категорий, которое позволит нам:
Мы создадим полнофункциональное дерево по типу админки MODX, только своими руками.
Для импорта товаров нам понадобится обновить модель и добавить к ней новые связи: с переводами, другими товарами и категориями.
Никаких сложностей не предвидится, всё по образу и подобию предыдущих моделей.
Затем опять обновим админку для вывода товаров. Сегодня будет не особо интересно, но увы, сделать это надо.
Сегодня мы доработаем модель категорий товаров, импортируем старые из miniShop2 и обновим админку.
Новые категории хранят свои текстовые колонки в отдельной таблице, так что нам нужно будет создать модель и для неё, а потом написать всякие вспомогательные методы в админке для удобного использования переводов.
Помимо этого, категории еще могут иметь картинку, но тут мы просто используем компонент upload-file
, который написали вчера для юзеров.
Сегодня мы обновим нашу модель пользователя, чтобы отражать изменения таблицы. Добавим всякие методы для сброса, активации и реализуем проверку паролей старых юзеров из MODX.
Проверять это всё будем путём импорта пользователей из тестовой БД, которую я получил путём обфускации данных рабочей базы.
Затем обновим админку для отображения новых данных, а вишенкой на торте будет загрузка аватарок.
Мы стартуем с момента окончания прошлого курса, поэтому я предлагаю вам скачать архив с кодом после его завершения.
Внутри есть директория docker
, там нужно запустить docker-compose
и можно работать. Более подробно про работу с Docker можно прочитать в отдельной заметке, там много комментариев с решением типичных вопросов.
Если же у вас остались данные от первого курса, то предлагаю обнулить вашу базу и пересоздать всё заново. Для этого можно или откатить все миграции, или просто вручную грохнуть БД. Проще всего удалить docker/db
и перезапустить контейнер, он создаст новую базу.
Также я еще обновил php и node зависимости, и внёс вот это в core/phinx.php
:
'templates' => [
'style' => 'up_down',
],
Теперь новые миграции сразу содержат методы up()
и down()
, вместо change()
.
Как и обещал, начинаем новый платный курс по переезду с miniShop2 на Vesp.
В нём мы разберём мой опыт по переносу работающего швейцарского магазина по продаже табачных изделий. У нас такие магазины, вроде бы, продавать ничего не могут по закону, но для примера без разницы.
Основываться мы будем на базе из прошлогоднего курса по Vesp. То есть, я буду рассчитывать на то, что вы его прочитали и поняли.
В будущих заметках мы:
Картинки для привлечения внимания:
Привет, читатели! Снова большой перерыв между заметками, почти 2 месяца, так что надо рассказать, чем был занят.
В июне я отработал последний месяц в голландской компании Sterc, в которой трудился с декабря. Устраивался работать с перспективными проектами на базе Vue и Laravel, с надеждой протащить под это дело Vesp, но в итоге всё время работал с MODX.
Проекты у Sterc крупные, разрабатываются командами из нескольких человек, через Git. Есть куча самописных закрытых библиотек и наработок, в это всё пришлось въезжать и по ходу дела не переставал мучать вопрос - а зачем здесь вообще MODX, если, например, для запуска разных задач в очередях рядом устанавливается Laravel Horizon?
В общем, работы с MODX я не выдержал и, несмотря на хорошую зарплату, уволился.
Последние 4 месяца я работал 40 часов в неделю в Sterc и 10 часов в Pixmill - то есть 200 часов в месяц, вместо обычных 160. Казалось бы, небольшая разница, а на самом деле это 5 рабочих недель в месяц, вместо 4х и времени восстановиться совсем нет.
Только за эти ударные 4 месяца я заработал около 2 млн рублей и закрыл долг в банке за покупку дома.
Прошёл уже год с момента старта последнего, на данный момент, курса по Vesp.
Думаю, за это время его смогли купить и пройти все желающие, так что продажи останавливаются и курс открывается для всех.
Минутка занимательной статистики:
В принципе, неплохо, но бросить работу и писать полезные заметки за донаты, очевидно, не получится.
Внезапный дополнительный выпуск в уже оконченном курсе!
Поступил вопрос - а как отправлять письма? Для этого я использую PHPMailer, Fenom и Emogrifier.
Fenom будет готовить шаблоны писем, Emogrifier встраивать стили непосредственно в элементы (чтобы всё правильно читалось в почтовых клиентах), а PHPMailer будет отправлять.
Добавляем новые зависимости в проект:
composer require phpmailer/phpmailer fenom/fenom pelago/emogrifier
В последнее время много работы, никак не связанной с Vesp, зато очень хорошо оплачиваемой.
Чтобы не потерять навыки, решил поиграться с Nuxt 3 в свободное время на реальной задаче - переписал весь фронтенд своей домашней странички webstartpage.ru.
Это мой самый первый проект, живой до сих пор. Там можно авторизоваться через соцсети и хранить свои ссылки. Понятно дело, что в 2023 году такие странички не особо востребованы, потому что они уже встроены в браузер - но я привык к своей. Она была сделана и на MODX Evolutuion, и на Revolution (2 раза), потом на Vesp с Nuxt 2, а теперь вот и на Nuxt 3.
Получается, что этот сайт у меня всегда на острие прогресса!
Что изменилось в этот раз:
Бэкенд на PHP остался без изменений.
Выдалась свободная минутка (точнее, часик) и я организовал-таки нормальные уведомления о комментариях на почту.
Если кто не в курсе, то раньше было вот так:
Чтобы понять о чём речь, нужно было обязательно пройти на сайт и почитать - что не очень удобно, если там только "спасибо за ответ!".
А теперь уведомления выглядят вот так:
Сразу ясно - надо ли заходить на сайт для ответа, или можно просто удалить письмо. Подобные уведомления не являются чем-то новым, я уже делал такое на modx.pro, но здесь решил улучшить пару моментов.
Знаете, что, друзья?
Что-то надоело мне загружать в заметки GIFки, как-будто на дворе не 2023 год и не безлимитный интернет!
Так что с этого момента можно грузить и видео тех форматов, которые нативно понимают браузеры: mp4, quicktime и webm (у Safari с ним проблемы).
Вот как это работает: