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

Четверг, 24 февраля 2011 г.
Рубрика: CMS
Метки: |
Просмотров: 4204
Подписаться на комментарии по RSS

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 планирую пояснить в следующей статье на наглдном примере.

    twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

    Комментариев: 6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    6. Выложил видео уроки по Престе, может кому поможет.

      www.coffeedog.ru

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

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

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

    Авторизация: MaxSiteAuth. Войти через loginza

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