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

Выкладываем свои наработки
Ответить
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

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

Сообщение 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
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
noLogicOnlyWar
Сообщения: 83
Зарегистрирован: 2017.07.04, 20:53

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

Сообщение 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 - захардкорена зависимость на репозиторий
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

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

Сообщение zabachok »

Вы для добавления нового "подсайта" копируете исходный код в новую папку?
2b||!2b Just read the instructions
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

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

Сообщение proctoleha »

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

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

Сообщение 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. И что? Если писать независимые, слабосвязанные сущности, то точно огород получится.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

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

Сообщение Nex-Otaku »

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

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

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

Правда, ещё ни в одном модуле такую систему нормально не построил - заказчику всегда некогда, вот времени и не хватало. Кстати, буду рад, если кто хорошим примером поделится, или статьёй.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение 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.
noLogicOnlyWar
Сообщения: 83
Зарегистрирован: 2017.07.04, 20:53

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

Сообщение noLogicOnlyWar »

И? что не так?
Добавлю к комментарию выше, попробуйте написать юнит тест на этот сервис.
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

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

Сообщение proctoleha »

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

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