Add new comment

OpenCart vs Prestashop: погружение в код

В этой статье пойдет речь об отличии PrestaShop от OpenCart на уровне кода.

 

Замечания:

  1. Я только начинаю изучать PrestaShop, в отличии от OpenCart, который знаю достаточно хорошо, поэтому если где допустил ошибку или неточность - пишите в комментариях.
  2. Описывается функционал из коробки, без дополнительных модулей.
  3. В сравнении участвует OpenCart  2.0 и PrestaShop 1.6
 

MVC в PrestaShop

MVC реализовано намного хуже, чем в OpenCart, сходу и не скажешь что оно там есть, но документация говорит, что есть, поверим :) 
На самом деле:
  • нет четкой структуры, например папка controllers где бы были собраны все контроллеры, папка Models где бы были собраны все модели итд. вместо этого все файлы раскиданы по разным папкам, это существенно усложняет поиск нужного файла.
  • часто можно встретить код, где вперемешку php, SQL запросы и куски html кода, при чем это в самом движке, который должен был бы быть образцом для подражания.
 

Шаблонизатор PrestaShop

PrestaShop использует Smarty шаблонизатор, в отличии от OpenCart, который использует php код в качестве шаблонизатора. 
Мне подход OpenCart нравится больше, потому что: 
  • php это и так язык, который первоначально создавался как шаблонизазатор, потом развился в что-то большее
  • Smarty это дополнительный синтаксис, который нужно изучать 
  • не такая гибкость, как в php
  • это увеличение времени загрузки страницы за счет дополнительного слоя.
Но возможно для дизайнеров более удобным покажется Smarty, так как не нужно углубляться в php код.
 

Расширяемость PrestaShop

Тут PrestaShop значительно превосходит OpenCart, потому что:
  • имеет широко развитую систему хуков, которые покрывают если не весь движок, то значительную его часть, хуки есть даже в шаблонах
  • имеет систему переопределения классов, любой класс можно заменить своим, закинув его в нужную папку, без изменения кода это класса. 
  • можно использовать наследование классов
 
В OpenCart до версии 2.0 вообще не было никакого инструмента расширяемости, был костыль под названием vQmod, который изменял код движка и часто был причиной огромного количества конфликтов. В версии 2.0 уже появились События, но они еще очень слабо развиты и или мало кто пользуется. 
 

Стандарты кодирования PrestaShop

В PrestaShop они более строгие. Единственно с чем не согласен, так это с тем, что не нужны фигурные скобки в условиях с 1 строкой:

if ($condition) 
  return true;
return false;

Как по мне, вообще не удобно и может привести к ошибкам. 
 

Модули в PrestaShop

  • модуль можно унаследовать от другого модуля, например свой платежный модуль от PaymentModule
  • все файлы модуля находятся в 1 папке, что намного удобнее чем как в OpenCart они раскиданы по всем папкам.
  • в настройках модуля можно указывать минимальную версию движка с которой этот модуль работает, этого нету в OpenCart
  • зависимости с другими модулями, нету в OpenCart
  • версию модуля, тоже нету в OpenCart
  • проверка качества модуля. Если создать свой модуль и установить то PrestaShop напишет что модуль "Untrusted" то есть которому нельзя доверять, чтобы получить модуль, которому можно доверять, нужно загрузить его в магазин дополнений (где как я понимаю происходит какая-то проверка качества этого модуля?)
  • много статичных методов классов переменных классов, практически все на них построено:

Tools::isSubmit('submit'.$this->name);
Validate::isGenericName($my_module_name);
Configuration::updateValue('MYMODULE_NAME', $my_module_name);
AdminController::$currentIndex;
Shop::isFeatureActive();
Db::getInstance()->execute();
Context::getContext();
Hook::exec('actionModuleInstallBefore', array('object' => $this));
Cache::clean('Module::isInstalled'.$this->name);

  • форм билдер, отличная штука, которой так не хватает в OpenCart, не нужно каждую форму создавать из голого html, вместо этого создается массив со всеми элементами и передается в помощник, который создает всю форму:

$helper->generateForm($fields_form);

  • есть автообновление модулей  
  • есть свой валидатор кода
  • есть свой баг трекер для модулей
 
Ну и на закуску метод валидации, который случайно нашел в коде :)

public static function isAnything()
{
  return true;
}

 

Заключение 

  • система расширений PrestaShop развита лучше, чем в OpenCart.
  • к-во различных методов для работы в PrestaShop наверное раз в 10 больше, чем в OpenCart. Например класс Tools имеет штук 150 разных статичных методов, класс Module от которого наследуются все модули штук 70 методов итд. практически в каждом классе в разы и даже в десятки раз больше методов чем в аналогичных классах OpenCart. 
  • поэтому могу сказать, что PrestaShop в несколько раз сложнее OpenCart. 
  • наверное поэтому и цены на модули в разы больше.
 
CAPTCHA
Spam protection
Target Image