Jump to content
  • entries
    6
  • comments
    112
  • views
    1,764

Взгляд на Opencart после Magento и других продвинутых систем

konorws

11,963 views

Добрый день.

Немного истории вот где то года три назад я начал свой путь в работе с Opencart. Скажем так полюбил я Opencart всем сердцем.

Но в один солнечный день мне пришел лист о том что я прошел собеседование в относительно большую IT кампанию. И с того дня мой взгляд на хороший код изменился... 

Вот не так давно меня попросили немного доработать функционал на OC. Мне не сложно в принципе вот я и приступил к работе. Я сидел и говорил себе Боже как я раньше с этим работал.

 

Ну теперь давайте я вам попробую описать то что меня возмутило.

 

1. Удобство разработки и интеграция в IDE

Да когда я работал с Sublime Text все было вроде гуд. Но уже полгода работаю через PhpStorm (PS. Лицензия есть даже на домашнем ПК а не только на работе).

При запуске сразу получаем кучу предупреждений. Давайте взглянем на простой класс http://joxi.ru/52alLM0UGzO1Om

Причин тут две:
1) Отсутствие PhpDoc

2) Упрощенная структура самой CMS

Ну если добавить PHPDoc то большую часть проблем это реши. 
Зачем нужен PHPDoc ??
Я напишу коротко если будет интересно загуглите.

1) Это читабельность кода
2) Автокомплит и информация о методах на лету  http://joxi.ru/brRZkROHQveeLr как не крути сразу видно что и как надо передавать тому или другому методу или то что он возвращает. Или же увидеть ошибку на моменте написания кода а не запуска.

 

2) Это наверное бесит меня на данный момент больше всего. Это дублирования кода.

Хотя Опенкарт и как бы MVC но он нарушает один из принципов MVC потому что с дублирование кода тут просто беда.

Давайте посмотрим на один из контроллеров админ панели. http://joxi.ru/nAyKdw3tXz1oVm 
И это один из множества примеров. который есть в каждом файле я молчу о генерации $url вот пример из файла файла покупателя. Этот кусок кода встереатся в одном файле 9 раз. ????? 
Давайте посчитаем: 9 * ~40 строк = ~360 строчек кода которые можно отрефакторить к 20 максимум и будет один метод для всех файлах а в контролере это будет одна строка вместо 40  

			$url = '';

			if (isset($this->request->get['filter_name'])) {
				$url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_email'])) {
				$url .= '&filter_email=' . urlencode(html_entity_decode($this->request->get['filter_email'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_customer_group_id'])) {
				$url .= '&filter_customer_group_id=' . $this->request->get['filter_customer_group_id'];
			}

			if (isset($this->request->get['filter_status'])) {
				$url .= '&filter_status=' . $this->request->get['filter_status'];
			}

			if (isset($this->request->get['filter_approved'])) {
				$url .= '&filter_approved=' . $this->request->get['filter_approved'];
			}

			if (isset($this->request->get['filter_ip'])) {
				$url .= '&filter_ip=' . $this->request->get['filter_ip'];
			}

			if (isset($this->request->get['filter_date_added'])) {
				$url .= '&filter_date_added=' . $this->request->get['filter_date_added'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

А теперь представте волшебство Если бы можна было бы так

$url = $this->url->saveUrlParametrs('filter_name', 'filter_email', 'filter_customer_group_id');

И подобных ситуаций уйма. Про дублирование верстки я молчу вообще. Чтоб добавить чтото к товару нада єто продлублировать в 100500 файлах.
В мадженте к примеру страница редактирования или список в админке создается с помощью двох XML файлов где просто описиваются конфигурации и єтими конфигами можна решить около 75% задач что ставлятса к кодингу доходит редко и економит просто уйму времени. С версткой аналогично создаеш блок и подтягиваеш в нужное место и живеш и радуешся жизни.

 

Ну думал написать по больше но с временем не сложилось. Может потом добавлю что то.


 



101 Comments


Recommended Comments



13 минут назад, konorws сказал:

Я принимал участие в разработке по молодости в одном проекте модификации ОС там мне понравилось то что люди смогли вынести разшырения в отдельную директорию что бы не засорять проект. Туда бы побольше добрых рук может что то вышло бы.  

https://github.com/copona/copona

 

Вы так и не устранили фундаментальные проблемы ОС, о которых я говорил. Вряд ли ваш проект станет достойной альтернативой ОС. Внедрение Doctrine в ОС и то дало бы большую пользу. Вот только делать это нужно в ядре, а не пристраивать сбоку. Я тоже по-молодости пробовал использовать Doctrine в расширениях для ОС (делал REST API). Но это не то.

Share this comment


Link to comment
В 27.09.2019 в 20:04, vier сказал:

а еще есть один головняк в Опенкарт - это при добавлении кода для Языка.

решаю так - я вообще не пишу такого рода код

Для себя делаю так, отдельно в метод все языки, отдельно ссылки + конфиги какие нужно.

 

private function languages() {
        $this->load->language('module/mymodule');
        return array(
          'heading_title' => $this->language->get('heading_title'),
          //......
        ):
}

private function load_data() {
        $data = array_merge($this->links(),$this->languages(),$this->config());
        return $data;
}

public function index () {
        $data = $this->load_data();

 

Share this comment


Link to comment

В опенкарт никто не придумал еще инструмент для создания модулей?

типа как в laravel командой php artisan make:controller Backend/ArticleController —resource —model=Article

Share this comment


Link to comment
12 часов назад, smartcoder сказал:

В опенкарт никто не придумал еще инструмент для создания модулей?

типа как в laravel командой php artisan make:controller Backend/ArticleController —resource —model=Article

Если честно где то видел года два назад

Share this comment


Link to comment
7 минут назад, konorws сказал:

Если честно где то видел года два назад

Вот и я видел, сейчас уже не найду

  • +1 1

Share this comment


Link to comment
39 минут назад, SergeTkach сказал:

Да такое видел, только слабые возможности там, неплохо но как есть.

 

44 минуты назад, SergeTkach сказал:

Это уже получше, но нет пределу совершенства)

 

Спасибо за инфо

Share this comment


Link to comment
3 часа назад, smartcoder сказал:

Это уже получше, но нет пределу совершенства)

 

Я сейчас делаю программку на phpdesktop (на всякий случай отмечу, что мне класть на мнение умников насчет этого проекта :) ), которая:

- Позволяет заполнить 3 поля и нажать кнопку, чтобы создать скелет нового модуля + папку проекта в проектах + структурированные файлы типа Как-установить.txt и тд

- Позволяет выгрузить его сразу на все обозначенные версии OpenCart на локалке

- По нажатию кнопки позволяет затянуть отредактированный на версии OpenCart 2.3 модуль, в папку проекта и при этом сама адаптирует код под версию 2.1 и 3.0

- Хочется сделать и под 1.5, но тогда там нужно в html писать псевдоконструкции, ведь верстка совсем другая

- Автоматически пакует установочный архив

- Нажатием кнопки генерит новую версию модуля (меняет версию в install.xml), создает новую папочку версии

- Также генерит модуль немного по другому, если указать, что используется IonCube Loader

- А еще хочется сделать генерацию по json. То есть, чтобы не тыкать кнопочки, и заполнять поля, а чтобы в виде json в одном файле можно было указать сразу и код, и поля, и языковые тексты, и потом программа бы на основании этого создавала бы не просто скелет-заготовку, а, по факту, примитивную версию модуля с нужными полями и текстами. А вручную чтобы оставалось прописывать только валидацию полей.

 

В общем, вся тягомотина по идее должна лечь на программу. А то иногда эти перепаковки реально достают. Больше всего в OpenCart меня достает упаковка версий модуля под каждую версию OpenCart.

 

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

 

К сожалению, сейчас сделано только генерация нового проекта. Остальное пока что заморозилось ((

Share this comment


Link to comment

Есть еще такое https://github.com/tkaplar/netbeans-opencart-plugin но видимо активной поддержки проекта нет. Кстати для ОС 3 еще будет актуальна поддержка Twig. Так что в комплекте может быть неплохое подспорье для ОС разработчика.

Edited by EVMedvedev
  • +1 1

Share this comment


Link to comment
25 минут назад, SergeTkach сказал:

В общем, вся тягомотина по идее должна лечь на программу. А то иногда эти перепаковки реально достают. Больше всего в OpenCart меня достает упаковка версий модуля под каждую версию OpenCart.

Ну вот тоже не очень нравится под каждую версию практически одни и те же изменения вностить.

 

25 минут назад, SergeTkach сказал:

К сожалению, сейчас сделано только генерация нового проекта. Остальное пока что заморозилось

Времени нет, согласен.

 

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

 

1511666477_2019-10-0111_39_50.thumb.png.6558ef97c1bdd466e187dd9af3a493de.png

Share this comment


Link to comment
3 минуты назад, smartcoder сказал:

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

 

Вообще, было бы неплохо, чтобы можно было просто говорить в микрофон, что хочешь сделать, и комп бы понимал и писал это сам :))

Работал так с одним человеком: говорил, что писать, он все набирал (учился делать модули). Мне понравилось ))) Вот бы так программа какая-то умела, и при этом не стоила бы кучу бабла...

Share this comment


Link to comment
36 минут назад, SergeTkach сказал:

 

Я сейчас делаю программку на phpdesktop (на всякий случай отмечу, что мне класть на мнение умников насчет этого проекта :) ), которая:

- Позволяет заполнить 3 поля и нажать кнопку, чтобы создать скелет нового модуля + папку проекта в проектах + структурированные файлы типа Как-установить.txt и тд

- Позволяет выгрузить его сразу на все обозначенные версии OpenCart на локалке

- По нажатию кнопки позволяет затянуть отредактированный на версии OpenCart 2.3 модуль, в папку проекта и при этом сама адаптирует код под версию 2.1 и 3.0

- Хочется сделать и под 1.5, но тогда там нужно в html писать псевдоконструкции, ведь верстка совсем другая

- Автоматически пакует установочный архив

- Нажатием кнопки генерит новую версию модуля (меняет версию в install.xml), создает новую папочку версии

- Также генерит модуль немного по другому, если указать, что используется IonCube Loader

- А еще хочется сделать генерацию по json. То есть, чтобы не тыкать кнопочки, и заполнять поля, а чтобы в виде json в одном файле можно было указать сразу и код, и поля, и языковые тексты, и потом программа бы на основании этого создавала бы не просто скелет-заготовку, а, по факту, примитивную версию модуля с нужными полями и текстами. А вручную чтобы оставалось прописывать только валидацию полей.

 

В общем, вся тягомотина по идее должна лечь на программу. А то иногда эти перепаковки реально достают. Больше всего в OpenCart меня достает упаковка версий модуля под каждую версию OpenCart.

 

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

 

К сожалению, сейчас сделано только генерация нового проекта. Остальное пока что заморозилось ((

 

Можно упаковать все это в Symfony Console пакет. В Мадженто так сделано. Там генерация модулей реализована как одна из консольных комманд. Правда я не знаю насколько часто этим пользуются разработчики. Каждый день новые модули пачками думаю ни кто не создает. А для собственных нужд можно написать генератор каркаса а потом использовать deployer.phar .

Edited by EVMedvedev

Share this comment


Link to comment
1 минуту назад, EVMedvedev сказал:

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

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

 

4 часа назад, SergeTkach сказал:

 

Share this comment


Link to comment
13 минут назад, smartcoder сказал:

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

 

А вот для этого и надо было бы перевести ОС на Doctrine. Так все просто. Базовые сущности переопределяешь override(ом) и и запускаешь консольную команду Doctrine для обновления dababase:schema. А генерацию классов обновления сущностей можно было бы генерировать из админки.

Edited by EVMedvedev

Share this comment


Link to comment
1 минуту назад, smartcoder сказал:

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

 

 

Ну при разработке - да, в какой то степени. У каждого свой техпроцесс, а значит и настройки среды.

Share this comment


Link to comment
13 минут назад, smartcoder сказал:

Так понял что каждый для себя и каждый за себя.

Вообще, я видел такие отзывы об OpenCart (где владельцы магазинов обсуждают), что разработчики в OpenCart все очень жадные, злые и недружелюбные ))

Share this comment


Link to comment
10 минут назад, SergeTkach сказал:

Вообще, я видел такие отзывы об OpenCart (где владельцы магазинов обсуждают), что разработчики в OpenCart все очень жадные, злые и недружелюбные ))

 

Очень часто так пишут горе заказчики, которые не в состоянии правильно поставить задачи и организовать процесс их исполнения. А когда все идет не так как им хотелось бы, то они не признаются себе в том, что они бездарные управленцы, а валят вину на всех окружающих. У таких не только разработчики сайтов жулики, но и сеошники придурки, и хостпровайдеры уроды недоделанные, и покупатели безмозглые жмоты, и власти сволочи, один он "гений непознанный". Это профессиональные лузеры от интернет-торговли.

  • +1 1

Share this comment


Link to comment
1 минуту назад, EVMedvedev сказал:

 

Очень часто так пишут горе заказчики, которые не в состоянии правильно поставить задачи и организовать процесс их исполнения.

)))

Share this comment


Link to comment
24 минуты назад, SergeTkach сказал:

Вообще, я видел такие отзывы об OpenCart (где владельцы магазинов обсуждают), что разработчики в OpenCart все очень жадные, злые и недружелюбные ))

Опенкарт же бесплатный, и модули и услуги тоже значит должны быть такими.

Share this comment


Link to comment
7 часов назад, smartcoder сказал:

Опенкарт же бесплатный, и модули и услуги тоже значит должны быть такими.

Ну вы можете писать бесплатно, а остальные ни кому ни чего не должны. Более того, проблема ОС именно в том, что модули для него дешевые. Просто людям надо есть, а если на модулях они заработать не смогут, то и поддерживать не будут. Вот и получите кучу мусора неработающего. Для Мадженто люди пишут модули и продают из на несколько тысяч рублей, да еще за поддержку деньги берут отдельно. Зато от таких поставщиком модули качественные. Та же Мадженто с поддержкой от разработчика предлагается по цене в 15 000 евро. И заказчиков крупных у них хватает. А поскольку проект хорошо монетизируется, то и инвесторов богаты в нем хватает, которые вкладывают в развитие движка миллионы баксов. Отсюда и бешеный прогресс.  А ОС по-прежнему больше похож на студенческую курсовую работу 20-летней давности.

Share this comment


Link to comment
В 01.10.2019 в 23:45, EVMedvedev сказал:

Ну вы можете писать бесплатно, а остальные ни кому ни чего не должны. 

Это был сарказм, в следующий раз, когда будет шутка или сарказм, я подпишу вам, что это шутка или сарказм (это тоже сарказм, подписывать не буду)

Share this comment


Link to comment
4 минуты назад, smartcoder сказал:

Это был сарказм, в следующий раз, когда будет шутка или сарказм, я подпишу вам, что это шутка или сарказм (это тоже сарказм, подписывать не буду)

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

Share this comment


Link to comment
9 часов назад, EVMedvedev сказал:

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

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

Share this comment


Link to comment
10 часов назад, smartcoder сказал:

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

 

Это у вас проблемы с восприятием, если вы увидели в моих словах колкость. В следующий раз специально для вас буду писать, что я серьезен как никогда :-) . И предлагаю заканчивать этот бесполезный флуд не по делу. Напомню тема топика - сравнение ОС и Мадженто с точки зрения разработчика, сопровождающего и развивающего сложный проект.

Share this comment


Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.