Страница 1 из 1

Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.01.31, 12:18
proctoleha
Всем доброго времени суток!

Почти с содроганием сердца и волнением :), представляю сообществу свой первый публичный продукт multiSiteCMS (Заготовка для простой CMS на основе Yii 2 Basic Template)

Это CMS для ПРОСТЫХ сайтов! Можно выстраивать дерево статей, продуктов.

Можно отслеживать заказы на сайте онлайн и жестко их контролировать. Если посетитель заказал, например, Продукт А в кол-ве 5шт., и закрыл браузер, то администратор сайта сможет это отследить, удалить заказ, при этом 5 шт. продукта А будут возвращены на склад (в БД). Заказ получает статус Висит, если клиент не обращался к нему более двух часов. Также у заказа могут быть статусы: Создается, Не подтвержден, Подтвержден, Отправлен.

Или еще фича: если вы пишете в админке статью, и вставили картинку, потом её уменьшили, то при сохранении статьи код

Код: Выделить всё

<img src="/uploads/article/7/1/5a7185247495c.jpg" style="width: 246px; height: 184px; float: left; margin: 0px 10px 10px 0px;" width="246" height="184" alt="">
преобразуется в

Код: Выделить всё

<a href="/uploads/article/7/1/5a7185247495c.jpg" data-fancybox="gallery"><img src="/uploads/article/7/1/thumb/5a7185247495c.jpg" alt="" style="float: left; margin: 0px 10px 10px 0px;"></a>
Т.е. картинка оборачивается ссылкой с data-fancybox="gallery", что позволяет комфортно просматривать её на фронтенде, при подключении fancybox
Также, если при редактировании, автор удалит картинку из статьи, то при сохранении она также будет удалена из файловой системы.

Работа с представленной CMS требует определенного уровня вхождения: разработчик должен понимать для чего нужно разделение на слои (даже в рамках простого web приложения), и что такое DI, и с чем его едят. Респект Дм. Елисееву за его уроки!

У меня получилось так, что даже в рамках простой CMS, в "классической" модели yii2 (AR + работа с формами) могло вылезти несколько сценариев, несколько After(Before)Save(Delete). Если к этому добавить еще и if-ы в контроллерах, то получалось печально в плане поддержки, и расширения функционала даже для меня, как автора. Открываешь проект через пару месяцев и начинаешь концы искать, что откуда растет.

Сейчас вся логика только в сервисах. Любой сервис или выкидывает исключение, или возвращает результат. Контроллеры работают только с сервисами. В них сплошные try-catch. Соответственно, мне поддерживать всё это безобразие стало легче - вся логика в одном месте, не надо лазать по проекту.

Несколько сумбурно, но как-то так.

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

гитхаб (там же ссылка на демо): https://github.com/ale10257/multiSiteCMS

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.01.31, 14:40
noLogicOnlyWar
Потыкал пару минут, без обид но сильно вы в концепциях плаваете, нагородили уж очень много всего.
Чтобы не быть голословным, фактически первый файл который открыл (multiSiteCMS/core/user/services/UserAdminService.php):

Код: Выделить всё

    public function __construct(ManagerInterface $manager)
    {
        $this->_user = new User();
        $this->_authManager = $manager;
        $this->_userRepository = new UserRepository();
    }
строка 1 - сервис хранит состояние
строка 1,2,3 - именование свойств не соответствует psr
строка 3 - захардкорена зависимость на репозиторий

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.01.31, 16:28
zabachok
Вы для добавления нового "подсайта" копируете исходный код в новую папку?

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.01.31, 16:56
proctoleha
zabachok писал(а): 2018.01.31, 16:28 Вы для добавления нового "подсайта" копируете исходный код в новую папку?
Да, по др. не знаю как. Скопировали, дальше правим конфиг, представления, контроллеры.

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.01.31, 16:59
proctoleha
noLogicOnlyWar писал(а): 2018.01.31, 14:40 Потыкал пару минут, без обид но сильно вы в концепциях плаваете, нагородили уж очень много всего.
Чтобы не быть голословным, фактически первый файл который открыл (multiSiteCMS/core/user/services/UserAdminService.php):

Код: Выделить всё

    public function __construct(ManagerInterface $manager)
    {
        $this->_user = new User();
        $this->_authManager = $manager;
        $this->_userRepository = new UserRepository();
    }
строка 1 - сервис хранит состояние
строка 1,2,3 - именование свойств не соответствует psr
строка 3 - захардкорена зависимость на репозиторий
А на что обижаться? Для того, и выложил.

Но, тем не менее:
строка 1,2,3 - именование свойств не соответствует psr
https://github.com/yiisoft/yii2/blob/ma ... properties
Private variables should be named like $_varName.
Что не так?
строка 3 - захардкорена зависимость на репозиторий
И? что не так? Да, все сервисы в приложении работают с репозиторями и жестко на них завязаны. Связка репозиторий + formModel + сервис - это Модель, которая согласно идеологии MVS принимает, и обрабатывает данные от контроллера. И все три сущности зависят друг от друга.

Да и в целом всё ядро приложения жестко завязано на yii2. И что? Если писать независимые, слабосвязанные сущности, то точно огород получится.

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.02.01, 10:26
Nex-Otaku
Ну я в процессе написания каких-то сложных компонентов и модулей, а также изучения форума и теории (SOLID и т.д.) пришёл к выводу, что все создания объектов ("new MyClass") нужно куда-то в одно место вынести, а в прочих местах просто указывать требуемые зависимости.

Потому что, если распихать везде эти "new", то при любом изменении в конструкторе нужно обновлять код во всех местах, где объект создаётся. Не оптимально.

Поэтому думаю вынести создание "постоянно плодящихся" объектов в фабрики, остальные в какой-нибудь Bootsrtap.

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

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.02.01, 11:04
ElisDN
proctoleha писал(а): 2018.01.31, 16:59 Но, тем не менее:
строка 1,2,3 - именование свойств не соответствует psr
Private variables should be named like $_varName.
Что не так?
Это не PSR. Это костыль, тянущийся из PHP4 и используемый в Yii для разделения имён публичных и приватных полей. В вашем коде все поля приватные и такой префикс не нужен.
proctoleha писал(а): 2018.01.31, 16:59 И? что не так? Да, все сервисы в приложении работают с репозиторями и жестко на них завязаны.
Принимайте в конструктор $manager и $repository.

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.02.01, 13:19
noLogicOnlyWar
И? что не так?
Добавлю к комментарию выше, попробуйте написать юнит тест на этот сервис.

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.02.02, 11:26
rodion_zlobin
Что такое чанк?)

Re: Заготовка для простой CMS на основе Yii 2 Basic Template

Добавлено: 2018.02.02, 12:05
proctoleha
rodion_zlobin писал(а): 2018.02.02, 11:26 Что такое чанк?)
Чанк - это фигня, если честно, но фигня полезная. Название очень условное. Мы в визиги редакторе что-то пишем, форматируем, сохраняем в БД HTML код (чанк).

У чанка есть id, alias, и тем, или иным способом мы вытаскиваем чанк из базы, и вставляем этот кусок кода в нужное место (места). Например: https://internatedu.ru/ - название ОУ - это чанк, который прописан завучем, которая админит этот сайт. Что они там пишут мне уже всё равно, главное дать им такую возможность.