четверг, 17 октября 2013 г.

ShopCMS smarty, layout, блоки и include

Опять попался, прелюбопытный пациент.

Движок http://shopcms.ru. Как мы можем прочесть на их сайте:

Скрипт магазина ShopCMS представляет собой одну из передовых разработок и имеет немало уникальных возможностей.

Любой, кто заглянет "под капот", сразу же убедится, что это чистая правда.
Это, без сомнения,  передовая разработка.

Там много всего, хватит на десяток статей, но поговорим сегодня только про одну деталь. Про шаблоны.

Используется там шаблонизатор smarty, который сам по себе неплохой инструмент если б конечно пхп-ками в руки не попадался.

Итак, вы программист или верстальщик.
Дизайнеры разработали и принесли вам дизайн страниц.
Вы видите, что там есть, ну например, три типа страниц.

Нормальный человек, создает три шаблона (layout) , в который включает блоки, кодит и шаблоны и блоки и живет счастливо.

Довольно очевидное решение.

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

Как вы поступите?

Смешной вопрос, какие такие layout, какая такая логика. Разделение? не смешите.
У нас же есть {if} в шаблонах. Этого хватит.
Бесчеловечно по отношению к верстальщикам? К другим кодерам? Ну мы тут знаете не в институт благородных девиц.

Даже, этого было бы достаточно, что бы поставить диагноз. Но ребята на этом не остановились.

 В какой то момент они устали писать вложенные условия в шаблоне.
И в голову им пришел дьявольский план.

Зачем исключать блок, ну например категорий, в странице посвященной справке, ну да он там не нужен, но это же долго , исключать его, вставлять новый, давайте просто в блок с названием block_category.tpl из контролера загрузим то содержимое которое нам нужно, ну например наши телефоны, и блок телефонов будет не нужен.

Видимо внутри их коллектива эти точки зрения на шаблонизатор борются друг с другом, поэтому и того и другого примерно поровну.

Оценили?

Вернемся на два абзаца выше. Я там написал слово контроллер.
Ну мы же в 21 веке, мы понимаем, что шаблоны отдельно, данные отдельно, логика отдельно. MVC во имя веков.

Что же служит контроллером у этих ребят.
Думаю вы угадали.
Один единственный файл в 473 строки php кода в стиле "поток сознания".

В нем мы крутецким образом парсим uri

   if (isset($_GET["news"]) || isset($_POST["news"])) $news = 1;
  if (isset($_GET["quick_register"])) $quick_register = 1;
  if (isset($_GET["order2_shipping_quick"])) $order2_shipping_quick = 1;

Потом if-ами с вложенностью over 100500 определяем какие данные в какие блоки загрузить, и загружаем. Ну и потом вызываем smarty.

Почему так мало? Всего 473 loc ?
Ну, я уверен, там было в разы больше, может в порядок, но однажды они видимо устали, и вынесли случайным образом некоторые функции в в отдельные  файлы.

Причем, в файле product_functions есть например функции function sendSMSMessage, ну не будем придираться.

Мы же понимаем, какая разница. С их то способом подключения.

И подключили их конечно через:
 $arr=glob('inc/*');
foreach .... include (... )
Какой такой autoload,  какие классы, какое разделение.
Какой бы вы запрос к сайту не сделали, вся его функциональность будет include , весь его php интерпретатор распарсит.


"ShopCMS и Вы будете приятно удивлены быстрой и надёжной работе Ваших магазинов."