Git Product home page Git Product logo

shop-skeleton's Introduction

DSS (Dvizh Shop Skeleton)

Скелетон основан на Yii2 модулях Dvizh и сторонних разработчиков, предназначен для быстрой сборки MVP (минимально жизнеспособный продукт) Интернет-магазина. Данное решение навязывает свою модульно-аспектную архитектуру приложения, направленную на

  • Быструю разработку первой версии приложения за счет использования готовых конфигурируемых CRUD модулей, сервисов, аспектов и виджетов;
  • Долгосрочное развитие и поддержку без необходимости полного рефакторинга или переписывания с нуля до того момента, пока проект не "выстрелит".

Демо: http://demo-dss.dvizh.net (это фронт с основными виджетами) http://demo-dss.dvizh.net/backend/web (это админка)

administrator:10111988

Целевая аудитория - опытные программисты.

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

  • PHP (синтаксис ООП обязателен)
  • HTML
  • Yii2 фреймворк
  • Git

Скелетон использует в качестве базы Yii2, большинство терминов берутся из документации этого фреймворка:

  • Скелетон - базовый каркас приложения, зависящий от некоторых модулей и содержаший в себе аспекты с информацией о том, как модули связываются в рамках обслуживаемой предметной области;
  • Модуль - максимально изолированный от других модулей набор классов;
  • CRUD - контроллеры и вью файлы, формирующие и сохраняющие данные через модели;
  • Сервис - экземпляр объекта (как правило, синглтон), доступный глобально в системе через yii::$app->serviceName и предоставляющий API для работы с какими-дибо данными;
  • Событие - некоторое событие в модуле, которое потенциально может "заинтересовать" другие модули и само приложение. Подписчики события могут повлиять на логику выполнения программы, в которой это событие произошло. Аналог хуков в WordPress;
  • Модель - AR модель, содержашая геттеры\сеттеры сущности и примитивное API для работы с данными сущности;
  • Виджет - переносимый HTML кода с CSS и JS обработчиками. Аналог компонента в Битриксе;
  • Аспект - коллбек, знающий о всех модулях в системе и реагирующий на события в этих модулях. Как правило, реализуется посредством поведений Yii2. С точки зрения архитектуры приложения скелетона Dvizh, аспект находится на пересечении модулей. Например, при создании заказа через модуль "заказ", этот заказ должен заполняться элементами модуля "корзины" - именно эту работу выполняет аспект;

Модули

Используемые в скелетоне важные модули:

  • dvizh/yii2-shop - CRUD для управления товарами, модификациями, ценами, категориями, производителями, значениями фильтров;
  • dvizh/yii2-filter - CRUD для фильтров на сайте, набор виджетов для быстрого применения фильтов на фронте с помощью Ajax;
  • dvizh/yii2-field - CRUD управления кастомными полями любой AR сущности;
  • dvizh/yii2-gallery - виджет загрузки картинок, виджет вывода картинок в виде галереи;
  • dvizh/yii2-seo - виджет позволяет прикреплять к моделям важные для SEO поля;
  • dvizh/yii2-order - CRUD заказов, набор виджетов для создания заказа и с аналитическими отчетами о заказах за период;
  • dvizh/yii2-cart - сервис и набор виджетов для быстрой разработки функционала корзины на сайте. В корзину можно положить любую модель, имплементируюущую нужный интерфейс;
  • dvizh/yii2-promocode - CRUD для управления скидками на сайте, сервис работы со скидками;
  • dvizh/yii2-certificate - CRUD для управления подарочными сертификатами на сайте, сервис работы со скидками;
  • dektrium/yii2-user - CRUD управления пользователями сайта;
  • dektrium/yii2-rbac - RBAC для сайта.

Установка

Существует два способа установки модулей:

  1. Через клонирование репозитория Git'ом в кастомную папку Yii2 проекта и подключение модуля в секции autoload composer.json файла (+выполните composer update). Не забудьте подключить модуль в секции bootstrap, extensions и modules конфига (по аналогии с модулем от dektrium в данном скелетоне)
  2. Через Composer:
composer create-project --prefer-dist --stability=dev dvizh/shop-skeleton

Выполните git init. Вы создали свою собственную ветку DSS, осталось собрать с помощью виджетов фронт нужного заказчику сайта.

Выполните следующую команду в корне проекта:

php init

Обновите Composer:

composer update

Настройте подключение к БД в следующих файлах:

*/commom/config/main-local.php */console/config/main-local.php

Выполнение миграций модулей:

sh migrate.sh

Если у вас стоит Apache, на этом всё, .htaccess файлы идут в составе скелетона, все запросы пользователя будут направления на /frontend/web. Если Apache нет, то придется еще настроить точки входа для фронтенда (frontend/web) и бекенда (backend/web).

Панель администрирования по умолчанию:

/backend/web/

administrator:10111988

Кастомизация

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

  1. Большинство модулей, сервисов и виджетов имеют настройки для гибкой интеграции в интерфейс и бизнес-процессы типичного проекта. Позже все будет описано в документации;
  2. Через создание дополнительного поля в модуле dvizh/yii2-field. Модули предлагают только CRUD бекенда, фронт пишется своими силами и в нем можно использовать API модуля yii2-field для поиска записей по кастомным полями и для вывода их содержимого;
  3. Через viewPath. Когда нужно добавить дополнительную колонку в GridView и т.д.;
  4. Через controllerMap модуля. Когда нужно добавить поле в модель и модуль dvizh/yii2-field уже не подходит;
  5. Через контрибьюцию. Если вы создали виджет, который может быть потенциально полезен сообществу или создали полезный метод в существующем API - добро пожаловать в контрибьюторы. Сделайте форк и пулл-реквест, тоталитарное руководство рассмотрит предлжение. Если это изменение несет в себе полезный для всех функционал, а не закрытие частного возражения, правка будет принята в центральный репозиторий;
  6. Через отдельную ветку. Самый нежелательный вариант, сигнализирующий о том, что проект перерос MVP. Вы можете формнуть модуль и вести независимую разработку.

Использование

Использовать компоненты модулей нужно согласно документации этих модулей (пока что все в файле README).

shop-skeleton's People

Contributors

deadly299 avatar halumein avatar pistol88 avatar prologgg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shop-skeleton's Issues

Не работает создание страниц (не исправили view)

Подправьте view файлы для раздела Page (PageCreate action)
Сейчас вьюхи видимо от старой версии, там не существующие поля AR не из новой модели.

Например: title, sort, top_menu...

Unknown Property – yii\base\UnknownPropertyException Getting unknown property: common\models\Page::top_menu

Автозаполение фильтров/модификаций

Когда опция является и фильтром и модификацией одновременно, было бы удобно сделать чтобы при добавлении фильтра к товару, эта же модификация добавлялась автоматически, и наоборот

Field 'code' doesn't have a default value

Look at the migrations in your dvizh/yii2-shop

m160521_112619_Mass.php Line 16

$this->createTable('{{%shop_product}}', [
                'id' => Schema::TYPE_PK . "",
                'category_id' => Schema::TYPE_INTEGER . "(10)",
                'producer_id' => Schema::TYPE_INTEGER . "(11)",
                'amount' => Schema::TYPE_INTEGER . "(11)",
                'related_products' => Schema::TYPE_TEXT . " COMMENT 'PHP serialize'",
                'name' => Schema::TYPE_STRING . "(200) NOT NULL",
                'code' => Schema::TYPE_STRING . "(155)",
                //'price' => Schema::TYPE_DECIMAL . "(11, 2)",
                'text' => Schema::TYPE_TEXT . " ",
                'short_text' => Schema::TYPE_STRING . "(255)",
                'is_new' => "enum('yes','no')" . " DEFAULT 'no'",
                'is_popular' => "enum('yes','no')" . " DEFAULT 'no'",
                'is_promo' => "enum('yes','no')" . " DEFAULT 'no'",
                'images' => Schema::TYPE_TEXT . "",
                'available' => "enum('yes','no')" . " DEFAULT 'yes'",
                'sort' => Schema::TYPE_INTEGER . "(11)",
                'slug' => Schema::TYPE_STRING . "(255)",
                'related_ids' => Schema::TYPE_TEXT . "",
                ], $tableOptions);

Look at "'code' => Schema::TYPE_STRING . "(155)","

And Line 65:

$this->createTable('{{%shop_price}}', [
                'id' => Schema::TYPE_PK . "",
                'code' => Schema::TYPE_STRING . "(155) NOT NULL",
                'name' => Schema::TYPE_STRING . "(155) NOT NULL",
                'price' => Schema::TYPE_DECIMAL . "(11, 2)",
                'price_old' => Schema::TYPE_DECIMAL . "(11, 2)",
                'sort' => Schema::TYPE_INTEGER . "(11)",
                'amount' => Schema::TYPE_INTEGER . "(11)",
                'type_id' => Schema::TYPE_INTEGER . "(11)",
                'item_id' => Schema::TYPE_INTEGER . "(11) NOT NULL",
                'available' => "enum('yes','no')" . " DEFAULT 'yes'",
                ], $tableOptions);

Here 'code' is NOT NULL.

And when we create new product without 'code' (in 'shop_product' we have default value NULL), we have error ('shop_price' related to 'shop_product'):

Database Exception – yii\db\Exception
SQLSTATE[HY000]: General error: 1364 Field 'code' doesn't have a default value
The SQL being executed was: INSERT INTO `shop_price` (`item_id`, `price`, `type_id`, `type`, `name`) VALUES (2, '100', 1, 'p', 'Основная цена')

Error Info: Array
(
    [0] => HY000
    [1] => 1364
    [2] => Field 'code' doesn't have a default value
)

Caused by: PDOException
SQLSTATE[HY000]: General error: 1364 Field 'code' doesn't have a default value

Фильтрация по цене и производителю?

yii2-filter не решает эту задачу, т.к. работает с отдельной таблицей, поэтому отпишу сюда. Раз это скелетон приложения неплохо было бы видеть такой нужный функционал из коробки.

Sort field behavior maybe?

Касается всех модулей, где есть поле Sort. Yii поставляется с замечательным поведением:
https://github.com/yii2tech/ar-position

Если используете сортировку по позиции, целесообразно добавить это поведение.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.