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

LiveStreet уже давно позиционируется разработчиками, как полноценный фреймворк, а не просто блого-социальный движок. Сегодня я хочу поделиться с Вами опытом разработки на LS интернет-магазина мебели (посмотреть можно тут)
Не так давно мне на доработку попал этот магазин. Сайту к этому моменту уже исполнилось 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 комментариев

avatar
зачет, скрин админки в студию :)
avatar
Присоединяюсь к словам. Ls отличный фреймворк избавляющий от написания велосипедов.
avatar
Круто! Молодец!
avatar
Классно, сам делал нечто подобное. Вся проблема у меня была действительно в админке. Начал с того, что отделил шаблоны, потом писал ядро js, так как там много однотипных выводов через ajax (каталог, категории, заказы, юзеры) со своими шаблонами и фильтрами. Хотелось применить весь функционал существующий, не дописывая ни одной строчки в ядро (чтобы было легко обновлять — оставил родных юзеров, комменты и механизм голосовалки). Плюс необходимо было сохранить существующую плагинизацию. К сожалению из-за перфекционизма (начал лепить BackBone со всякими динамическими хренями) и поставленных себе рамок, о которых я писал выше, проект так и не закончил до конца.

Хотя наработки довольно хорошие. Для удобства были написаны методы ajax драг энд дроп сортировки в админке категорий, товаров, картинок для товара. При чем для категорий поддерживается сортировка в дереве на лету. Само формирование дерева было написано почти с нуля. Использован вариант одного запроса и одного прохода по его результату, то есть без рекурсий и вложенных циклов. Это позволило отображать товары не только текущей категории, но всех дочерних, вне зависимости от вложенности.
Также поддерживается мультивалютность, мультистоимость. Написаны модули отношений доставки и оплаты.
Если надо могу выложить в скриншотах свой вариант.

Мне очень инересна эта тема, поэтому вопросов тоже много.
Использовали ли вы имеющиеся модули (User, Topic, Comment, ...) чтобы не плодить похожие модули?
Интересует, как вы реализовывали механизм фасетного и умного фильтра по характеристикам, если таковой имеется?
Да… чуть не забыл, как вы реализовали наследование админского экшена. Ведь писать эвенты для каждого редактирования, добавления и удаления чего либо в одном файле сущий ад? Хорошо было бы разбить на ActionAdminCategory.class.php, ActionAdminProduct.class.php, ActionAdminOrder.class.php, ActionAdminCurrency.class.php…
avatar
Да… чуть не забыл, как вы реализовали наследование админского экшена. Ведь писать эвенты для каждого редактирования, добавления и удаления чего либо в одном файле сущий ад?

Да, забыл про это написать, напрягает при работе, что нельзя экшены объединить во что-то аналогичное модулю в ZF.
Использовали ли вы имеющиеся модули (User, Topic, Comment, ...) чтобы не плодить похожие модули?

Только User, но сильно модифицированный, т.к. в LS деление только на пользователя и администратора, что не очень гибко, к тому же нет конфигов ACL (я имею ввиду удобного механизма, чтобы задать доступ роль — экшен/евент)

Что касается админки и прочего, я стараюсь не лепить свое там, где существуют пакетные решения, теже деревья, драг н дропы и прочее.

Для более сложных магазинов со сложной фильтрацией, продуманным поиском и прочим у меня есть решение на ZF. Опять же конструктор из своих и чужик наработок. Тут же такого развернутого функционала не требовалось.
avatar
может для админки применть api из aceadmin для ls. Там есть возможность подключать и дополнительные экшены и хелперы.
avatar
Просто супер. Надеюсь и доход хороший…
avatar
прямо даже и не знаю, зачем там LS? )
гонка за компактностью, чтобы не тащить за небольшим сайтом 10-15 меговый фреймворк?
avatar
мож я чего-то не понимаю в этом мире
но нахуя?
avatar
Зачем тащить весь функционал из ZF или Symfony.
Я пробывал реализации на легкой Kohana. Но туда надо подключать шаблонизатор, кучу модулей, прописывать кеширование на запросы. Тут же все это есть почти без лишнего: нативный ORM с автокешированием, простая структура шаблонов с использованием блоков и возможностью давать правила на их появление, оптимизация статики, если надо, и конечно, плагинизация.
avatar
мне очень понравилось
а я бы купил за разумные деньги нечто похожее (если что в личку)
  • Rega
  • 0
avatar
Ну неплохо смотрится.
Правда не понял как работает — если нажать «Купить», и пока страница еще грузится нажать еще раз — добавляется аж два товара. Если удалять — удаляются все похожие… Больше не просматривал.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.