Система электронной коммерции PrestaShop

Просмотров: 10699Комментарии: 7
CMS

PrestaShop это электронный магазин, однако может работать в формате каталога (с версии 1.4, которая вот-вот зарелизится, вчера вышел RC5). Система бесплатная, open source, разрабатывается и поддерживается организацией Prestashop SA. Сообщается более чем о 50 тысячах инсталляций по всему миру, система заняла первое место в номинации Open Source E-Commerce Applications 2010. Хотя мой опыт работы с ней невелик, возможно, кому-нибудь будет полезно нижеследующее краткое резюме (касается версии 1.4).


Достоинства

Конкретный функционал перечислять не буду, лишь наиболее характерное

  • Открытый исходный код. Конечно, хорошо документированная система с некривым API может быть закрытой и не вызывать неудобств, однако это идеальная ситуация. В реальности иногда очень хочется взглянуть на исходный код. Тут это возможно.
  • Разрабатывает не одиночка, а группа (в отличие от той же OpenCart)
  • Обширное комьюнити до некоторой степени может компенсировать слабую документацию
  • Быстрая реакция разработчиков. Ответ на мое сообщение о баге пришел вместе с фиксом в течение часа, кажется. Возможна платная поддержка.
  • Большое количество модулей. Часть из них платная (как правило достаточно сложные), в том числе разработки Prestashop SA, но можно найти много простых бесплатных. Платежные системы, сервисы доставки -- не могу назвать сверхизобилием (как у osCommerce), но на первое и второе время должно хватить с лихвой.
  • "Из коробки" есть практически все, что нужно для быстрого старта стандартного магазина/каталога + рудиментарные возможности CMS (опять-таки, в этом преимущество перед OpenCart).
  • Среднепростой администраторский интерфейс, доступный логическому пониманию, роли, права доступа в комплекте.
  • Удобный интерфейс для перевода, интернационализация и локализация, поддержка разных валют.
  • С версии 1.4 встроенное кэширование.
  • Простая инсталяция и апдэйт (в пределах старшего релиза, то есть 1.4.х).

Недостатки

  • Скорость работы. Получше Magento, но все равно медленно. Особенно чувствуется при разработке на локальном не сильно мощном компьютере. OpenCart субъективно загружается "мгновенно", PrestaShop тупит секунд 5. Причина, в общем, ясна -- обширный функционал. Куча джойнов в запросах к БД, подзапросы, вся петрушка. Кэширование, конечно, облегчает, так что жить можно даже на шаред-хостинге.
  • Ограниченная расширяемость. Классы и контроллеры можно расширять, делать свои шаблоны и т.п., но осадок остается.
  • Почти нет документации. Не смертельно, но несколько замедляет разработку.
  • Хотелось бы видеть более стройную архитектуру и стандарт программирования.
  • Хочу подчеркнуть, что PrestaShop это именно электронный магазин/каталог. Если нужна CMS или портал с функциями магазина -- ошиблись адресом. Да, есть в наличии (платные) модули новостей, форума и проч., но оптимальнее, на мой взгляд, использовать в данной нише проприетарную HostCMS или даже Drupal+Ubercart.


    Кратко об архитектуре

    Как ни странно, но PrestaShop построен по MVC-паттерну. Модели представляют собой объекты классов, наследуемых от ObjectModel. Все они лежат в WEBROOT/classes/, фактически, любая сущность в системе - от таба до корзины - реализуется через модель. Общей для всех моделей является функциональность CRUD + интернационализация и валидация полей. Несколько огорчает статичность многих методов моделей, что свидетельствует о формальном их использовании -- то есть, для задания области видимости методов.

    Контроллер отвечает за обработку запроса. Существует множество контроллеров для разных страниц системы, все они лежат в папке WEBROOT/controllers/. Контроллеры страниц наследуются от класса FrontController, рабочий цикл в общем после всех инициализаций прямолинеен и прост:

    public function run()
    {
    	$this->preProcess();
    	$this->setMedia();
    	$this->displayHeader();
    	$this->process();
    	$this->displayContent();
    	$this->displayFooter();
    }

    В качестве View выступают шаблоны Smarty, которые хранятся в WEBROOT/themes/название_темы, правда, это относится, главным образом, к фронтэнду, с бэкэкндом ситуация хуже -- вся темизация сводится к замене таблицы стилей и картинок, часть разметки вообще лежит в классах модулей. Впрочем, в админке все немного сложнее, чем в фронтэнде.

    Существует несколько способов расширения и модификации функционала системы. Это переопределение классов моделей и контроллеров (новые классы помещаются в WEBROOT/override/classes/ , WEBROOT/override/controllers/ соответственно), а также создание модулей (шаблоны модулей также можно переопределять -- работая с копией в папке WEBROOT/themes/ваша-тема/modules/). Различных модулей на сегодняшний день написано достаточно, правда, многие требуют доработки под конкретные нужды заказчика.

    Каким образом осуществляется взаимодействие модулей с ядром? Для этого имеется система хуков. Хук в PrestaShop это метод класса модуля, который выполняется на определенном этапе работы системы. Вызов хука ядром осуществляется посредством метода

    Module::hookExec($hook_name, $hookArgs = array(), $id_module = NULL)

    Архитектуру модуля в PrestaShop планирую пояснить в следующей статье на наглдном примере.

    Комментариев: 7 RSS

    1 Konstantin Fedorov 27-02-2011 14:19

    Спасибо за статью, prestashop безусловно очень приятная система.

    С одной стороны обладает богатой функциональностью и хорошим набором модулей, но к сожалению пока не решены некоторые банальные вещи: нет добавления и редактирования заказов, нет нормального редактирования инфы в профиле покупателя (нельзя например посмотреть его телефон).

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

    Модулями можно управлять только из вкладки модули, если без извращений с кодом - что плохо для клиента-менеджера, нельзя ограничить ему доступ "чисто".

    В последней версии появилась из коробки оформление заказа на одной странице и установка тем вместе с модулями-зависимостями. Это очень хорошо.

    Но одним из определяющих факторов в пользу системы является её достаточная логичность и немонструозность при действительно богатом функционале.

    Ещё раз спасибо, с радостью почитаю продолжение!

    2 Александр Купреев 27-02-2011 16:34

    Спасибо за комментарий, действительно, ситуация именно такая. С одной стороны, достаточно богатый функционал и относительно простой код, с другой -- отсутствие, казалось бы, очевидных и простых вещей. Возможность добавления заказа менеджером простым модулем мне реализовать не удалось -- пришлось переопределять некоторые классы, но хорошо, что хоть не править ядро smile

    3 Alesss 23-04-2011 04:20

    Отличная статья жду следующих открытий=)

    Например хотелось бы услышать по smarty и оптимизацию.

    Prestashop первая CMS выбирал специально под магазин.

    И НЕ ОШИБСЯ. Хотелось бы отметить широкие возможности дизайна.

    Лучше только у Flesh.

    Опыт работы в Prestashop 3 месяца

    4 Alesss 21-05-2011 16:49

    Не давно перевел книгу руководство для prestashop и полностью руссифицировал prestashop с 1.3 по 1.4 Все желающие могут посмотреть тут. http://ishop-vl.ru

    5 Комментатор 27 08-07-2011 15:09

    Спасибо за старания. С Престой знаком 1,5 года. Но в силу (все таки её тормознутости) перехожу на OpenCart. Дело конечно еще и в том, что его функционала мне вполне достаточно, а на престу все накручиваешь и накручиваешь и в результате тормоз. Несколько жалко, привык к ней уже.

    7 Saerty 31-08-2013 15:19

    2 октября выходит книга prestashop руководство для начинающих посмотреть содержание и оформить предзаказ можно уже сейчас http://prestapro.ru/book-prestashop/rukovodstvo-po-prestashop-15-na-russkom/.

    Оставьте комментарий!


    Используйте нормальные имена.

         

      

    Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

    MaxSiteAuth. Войти через loginza

    (обязательно)