LS как фреймворк - Meb4you.ru

Не так давно мне на доработку попал этот магазин. Сайту к этому моменту уже исполнилось 4 года, поэтому ожидать чего-то хорошего от «движка» не приходилось. Основой там был index.php файл, огромная кишка на несколько тысяч строк и модный когда-то switch() в качестве «роутера».
Использовать готовые движки интернет магазинов не хотелось, т.к. за долгие годы поиска я так и не нашел ни одного, который устроил бы меня по всем параметрам. И я решил собрать простой MVC каркас из своих наработок, но после нескольких часов за кодом я понял, что результат, который у меня получается мне сильно что-то напоминает, покопавшись немного в памяти я вспомнил про LiveStreet! Именно на его структуру был так похож мой велосипед. И вот тогда я решил пойти по пути меньшего сопротивления и продолжил писать уже под LS.
Первым делом вырезал весь стандартный социальный функционал, т.к. ни один модуль мне не пригодился. А вот файлы движка на месте почти все, конечно я вносил в них свои доработки, подключал библиотеки, с которыми привык работать, но в целом LS более чем узнаваем. (хочу заметить, что есть у меня еще проект, более стандартный для нашего любимого движка, но переделок в структуре и модулях гораздо больше, чем пришлось сделать тут). Cache, Mailer, SimpleImage, Profiler все на месте.
К тому времени, как я начал работу как раз вышла версия 0,5, укомплектованная Smarty3 и с обновлениями других библиотек и ORM.
Последний я порезал до 'Get' и 'Save' запросов, выкинув все, по моему мнению лишнее для этого проекта.
А так же перенес парсер ORM из модуля в Mapper, т.к. постоянно ловил себя на том, что по привычке называю методы модуля так же как и методы маппера, из-за чего не раз по несколько долгих минут втыкал на падающий Apache.
За ненадобность вырезал весь механизм Хуков и Плагинов, а заодно в экшенах стал получать модули через Engine::GetModule('Catalog'),
чтобы моя драгоценная IDE перестала ругаться на такие конструкции:

Во время работы над сайтом я активно использовал систему блоков(что даже вылилось в статью о ней), если посмотреть на сайт, то левые блоки, включая меню, нижние текстовые и новостные блоки, а так же корзина в шапке — все это реализовано с помощью этой системы.
В общем работать было легко и приятно, может быть предоставится возможность использовать LS и в других проектах.
12 комментариев
Хотя наработки довольно хорошие. Для удобства были написаны методы ajax драг энд дроп сортировки в админке категорий, товаров, картинок для товара. При чем для категорий поддерживается сортировка в дереве на лету. Само формирование дерева было написано почти с нуля. Использован вариант одного запроса и одного прохода по его результату, то есть без рекурсий и вложенных циклов. Это позволило отображать товары не только текущей категории, но всех дочерних, вне зависимости от вложенности.
Также поддерживается мультивалютность, мультистоимость. Написаны модули отношений доставки и оплаты.
Если надо могу выложить в скриншотах свой вариант.
Мне очень инересна эта тема, поэтому вопросов тоже много.
Использовали ли вы имеющиеся модули (User, Topic, Comment, ...) чтобы не плодить похожие модули?
Интересует, как вы реализовывали механизм фасетного и умного фильтра по характеристикам, если таковой имеется?
Да… чуть не забыл, как вы реализовали наследование админского экшена. Ведь писать эвенты для каждого редактирования, добавления и удаления чего либо в одном файле сущий ад? Хорошо было бы разбить на ActionAdminCategory.class.php, ActionAdminProduct.class.php, ActionAdminOrder.class.php, ActionAdminCurrency.class.php…
Да, забыл про это написать, напрягает при работе, что нельзя экшены объединить во что-то аналогичное модулю в ZF.
Только User, но сильно модифицированный, т.к. в LS деление только на пользователя и администратора, что не очень гибко, к тому же нет конфигов ACL (я имею ввиду удобного механизма, чтобы задать доступ роль — экшен/евент)
Что касается админки и прочего, я стараюсь не лепить свое там, где существуют пакетные решения, теже деревья, драг н дропы и прочее.
Для более сложных магазинов со сложной фильтрацией, продуманным поиском и прочим у меня есть решение на ZF. Опять же конструктор из своих и чужик наработок. Тут же такого развернутого функционала не требовалось.
гонка за компактностью, чтобы не тащить за небольшим сайтом 10-15 меговый фреймворк?
но нахуя?
Я пробывал реализации на легкой Kohana. Но туда надо подключать шаблонизатор, кучу модулей, прописывать кеширование на запросы. Тут же все это есть почти без лишнего: нативный ORM с автокешированием, простая структура шаблонов с использованием блоков и возможностью давать правила на их появление, оптимизация статики, если надо, и конечно, плагинизация.
а я бы купил за разумные деньги нечто похожее (если что в личку)
Правда не понял как работает — если нажать «Купить», и пока страница еще грузится нажать еще раз — добавляется аж два товара. Если удалять — удаляются все похожие… Больше не просматривал.