За последние 24 часа нас посетили 20474 программиста и 1009 роботов. Сейчас ищут 376 программистов ...

Бесплатный новый GNU GPL 3.0 eMarket (движок интернет-магазина). Готовим релиз.

Тема в разделе "Решения, алгоритмы", создана пользователем musicman3, 28 дек 2020.

?

Проект интересен?

  1. Да

    4 голосов
    80,0%
  2. Нет

    1 голосов
    20,0%
  1. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Приветствую коллеги. Начали мы в 2018 в марте делать открытый движок интернет-магазина. И вот готовим альфа-релиз на 1 января 2021. Но уже есть демо сайт где можно глянуть последнее залитое с гита. Опенсорсы среди интернет-магазинов и так не частые гости, но надеемся наше решение будет интересно своими сторонами.

    Требования:
    • PHP >= 7.3
    • MySQL >= 5.7
    • Javascript >= ES6
    • HTML 5
    Использован Bootstrap 3. Внутри админка построена достаточно удобно под действия манагера. Но практика покажет. Много всего делается для эргономики. Многие решения еще не применялись в интернет-магазинах. Если честно, то мы не так много оглядываемся на другие магазы, сколько делаем свое видение движка. Опыт работы с интернет-магазинами у нас большой, и нам вполне хватает понимания того, что мы делаем и что нам надо.

    Значит тем, кто залезет посмотреть демо сразу предупреждаю что в админке в разделе Склад все делается через контекстное меню правой кнопкой мыши. Кликаем правой кнопкой мыши на строках с товаром/категорией и делаем что нужно. Не типично, но довольно удобно. Мы используем много динамических модалов для того, чтобы действия можно было выполнять максимально комфортно.

    Относительно много юзаем JS, так что не все на пхп. Фреймворки пхп не юзаем, и даже отвечать не буду на эту тему.

    На данный момент продумана структура модулей оплаты, доставки и скидок, которые полностью независимы, лежат в отдельной папке, имеют свои классы, языковые и не привязаны к шаблону. Особенно подчеркну что и модули скидок также можно реализовать, что было довольно не простой задачей.

    Структура построена на MVC + L. Есть композер. Другими словами все базовое есть. И это наш проект, а не забугорный.

    Страничка на GitHub - https://github.com/musicman3/eMarket
    Техподдержка и демо - http://emarketforum.com

    Работы было много. Надеюсь сообщество тоже появится.

    И немного скринов для лентяев прикрепил к теме.

    По разработке можете задавать вопросы мне. Меня зовут Александр. По шаблонам сможет ответить коллега верстальщик.
     

    Вложения:

    #1 musicman3, 28 дек 2020
    Последнее редактирование: 28 дек 2020
  2. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Мои новогодние поздравления всем участникам этого форума. Сегодня мы выпустили релиз v 1.0 Alpha 1.

    Он доступен на GitHub - https://github.com/musicman3/eMarket/releases

    Вы можете скачать и установить его на своем сервере для ознакомления.

    Для этого скопируйте файлы на сервер и зайдите по страничку: http://localhost/controller/install/
     
  3. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Вышла версия 1.0 beta 1.

    Новшеств на первый взгляд не много, но все они имеют огромное значение.

    - Переход с Bootstrap 3 на Bootstrap 5.
    - Vanilla JS. Это большая работа. Мы заменили все сторонние JS-приложения на ванильные. Также весь наш код пишется на Vanilla. Это дает большие возможности.
    - Произведены структурные изменения
    - Добавлены SMS-провайдеры
     
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    У Вас коммиты с русскими комментариями и шапки у классов нестандартные, поздравляю )))
     
    musicman3 нравится это.
  5. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    А есть стандарты на русский/не русский текст в коммитах? Названия коммитов вообще не несут никакой толковой информации кроме как для разработчиков, чтобы понимать примерно что и когда было. Во многих коммитах бывает много изменений, которые просто не объять названием или описанием. Поэтому это в основном всегда для ориентира. Главное комментарии и описания функций на английском. Вот это для сторонних программистов всегда самое важное.

    А шапки у классов по стандарту сделаны. Чем не угодили? В документор сразу импортируется.

    В любом случае спасибо что ознакомились.
     
    #5 musicman3, 17 июн 2021
    Последнее редактирование: 17 июн 2021
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Если приходится коммитить несколько изменений пачкой (всякое бывает), описываю через <enter> отдельно каждое, не вижу проблемы, и да, по-английски, ибо английский язык стал интернациональным некоторое время назад + полезно для саморазвития )
    Так же не заметил в коммитах issue's numbers, если у Вас до сих пор нет интеграции ни с каким баг-трекером, настоятельно рекомендую срочно это дело поднять.

    > А шапки у классов по стандарту сделаны. Чем не угодили? В документор сразу импортируется.
    По стандарту всегда было
    PHP:
    1. /**
    2. * ай-лю-лю всякое
    3. * ...
    4. */
    Не заметил конфига для phpDocumentor, возможно, используете что-то другое, ну да пыр с этими док-генераторами )
     
  7. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Вы включите IDE и вся подсветка появится на все классы и функции, так же как и в документоре. И какой конфиг для документора? Первый раз слышу. Там не конфиг, а стандарт написания доков в шапках функций и классов. Это можете проверить это при импорте в документор легко за минуту из любой IDE.
    --- Добавлено ---
    Все мои описания функций и классов, а также все мои статьи и описания интернет-магазина выполнены на английском. Как бы я понимаю что я делаю. Как бы я надеюсь и Вам понятно что я на инглише описываю, если Вы понимаете что нужно искать программисту.

    Я очень рад что Вы уделяете проекту время, и надеюсь это будет интересно всем.
     
  8. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Будьте добры предоставить ссылку на доку по API кода, созданную документором, вдруг я в консольных редакторах код шевелю )))))

    Не копал, замечаний/предложений пока нет )))
     
  9. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Вот пожалуйста API - https://www.phpdoc.org/ - стандарт для документирования в классах/функциях и др для PHP.

    Также эти стандарты поддерживаются в Netbeans, PHPStorm и других IDE все также на основе документора
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Буду следить за развитием.
    Желаю проекту удачи :)
     
    musicman3 нравится это.
  11. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Спасибо на добром слове. Будем развивать функционал.
     
  12. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Ссылку на сгенерированный документором API своего кода, пожалуйста, что такое phpDocumentor и иже с ними знаком.

    Ещё мелкое замечание: выпиливание лицензии (README-й, в общем-то, тоже) используемых сторонних библиотек через .gitignore -- фу-фу-фу.
     
  13. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Какое выпиливание лицензий? Оно все в коде сохранено сторонних библиотек. В шапках. Мы гитигнорим сторонний мусор, чтобы он не попадал в общую базу проекта. Это нормальная практика всего мира. Ссылку генерировать документором - первый раз такое слышу. Я знаю что документором генерируют документацию, а для этого постарайтесь изучить эти основы и сделайте это легко сами за минуту. Это совсем не сложно. Мне есть чем заняться, я думаю Вы понимаете о чем я. Самое главное, Вы смотрите, изучаете - это важно. Дотошное изучение и вопросы - это также важно.

    Я с радостью отвечу даже на казалось бы простые вопросы, ведь для многих они могут быть не понятными. Я также соглашусь там, где я явно не прав, ведь это сделает проект где-то лучше. По крайней мере я постараюсь всегда принять свою неправоту, но только если я четко понимаю и осознаю что я не прав. Для этого нужны четкие и ясные аргументы, что только приветствуется. Спасибо.
     
    #13 musicman3, 18 июн 2021
    Последнее редактирование: 18 июн 2021
  14. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Да, сторонний код содержит тег @license, вопрос снят.

    Вы исказили мой пост )
     
  15. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Пардоньте :) Вероятно Вы хотели получить ссылку на закачку. Проще через IDE открыть и получить описание функции. У меня для работы стоит 8 пхп, а на нем документор еще не работает последняя версия от 20 года, а снижать версии пхп и перебирать jdk не имею желания для этого, так как всю документацию также хорошо видно через IDE.
     
  16. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Вот пример как можно увидеть описание функции через ctrl + наведение мыши в нетбинсе. Если не придерживаться форматирования шапки, то оно и не появится. И соответственно второй скрин - это шапка этой функции.
     

    Вложения:

  17. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Добра желаю, постарайтесь избежать восприятие в штыки замечаний ))

    1) Где описание уровня JavaScript APIs - Mozilla | MDN ? Как думаете, зачем такое публикуют? Хотите пойти в народ, будьте добры сгенерировать документацию;
    2) title_install_ (emarket.local) -- годный тайтл у документа;
    3) У пользователя БД может быть пустой пароль (первое изображение);
    4) Если поддерживаете на текущий момент только один тип БД, сделайте его автоматом выбранным и отключите выбор (disabled, второе изображение);
    5) Я админ, могу ставить Ваш продукт в песочнице, мне решать за пароль (третье изображение), тему про пароли можно развить позже;
    6) Про статику и константы (по крайней мере для имён таблиц) промолчу, ещё один коробочный нерасширяемый (заранее прошу не рассказывать про гибкость расширения кода на уровне кода) код.

    В общем, споткнулся об инсталляшку, есть ещё вопрос, предусмотрено ли обновление из коробки )
     

    Вложения:

    musicman3 нравится это.
  18. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Спасибо, некоторые замечания поправлю.
    Но в целом инсталляшка позволяет без проблем все проинсталлировать.

    П. 6 нет смысла обсуждать (статика/не статика), так как начнется метание стрел. В целом по нему скажу что любой пункт в меню добавляется через модули без правки файлов. Т.е. пишите модуль, в нем весь код. Никаких шаблонов править не нужно. БД также заливается при инсталле модуля. Если заливать не как модуль, а как статический раздел, то тогда данные по БД идут в общем файле БД и прописываются в конфиг, что в принципе логично.

    По п.1 - при штате 2 чел, времени на все нет. Поэтому сейчас ведется работа в основном над функционалом. Без функционала и обсуждать нечего.
    --- Добавлено ---
    п.4 пока менять не будем, так как возможно в будущем будем пробовать и другие БД, в силу того что работаем через PDO. Если решим что это не нужно, то конечно же уберем в будущем.

    по п.2. я не очень понял - у меня нормальный тайтл

    Обновление из коробки будет в полноценном релизе
     
    #18 musicman3, 18 июн 2021
    Последнее редактирование: 18 июн 2021
  19. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    858
    Симпатии:
    132
    Пункт 1 более, чем важен, документируйте код и стреляйте автогенерёную доку. Остальное такое себе.
    Ну и да, тесты должны быть, без тестов бе-бе-бе. Как-то раз переиспользовал свой код, писанный лет 7 назад, подивился, как он работает, при покрытии тестами выявил несколько непростительных ошибок.
     
  20. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    На данный момент проект соответствует следующим PSR:
    • PSR-1 (Basic Coding Standard)
    • PSR-3 (Logger Interface)
    • PSR-4 (Autoloading Standard)
    • PSR-5 (PHPDoc Standard)
    • PSR-12 частично (Extended Coding Style Guide)
    • PSR-19 (PHPDoc tags)
    На сегодняшний день сделано после первой беты следующее:
    • Менеджер персонала
    • Лог действий
    • Логгер на базе Monolog
    Менеджер персонала позволяет создать группы персонала и задать им права на доступ к определенным страницам. Таким образом можно создавать персонал с различными правами доступа, вплоть до админа. Тем не менее суперадмин остается недоступным этой группе для изменения, даже если у них права к доступу для Менеджера персонала.

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

    Скриншоты внизу. На демо еще не залито, так что можно скачать с гита.
     

    Вложения:

    #20 musicman3, 30 июн 2021
    Последнее редактирование: 30 июн 2021
  21. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Добавлен функционал для создания модулей вкладок для товаров. Т.е. теперь можно добавлять дополнительные модули во вкладки страницы товара без правки шаблона.

    Также добавлен первый модуль для вкладок - Отзывы.

    - Отзывы учитывают покупку товара покупателем, прежде чем можно оставить отзыв.
    - Нельзя оставить более 1 отзыва на товар.
    - Отзывы позволяют дать оценку от 1 до 5 звезд.

    Кроме того отзывы модерируются из административной панели. Для модерации доступны 3 типа действий: Редактирование отзыва, Удаление отзыва и Публикация отзыва. Пока отзыв на модерации для покупателя отображается соответствующая надпись.
     

    Вложения:

    #21 musicman3, 12 июл 2021
    Последнее редактирование: 12 июл 2021
  22. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Сегодня был выпущен релиз v. 1.0 beta 2.

    Что нового:
    • Менеджер персонала (описано выше)
    • Логгер на базе Monolog (описано выше)
    • Лог действий (описано выше)
    • Движок для модулей вкладок (описано выше)
    • Отзывы (модуль) (описано выше)
    • Dashboard (Мониторинг)
    • Функция проверки обновлений
    • jsonRPC сервис
    • Фиксы и др.
    Часть функционала уже описана выше. Допишу остаток:
    • Dashboard (Мониторинг). На этой странице теперь можно смотреть статистику, различные графики и прочее.
    • Функция проверки обновлений. Теперь можно видеть новые обновления. Если вышла новая версия, то это отобразится в магазине.
    • jsonRPC сервис. Добавлен сервис для jsonRPC. Теперь можно добавлять свои микросервисы, принимать/отправлять данные с различных платформ и т.п. Для создания jsonRPC функции достаточно просто создать новый класс в model/eMarket/jsonRpc. Там же размещен тестовый класс, на котором можно потренироваться.
    Демо новой версии уже доступно для просмотра. Приветствуются звезды на GitHub, если проект понравился.
     

    Вложения:

    #22 musicman3, 3 авг 2021
    Последнее редактирование: 3 авг 2021
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Движок не запускал, но код очень странно выглядит. Контроллер просто создаёт модель, а модель обрабатывает http-запросы. И почему это тогда называется контроллером и моделью - не понятно. Так же странный механизм определения того, что надо сделать. Например, кусок отсюда (https://github.com/musicman3/eMarket/blob/master/model/eMarket/Admin/Manufacturers.php):
    PHP:
    1. /**
    2. * Constructor
    3. *
    4. */
    5. function __construct() {
    6.    $this->add();
    7.    $this->edit();
    8.    $this->imgUpload();
    9.    $this->delete();
    10.    $this->data();
    11.    $this->modal();
    12. }
    Вообще не разберёшь, что этот конструктор делает, пока не полезешь в методы. А оказывается, что каждый метод проверяет, не надо ли ему отработать, и потом отрабатывает, обрабатывая тот или иной запрос
    PHP:
    1. public function add() {
    2.     if (Valid::inPOST('add')) {
    3.       $id_max = Pdo::selectPrepare("SELECT id FROM " . TABLE_MANUFACTURERS . " WHERE language=? ORDER BY id DESC", [lang('#lang_all')[0]]);
    4.       $id = intval($id_max) + 1;
    5.       for ($x = 0; $x < Lang::$count; $x++) {
    6.            Pdo::action("INSERT INTO " . TABLE_MANUFACTURERS . " SET id=?, name=?, language=?, site=?, logo=?", [$id, Valid::inPOST('name_manufacturers_' . $x), lang('#lang_all')[$x], Valid::inPOST('site_manufacturers'), json_encode([])]);
    7.        }
    8.        Messages::alert('add', 'success', lang('action_completed_successfully'));
    9.    }
    10. }
    И, ещё раз, это всё называется Моделью!

    Чем не устраивает традиционное определение необходимого действия через разбор урла?
     
  24. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Советую глянуть блок-схему, чтобы понять что куда. Тогда вопросы, я надеюсь поубавятся и станет немного понятнее.

    Кроме того Вы должны заметить что обрабатываются не $_POST а метод
    PHP:
    1. Valid::(inPOST)
    что уже относится к модели, так как там валидация и прочее
     
    #24 musicman3, 6 авг 2021
    Последнее редактирование: 6 авг 2021
  25. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    В идеале контроллер должен принять запрос и включить нужный метод, что и делает объект в контроллере. Класс этого объекта относится к модели, в которой и описана логика и обработка.