Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart
  • записей
    6
  • комментариев
    128
  • просмотров
    3 608

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


konorws

25 791 просмотр

 Поделиться

Добрый день.

Немного истории вот где то года три назад я начал свой путь в работе с 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% задач что ставлятса к кодингу доходит редко и економит просто уйму времени. С версткой аналогично создаеш блок и подтягиваеш в нужное место и живеш и радуешся жизни.

 

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


 

 Поделиться

118 комментариев


Рекомендованные комментарии



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

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

https://github.com/copona/copona

 

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

Ссылка на комментарий
В 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();

 

Ссылка на комментарий

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

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

Ссылка на комментарий
12 часов назад, smartcoder сказал:

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

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

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

Ссылка на комментарий
7 минут назад, konorws сказал:

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

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

Ссылка на комментарий
39 минут назад, SergeTkach сказал:

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

 

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

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

 

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

Ссылка на комментарий
3 часа назад, smartcoder сказал:

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

 

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

  • +1 1
Ссылка на комментарий

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

Изменено пользователем EVMedvedev
  • +1 1
Ссылка на комментарий
25 минут назад, SergeTkach сказал:

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

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

 

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

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

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

 

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

 

Ссылка на комментарий
3 минуты назад, smartcoder сказал:

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

 

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

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

Ссылка на комментарий
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 .

Изменено пользователем EVMedvedev
Ссылка на комментарий
1 минуту назад, EVMedvedev сказал:

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

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

 

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

 

Ссылка на комментарий
13 минут назад, smartcoder сказал:

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

 

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

Изменено пользователем EVMedvedev
Ссылка на комментарий
1 минуту назад, smartcoder сказал:

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

 

 

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

Ссылка на комментарий
13 минут назад, smartcoder сказал:

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

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

Ссылка на комментарий
10 минут назад, SergeTkach сказал:

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

 

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

  • +1 1
Ссылка на комментарий
1 минуту назад, EVMedvedev сказал:

 

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

)))

Ссылка на комментарий
24 минуты назад, SergeTkach сказал:

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

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

Ссылка на комментарий
7 часов назад, smartcoder сказал:

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

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

Ссылка на комментарий
В 01.10.2019 в 23:45, EVMedvedev сказал:

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

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

Ссылка на комментарий
4 минуты назад, smartcoder сказал:

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

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

Ссылка на комментарий
9 часов назад, EVMedvedev сказал:

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

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

Ссылка на комментарий
10 часов назад, smartcoder сказал:

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

 

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

Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.