Мастер-класс по разработке интернет-магазина на Yii2
После познания дзена на интенсиве по ООП многие просили сделать что-нибудь посущественнее на Yii2 Framework, чтобы применить новые знания на практике. И даже на форуме упомянули,
Как и обещал в блоге, в этом мае запустим большой многодневный практический онлайн мастер-класс по интернет-магазину на Yii2 с использованием лучших практик разработки и архитектуры.
В нём будет мало теории, поэтому как домашнее задание будущим участникам советую перечитать документацию. Вместо неё на уроках мы займёмся именно практикой и не будем отвлекаться на банальные вещи.
Как и на прошлом интенсиве это будут вечерние онлайн-стримы по понедельникам, средам и пятницам примерно с 19:00 по московскому времени. С выкладыванием видеозаписей и исходного кода после каждого урока в личном кабинете ученика. Так что если не сможете присутствовать онлайн и переписываться в чате, то сможете спокойно смотреть всё в записи и присылать вопросы на почту.
Если решили круто провести время в интересной компании, то подключайтесь к нам:
Перейти на страницу и приобрести записи
По оплате имеется гарантия возврата средств и возможность внести предоплату и доплатить позже. На почту отправил скидочные купоны для участников прошлых интенсивов. Для оплаты от юрлица напишите мне на почту или в обратную связь.
До встречи с участниками на мастер-классе!
Очень интересно, вопрос в цене )
Дмитрий, просто отличная новость!
Вопрос только один - примерная цена? :)
Добавил.
У тебя лучшая инфа во всем русскоязычном интернете по теме Yii всем что полагается совместно с ним знать!
ROI от курса ООП 10000% не меньше! Если новый курс будет до 10к это превосходно!
Мб 11-12т и Yii2 Cookbook в подарок?)
крута, ждемс
Жду с нетерпением
Очень жду, пошел копить деньги...
Хорошая новость. Участвуем.
Ура!
Круто! очень жду!
Приветствую. А будут рассматриваться такие вещи как тонкости реализации каталога товаров на базе деревьев nestedSet, тонкости работы с ленивой и жадной загрузкой, и подключение каких то сервисов типа яндекс.касса или вебмани? Все таки интернет магазин без функции онлайн-оплаты, выглядит как то не полноценно. Понятное дело, что в этом можно разобраться "по ходу", но так можно сказать обо всем, в том числе и например о кешировании, или использовании БД. Все таки онлайн-магазин это возможность купить что-то. ))
Спасибо!
Да, деревья категорий и платёжная система будет. Как и остальные тонкости по улучшению производительности вроде жадной загрузки и кеширования.
Вау супер!!!! =)
Дмитрий, пожалуйста, выпускайте ещё подобные практические курсы, ведь когда смотришь и вникаешь как вы пишете, начинаешь лучше понимать и перенимать практики.
Честно скажу у меня на работе пишут лапшу, никто ООП код не пишет, и даже самые опытные у кого по 7-10 лет за плечами пишут в процедурном стиле, это кошмар. К сожалению у таких людей не чему учиться. А у вас есть чему, и то что я сказал это боль большинства контор, люди работают но если ты хочешь писать лучше, то вероятно ты один такой в конторе из 15-20 человек. Ваши знания людям нужны как воздух.
У меня на работе точно также.
Работаем с немаленькой системой, написанной на дикой мешанине php msql html css js jquery все вместе почти в каждом файле!
Про ООП - не, это плохо.
На фреймворк переходить не хотят.
Такая жизнь=)
Отлично, жду с нетерпением
Вопрос по формату интенсива. Что будет рассматриваться в режиме "онлайн-видео", будут ли домашние задания, что делать, если не будет времени делать ДЗ или присутствовать на видео-лекциях?
Если нет времени, то, как и упомянул, можно смотреть в записи. На дом буду задавать только дополнительные материалы для чтения к следующим урокам.
Дмитрий, подскажи где старый курс по ооп приобрести можно? Можно ли будет новый курс потом купить ? Работа, семья, нет времени на курсе полноценно быть. По вечерам часик-два ковыряться по видео было бы хорошо. ;)
Здесь.
Если покупается товар А вместе с Б, то скидка покупателю и бонус продавцу.
Вот такое тоже хочется узнать как делается.
День добрый.
Отличная новость... И как всегда неожиданно... Срочно пересматривать и перечитывать предыдущие статьи, видео и тому подобное...))))
Благодарю за то, что не забываете нас.
Жду подробного расписания.
Добавьте работу со Spihnx
Вместо него ElasticSearch.
Хорошая новость.
Особенно интересуют след. вопросы
1. Организация js. Как положить товар в корзниу аяксом, изменение количества товара в корзине, удаление из корзины. Сейчас есть проблемы
2. Скидки. Как организовать постоянные скидки конкретным покупателям и при этом что б сортировка по цене грамотно была организована.
3. Выгрузки xml. Сейчас выгрузки пишу в процедурном стиле, вроде норм, но может есть лучшие способы.
4. Фасетный поиск по атрибутам. Как сделать фасетный поиск по атрибутам, если количество атрибутов растет, и постоянно редактировать sphinx.conf задалбывает.
5. УРЛ для поиска и фильтров. Хочется красивые урл для поиск и фильтров, а пока получается типа
/search?SearchForm[q]=ботинки. Хочется /search?q=ботинки.
Мне вот интересно, сколько таких курсов покупали вы сами?
Из последних крупных осенью с женой проходили Эволюцию за 23к. Сейчас проходим Спарту за 33. Ну и по мелочи примерно на 50к наберётся.
Дима, ну и как эти курсы? Я что-то не рискнул туда деньги занести. Что-нибудь заработалось? На какую-нибудь сумму вышли существенную?
По старому проекту в Эволюции подкрутил РСЯ на рост в два раза. Теперь выходим на прямых рекламодателей. Сейчас на Спарте для двух новых сайтов ядра собираем.
Короче, деньги на ветер как я понял. А самим разобраться как они собираются очень сложно?
Эволюция у меня уже окупилась. Мне проще «занести» пару раз в год прошаренному эксперту с сотнями сайтов, который в теме всех современных нюансов, чем влить в сайты 100+к наугад.
А если тупить, ныть на Обаму и ничего не делать, то всё будет «на ветер».
Ладно, когда мало конкретики, то спор получается не о чем. Спорить дальше не будем. Пусть каждый тратит свои деньги как ему нравиться.
Просто может у меня видение другое. Сегодня можно сделать сайт с уникальным, полезным контентом для людей с достаточно большим количеством страниц. От ниши конечно многое чего зависит. Сайт может быть обычным каталогом. Этого вполне достаточно, чтобы туда воткнуть какую нибудь рекламу на первоначальном этапе.
Со временем, да могут появиться прямые рекламодатели. Все просто на словах. А вот поднять ресурс, снабдить его уникальным контентом для людей, целая история. Но как только это будет появляются уже совсем другие проблемы. Просто понимание того, что нужно делать тоже приходит не сразу.
Не целесообразно тратить деньги на то, что и так понятно. Делай хороший сайт и этого вполне достаточно. Зачем платить деньги тем, кто скажет тебе тоже самое? Вот этого я не понимаю.
Судя по всему вы живете в каком иллюзорном мире и не особо разбираетесь. Сайтов с хорошим контентом полно и с плохим полно. И популярность их не всегда связана с их качеством контента.
Как продвинуть и раскрутить сайт целая наука, это далеко не очевидно. Шишек себе набьешь кучу пока начнет получаться.
можно вложить в сайт несколько миллионов и дальше 1к пользователей не продвинутся.
Ну я же не сказал, что это просто. Пока шишек не набьёшь вряд ли что-то будет получаться хорошо. Для начинающих, да это не очевидно совсем. Не все сразу
Рунет давно превратился в помойку. Статьи оптимизированны настолько, что их невозможно читать. Самому яндексу похоже пришло время уйти в историю, который не в состоянии индексировать современные SPA сайты. Сомнительная затея ставить на компанию, которая ежегодно теряет 2-3% рынка с технологиями поиска из 90ых годов и платить за это деньги. Яндекс к сожалению проиграл борьбу. Они скупают проекты как mail.ru, потому что понимают, что потеря рынка поиска это вопрос времени.
Вот поэтому не стоит делать ГС-ы. А Google уже научился индексировать SPA сайты? Наверное где-то вы правы в ваших утверждениях. Время покажет сможет ли Яндекс перестроиться и адаптироваться под современные реалии.
Дмитрий, если график занятий будет удобный, то я с вами!
Дмитрий, а можно будет пораньше начинать занятия не с 8 а с 6 вечера, а то разница во времени большая?
Можно с 19:00.
Не, лучше с 8-ми вечера
На работе минимум до 7-ми
Согласен. Лучше все-таки с 8.
Дмитрий, у меня такой вопрос. Мне очень интересен тот функционал, который Вы собираетесь разработать в этом ИМ, но мне сам фреймворк YII2 не очень нравится.
Я сделал на нем простенький интернет-магазин, а потом случайно зацепился за Laravel. На нем мне разрабатывать кажется намного проще и удобнее. Если у меня будут вопросы типа: "А как это сделать на Laravel?" Вы сможете мне ответить? Особенно меня будет интересовать поиск по атрибутам товаров.
Да, можно. И я всегда стараюсь делать и объяснять универсальные вещи без привязки к фреймворку, так что проблем не будет.
Доводилось ли вам сталкиваться с Drupal osCommerce?
Нет.
Дмитрий, я покупал у вас записи интенсива по ООП рассказываете доступно интересные вещи! все супер! Хочу спросить: возможно ли будет купить записи и исходники курса по интернет-магазину, после того как он пройдет, несколько дешевле, чем обошлась бы онлайн версия?
Половина участников и так будут всё смотреть в записи и задавать вопросы на почту, так как по времени не успевают. По отношению к ним продавать записи дешевле будет не очень честно.
Дмитрий, а напишите, пожалуйста кому подходит этот курс. Какими начальными знаниями нужно обладать, чтобы курс был полезен? В общем, что нужно знать в PHP? Спасибо.
Если хотите просто посмотреть, как это делают, то можно и вообще без знаний. В большей степени информация будет полезна по работе не только с Yii. И я там всегда объясняю, что делаю и для чего. А так желательно хотя бы иметь некоторе представление о фреймворках и объектно-ориентированном программировании.
Просто посмотреть не интересно. Хочется прокачать свои знания. Перенять более правильные решения и подходы. У вас такое будет? )
Да, это весь курс про лучшие практики.
Здравствуйте, Дмитрий!
Очень интересуют, а будут ли какие-нибудь скидки для тех, кто покупал у вас OOP-week? К сожалению, я как студент, наверное, курс за такую цену, увы, себе позволить не смогу. а очень-очень хочется.
С уважением!
Да, для прошлых участников скидка всегда будет. И рассрочка для всех.
Спасибо. Обязательно буду следить за статусом вашего курса. Очень хотелось бы применить какие-то знания, научиться чему-то новому :)
хорошо бы после майских праздников, что бы народ спокойно картошку посадил, и мозги проветрил перед нагрузкой ;)
Ну да, можно как раз после праздников начать.
Здравствуйте, а вообще насколько yii2 популярный, то есть можно по нему найти заказы новичку. За границей больше laravel-ом пользуются, а в СНГ как?
За границей Laravel, в России самый популярный Yii2.
Еще бы в курс добавил хотя бы чуть-чуть чуть про генерацию доки по рест апи. Swagger например
Можно. А так хочу по Swagger ещё отдельную статью опубликовать.
В этот раз планирую присоединиться. Ждем.
Дмитрий, предлагаю добавить немного информации для юр. лиц. Чтобы было удобно оплачивать на расчетный счет по договору.
Хорошо.
очень рад)
Супер жду.
Жду с нетерпением! Хочу платить! :)
Дмитрий, с удовольствием запишусь на этот курс! Так как очень понравился курс по ООП.
Просьба попробовать сделать урок с календарем. Имеется ввиду сделать функционал наподобие планирования на календаре могли отображаться или закупки или продажи товара (если реализуется интернет-магазин). А так же при нажатии на событие или день недели в календаре переходили на форму (или всплывающая форма) редактирования данного события.
Задачи планирования часто попадаются и их интересно реализовывать в виде календаря.
Заранее спасибо!
Проходил интенсив по ООП, читал статьи. Могу сказать, что курсы у Дмитрия единственные годные курсы, которые я нашёл в интернете. Из более-менее нормальных пробовал ещё хекслет, но от них толку почти нет.
Работаю junior разработчиком. Курсы и статьи Дмитрия реально прокачивают навыки и помогают в работе. Хотелось бы ещё больше статей по архитектуре, по ООП без привязки к Yii.
Также очень бы хотелось курс от Дмитрия по алгоритмам и структурам данных.
Надеюсь такое возможно)
А почему от хекслета толку нет?
Потому, что на теоретических занятиях они пересказывают очень кратко документацию.
А практические занятия ещё более бестолковые. Они по большей части оторваны от практики, не согласованы между собой даже в рамках одного курса!
Создаётся впечатление, что основная цель хекслета, это зарабатывание денег. Всё очень-очень сыро. Хотя задумка была неплохая.
Вообщем, в работе хекслет мне ни капельки не помог, хотя я прошёл на нём большую часть курсов по web-разработке.
P.S. На работе сталкиваюсь с очень разными задачами. Сайтоклепательства нет.
Антон, спасибо за Ваш ответ. Лазил по Хекслету, но мне показалось, что там в основном js-ники преподают о js, а мне по работе пхп нужно.
Пока вот собираюсь приобрести Неделю ООП, но чтобы знания не растворились хочется их привязать к чему-то практичному, к какому-то проекту. Поэтому с интересом тусю в этой теме.
"Неделя ООП" - хороший курс. Приобретайте, не пожалеете.
Только его придётся пересмотреть несколько раз.
:) Если это поможет перелезть с позиции контент-администратора хотя бы на пхп-джуна, буду учить:)
Ну если основы программирования на php знаете, то поможет.
По крайней мере задаст нужный вектор.
А вообще, трудоустройство на позицию "хотя бы пхп-джуна" процесс не очень быстрый. Потребуется не мало времени и сил для самостоятельной работы.
Азы знаю. Когда то сайтики для заработка на пхп делал. Знал бы лет 5 назад, что будет актуальнее программером работать, чем манимейкерством страдать, тогда бы откорректировал свои знания.
Дмитрий, создание интернет-магазина как-то связано с YupeCms, или будем писать магазин с нуля? (хотелось бы минимум зависимостей, желательно с нуля)
С нуля.
Спасибо, тогда с удовольствием присоединюсь к данному мастер-классу.
Хотел спросить, а мультиязычность будет?
Тоже интересует вопрос мультиязычности ?
Интерфейс переводится через Yii::t(...), содержимое - через добавочную таблицу с поведением вроде этого. Возня с этим в мастер-классе только сильно усложнит код без особой пользы для понимания.
Спасибо за вашу работу.
Делаю ставку на ваш мастер-класс по Yii2.
Буду ждать оповещения о начале курса.
По поводу тестирования, что можете сказать про актуальность Behat и что это? Или достаточно юнит тестов и codeception?
В Behat мы пишем тестовые сценарии:
и к ним программируем заготовки этих предложений с подстановками:
Как записаться, куда платить?, нет информации!
В понедельник будет. И в рассылке сообщу.
Нашел деньги, настроился, жду - сучу ногами от нетерпения :)
Вы продаете мастер-класс по разработке ИМ на Yii2. Значит у Вас должны быть успешные проекты. Могли бы вы дать ссылки на эти магазины (или магазин) и сказать что я смогу сделать такой же после мастер-класса.
Из похожих открытых проектов есть магазин запчастей и аксессуаров со сложными привязками к маркам, моделям, размерам колёс и т.п. Ещё был магазин одежды с совместными покупками и филиалами.
Помимо этого делал CRM для лендингов, портал аукционов и автосервисов, торговую биржу с продавцами и покупателями, сайт объявлений и прочие вещи. Но это к «просто магазинам» не относится.
Это наверное другой Дмитрий. Спасибо за ответ.
Добавил программу уроков.
Хорошая новость. Есть возможность добавить помимо обычного поиска на эластике еще и фасетный. Очень часто пригождается
Да, фасетный (агреггирующий) тоже будет.
Смогу ли я купить записи этого курса с полученной скидкой (как участник 3го потока ООП), т.к. не смогу по времени онлайн смотреть их, удобнее после окончания купить просто запись.
Да, скидка действует всегда.
Буду немного занят в это время. Но инфа для меня имеет большой практический интерес. Запись когда будет доступна и за сколько килорублей?
Будет доступна за столько же.
Привет Дмитрий!
Благодаря тебе, Дима, я нашел себе работу. Однако, продолжаю следить за новостями от тебя и спонсировать твои разработки. Спасибо, Дима!
Здравствуйте, Дмитрий.
Почему в курсе решили использовать Vagrant, а не Docker?
Vagrant проще.
Отлично, я с вами. Жду начала занятий)
Кстати, будет ли в день начала какая-то инструкция о том, где что и как? А то я первый раз в таком семинаре принимаю участие и, пока смутно представляю, как проходят подобные мероприятия. Где допустим трансляция проходит, туда доступ по какой-то учетной записи только? Я просто пока только на вашем блоге зарегистрирован.
Да, перед началом разошлю подробную инструкцию.
2 года назад я б с радостью записался на ети курсы.((
Дмитрий, добрый день - не могу понять оплата прошла или нет - антивирус ругался просто.
order reference number: 31335768
Order complete. All products/services have been delivered.
Прошла. Всё нормально.
Дмитрий, Динамические атрибуты - это про использование EAV Dynamic Attributes for Yii2 или свое решение, с привязкой к категориям?
Свой EAV.
Здорово, Дмитрий, а целиком исходники доступны уже сейчас от всего проекта?
От всего.
Дим, здравствуйте.
скажите пожалуйста, а когда будет второй набор? хочу поучаствовать в нем.
спасибо.
Следующие по Laravel и Symfony. А по Yii2 повторный будет нескоро. Так что если спешите, то купите записи.
Очень крутые новости! А когда планируете интенсивы по Laravel и Symfony?
Осенью и зимой.
Дмитрий здравствуйте, есть просьба-предложение. Ваш курс по yii интересен, но хотелось бы увидеть результат. Понимаю что исходники вы не покажете, но хотя бы залейте получившийся интернет магазин на хостинг. Что бы оценить функционал
Исходники есть на GitHub.
Здравствуйте.
В коде интернет магазина реализовано тремя способами чтение из БД:
1. Есть readRepository классы (как правило во фронтэнде и api)
2. Есть search методы в коде классов форм (как правило в бэкэнде)
3. Есть просто repository классы, которые иногда содержат несколько запросов на чтение.
Объясните пожалуйста, по какому принципу происходит это деление и какая цель преследуется в каждом из случаев?
Спасибо.
Для юзкейсов с логикой в ядре сделаны доменные Repository.
Для админки оставлены неповторяющиеся стандартные формы с search() и ActiveRecord. Они кроме админки никому не нужны и их пока нет смысла выносить.
Для повторяющихся выборок фронта и API общий код вынесен в ReadRepository. Там уже могут быть нужны сложные JOIN-ы, ElasticSearch, asArray(), кеширование и подобные вещи.
Спасибо. Меня очень вдохновил подход в реализации магазина. Перенимаю терерь опыт в свой проэкт)
Хотел еще спросить в контексте реализации событий.
У меня стоит такая задача. Выводится созданная сущность, например post. В интерфейсе без кнопки submit на onchange изменяются аттрибуты этой сущности: category, status, project. Запросы обрабатывает rest api.
Каждое изменение такого аттрибута должно порождать событие, которое шлёт имейл о том что поменялось (например статус был xxx стал yyy). Однако это влечет за собой артефакт: 5 случайных кликов в интерфейсе - 5 имейлов. Чтобы это избежать, нужно чтобы имейл отправлялся спустя минуту после клика (пачки кликов кликов), при этом по условию, что изменяемый аттрибут действительно после пачки кликов приобрел новое значение, а не вернулся в первоначальное.
Вопрос в том, как бы Вы реализовали такое вот замысловатое отложенное событие с оглядкой на тот подход к событиям, который реализован в интернет магазине?
Спасибо.
Первым делом бы передавал старый статус:
чтобы понимать из первого события, каким он был в начале серии.
Потом на принимающей стороне по Cron достаём всю группу этих сохранённых событий и сравниваем первое и последнее.
А каким образом и в какой момент сохранять эти события?
Например, в своём QueueEventDispatcher по get_class($event) именно эти события дублировать в отдельную очередь и доставать всё из неё вручную по Cron.
А такой вариант не будет извратом?
Ложить события в БД с неким статусом new, с текущим значением аттрибута и с текущей датой. Если перед вставкой запись в статусе new уже есть, то просто обновить дату на текущую, если нет, то вставить новую.
Крон каждую минуту запускается и выгребает записи new с просроченной датой. Если значение аттрибута в сохраненном событии отличается от значения которое сейчас у соответствующей сущности в БД, то отправить мыло и статус изменить на done. Если не отличается, значит ставим статус ignored и мыло не шлем.
Ну да. Можно.
Спасибо.
Подскажите еще такой вопрос.
Для чего mailer подключается во всех классы через контейнер зависимостей? В чем профит относительно вызова повсюду Yii::$app->mailer ?
- Для однообразия подключения со своими сервисами, у которых нет Yii::$app->xxx
- Для упрощения подмены при тестировании
- Для возможности использования нескольких мейлеров без переписывания сервисов
Решил запустить проэкт. Всё поднялось, однако сами урлы не работают. В логах nginx пусто, словно запрос он не получает. hosts содержит записи, ping хостов идет, telnet заходит на 80й порт. Не могу понять что происходит и что за редирект на https... Поведение одинаковое во всех имеющихся на компе браузерах.
Google зарегистрировал зону .dev и сделал принудительно доступной только по https. Вместо shop.dev переименуйте сайт в shop.test.
Спасибо.
Архитектурный вопрос.
имею форму настроек:
имею useCase который сохраняет настройки юзера:
имею entity которая выполняет set аттрибутов:
Если возникнет необходимость добавить еще 10-20 настроек, то получится что у меня добавление будет сопровождаться прописыванием новой настройки в нескольких местах, и плюс метод edit() сущности entity AR будет иметь 10-20 параметров в аргументе.
Есть ли пути оптимизации, или оставлять текущее решение и добавлять каждую в нескольких местах и это будет более правильно?
Настройки можно менять и независимо друг от друга. так что можно обойтись массовым присваиванием без метода edit:
Не подскажите:
1) Почему диспатчинг - $this->dispatcher->dispatchAll - вы убрали в репозитории. Вроде по логике слоев там ему не место. Да и теоретически если в сервисе транзакция не завершится, а события уже отработали
2) По вашему видео не ясен момент, вы что модели форм относите к M слою - Модели предметной области.? На втором уроке, на 50-й минуте где вы все Mодели в кучку сгруппировали:
Модель предметной области M
Модель данных из таблицы
Модель формы, модель ввода
1) Там диспетчер умеет накапливать события при включении транзакции.
2) Это просто перечисление разных значений общего термина "Модель".
Привет.
А не помните в каком видосике вы про read repositories рассказываете? В списке серий нет этого. Сложно искать.
Спасибо.
found =)