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

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


konorws

27 610 переглядів

Добрый день.

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



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, но много времени отнимает на составление всех этих модулей под каждую версию.

 

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

Надіслати
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 користувачів

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

Important Information

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