Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...
  • записів
    6
  • коментарів
    128
  • переглядів
    4 428

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


konorws

28 221 перегляд

Добрый день.

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


Recommended Comments



  В 30.09.2019 в 08:58, konorws сказав:

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

https://github.com/copona/copona

Expand  

 

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

Надіслати
  В 27.09.2019 в 17:04, vier сказав:

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

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

Expand  

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

 

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

Надіслати
  В 30.09.2019 в 19:27, smartcoder сказав:

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

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

Expand  

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

Надіслати
  В 01.10.2019 в 07:56, SergeTkach сказав:
Expand  

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

 

  В 01.10.2019 в 07:56, SergeTkach сказав:
Expand  

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

 

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

Надіслати
  В 01.10.2019 в 08:42, smartcoder сказав:

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

Expand  

 

Я сейчас делаю программку на 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
Надіслати
  В 01.10.2019 в 11:43, SergeTkach сказав:

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

Expand  

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

 

  В 01.10.2019 в 11:43, SergeTkach сказав:

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

Expand  

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

 

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

 

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

Надіслати
  В 01.10.2019 в 12:11, smartcoder сказав:

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

Expand  

 

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

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

Надіслати
  В 01.10.2019 в 11:43, SergeTkach сказав:

 

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

Expand  

 

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

Змінено користувачем EVMedvedev
Надіслати
  В 01.10.2019 в 12:19, EVMedvedev сказав:

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

Expand  

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

 

  В 01.10.2019 в 07:56, SergeTkach сказав:
Expand  

 

Надіслати
  В 01.10.2019 в 12:11, smartcoder сказав:

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

Expand  

 

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

Змінено користувачем EVMedvedev
Надіслати
  В 01.10.2019 в 12:23, smartcoder сказав:

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

 

 

Expand  

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

Надіслати
  В 01.10.2019 в 12:23, smartcoder сказав:

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

Expand  

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

Надіслати
  В 01.10.2019 в 12:35, SergeTkach сказав:

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

Expand  

 

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

  • +1 1
Надіслати
  В 01.10.2019 в 12:35, SergeTkach сказав:

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

Expand  

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

Надіслати
  В 01.10.2019 в 13:00, smartcoder сказав:

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

Expand  

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

Надіслати
  В 01.10.2019 в 20:45, EVMedvedev сказав:

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

Expand  

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

Надіслати
  В 03.10.2019 в 13:05, smartcoder сказав:

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

Expand  

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

Надіслати
  В 03.10.2019 в 13:10, EVMedvedev сказав:

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

Expand  

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

Надіслати
  В 03.10.2019 в 22:30, smartcoder сказав:

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

Expand  

 

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

Надіслати

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.