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

Разработка модулей под OpenCart 4 или почему Даниель так ненавидит разработчиков?


Recommended Posts

Решил создать бесплатный модуль для OpenCart 4 но столкнулся с целой кучей нюансов, которые превращают разработку в сплошной ад.. 
 

1. В 4.0.0.0 можно создать архив модуля с подпапками и он работает, а в 4.0.1.1 уже не работает
2. В 4.0.0.0 вы можете добавить новое событие следующим образом:
$this->model_setting_event->addEvent($code,$description,$trigger,$action,$status,$sort_order);
но в 4.0.1.0 уже используется массив для событий, что конечно лучше, на зачем же такие изменения делать в минорных версиях!? 
$this->model_setting_event->addEvent($event);
3. до 4.0.2.0 маршруты были с "|" разделителем: 'marketplace/event|save'
но с 4.0.2.0 это уже ".": 'marketplace/event.save' (см. https://github.com/opencart/opencart/issues/11594)
4. 4.0.0.0 использует функцию utf8_strlen()
но 4.0.1.0 использует \Opencart\System\Helper\Utf8\strlen

И так далее. И вам нужно либо создать отдельную версию модуля для каждой версии OpenCart (и поддерживать их все в будущем), либо добавить кучу конструкций
if (version_compare(VERSION...
в свой код.
И это только малая часть, то, что с чем я сам столкнулся непосредственно. 
И это при том что вышло всего-то пару минорных версий. Еще даже не версия 4.1.. Что будет в версии 4.3?.. Почему нельзя все подобные изменения которые ломают совместимость модулей внести сразу в главную версию, а потом уже не трогать до новой главной версии? Или если так хочеться изменить то сделать это так, чтобы не поломать совместимость? Можно же в методе addEvent прописать логику, что если там первій параметр это массив то брать данные оттуда, а если строка  то брать данные из аргументов. И все, все работает и никому не нужно ничего изменять. Тоже самое с разделителем в маршруте итд. Но нет, нужно добавить целую кучу мелких изменений которые полностью ломают совместимость всех модулей и то что работает на 4.0.0 уже не будет работать на 4.0.1, а то, что работает на 4.0.1 уже не  будет на 4.0.2.. Пц..

+ документации нету вообще никакой, все приходится искать самостоятельно в коде.
+ модификаторов в 4 версии нету, убрали полностью, а События покрывают только малую часть функционала и.. выкручивайся как хочешь, уже есть vqmod для 4 версии опеканрта.. добавили его еще в 1 версии движка, чтобы в версии 2 заменить на модификаторы, а в версии 4 отказаться от модификаторов и вернуться обратно к vqmod?.. 

У меня есть какое-то скрытое чувство, что Даниель люто ненавидит всех разработчиков OpenCart...

  • +1 9
Надіслати
Поділитися на інших сайтах

Ничего не обычного, 4.0.0 была и есть сырой, выпустили ее чисто для того, чтобы люди потыкали по находили баги и предложили свои видения решения + у него есть сроки и надо хоть что-то да показать.

 

Это аналог 2.0.x, там тоже в разными X были свои нюансы, в одной сборке ocmod {файлы}.tpl понимал, в другой нет и т.д.

 

Так что ждите когда будет стабильная версия, хотя..а какой смысл?)
Если все равно все будут топить за 2.3:D

 

  

12.10.2022 в 15:28, sv2109 сказал:

+ документации нету вообще никакой, все приходится искать самостоятельно в коде.

 

А она раньше была?:-D

 

  

12.10.2022 в 15:28, sv2109 сказал:

У меня есть какое-то скрытое чувство, что Даниель люто ненавидит всех разработчиков OpenCart...

 

За столько то лет можно было уже и привыкнуть, что каждая версия отличается от другой

  • +1 2
Надіслати
Поділитися на інших сайтах

12.10.2022 в 15:28, sv2109 сказал:

Тоже самое с разделителем в маршруте итд.

| - некорректный символ в url

Надіслати
Поділитися на інших сайтах

12.10.2022 в 16:02, Bn174uk сказал:

За столько то лет можно было уже и привыкнуть, что каждая версия отличается от другой

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

И вопрос не в том, что 4.0.0.0 сырая, я сегодня установил 4.0.1.1 и она такая же сырая, куча ошибок при установке и при работе, например если папка движка  для расширений имеет не правильные права доступа до движок вообще нигде об этом не сообщит но установить модуль у вас не получится, мало того, даже ошибки никакой вы не получите. И только если открыть в браузере инструмент разработчика и посмотреть ответ сервера то там можно будет увидеть ошибку.. но сколько обычных пользователей это сделает? да почти вообще никто. В то же время 4.0.1.1 висит на оф. сайте как последняя рекомендуемая версия для загрузки.. 
При том, что в версии 4.0.2 опять добавили новые изменения, которые опять ломают совместимость модулей.. 

 

  • +1 3
Надіслати
Поділитися на інших сайтах

Мене дуже потішило "зручне рішення" Данили про формування коду доповнення, з якого за результатом формується посилання редагування параметрів модуля...

$code = basename($file, '.ocmod.zip');

 

Тобто файл доповнення тепер не назвеш як хочеш, тепер тільки як треба) А не простіше було брати з того ж install.json? Все інше з нього, а code з імені файлу... феноменально)

  • +1 3
Надіслати
Поділитися на інших сайтах

12.10.2022 в 16:34, PaulKravchenko сказал:

Мене дуже потішило "зручне рішення" Данили про формування коду доповнення, з якого за результатом формується посилання редагування параметрів модуля...

$code = basename($file, '.ocmod.zip');

 

Тобто файл доповнення тепер не назвеш як хочеш, тепер тільки як треба) А не простіше було брати з того ж install.json? Все інше з нього, а code з імені файлу... феноменально)

в 4.0.0.0 була підтримка підпапок, тобто можна було файл назвати наприклад sv2109_event_manager_oc4.0_v1.0.ocmod.zip 
а вже всередині мати папку sv2109_event_manager (і це буде кодом) з файлом install.json. Але в 4.0.1 це забрали, тепер файл install.json має лажати виключно в корені а назва файлу буде автоматично кодом. 

  • +1 1
Надіслати
Поділитися на інших сайтах

В 12.10.2022 в 16:42, sv2109 сказав:

а назва файлу буде автоматично кодом

так це і бісить) мій файл - як хочу називаю, а ядру віддаю папку, прописую код в install.json, якось більш.. ну очевидно мабуть

Просто трохи прикурив коли вперше побачив на своєму тестовому модулі коли архів обізвав як хотілось))

  • +1 1
Надіслати
Поділитися на інших сайтах

12.10.2022 в 14:28, sv2109 сказал:

либо добавить кучу конструкций

Скрытый текст
	private $name_arhive = 'My module';
	private $code_event = 'mymodule';
	private $code = '0000000000000';
	private $mame = 'мой модуль';
	private $version = '1.0';
	private $author = 'BuslikDrev';
	private $link = '';
	private $version_oc = 2.3;
	private $paths = array();

	public function __construct($foo) {
		parent::__construct($foo);
		if (method_exists($this->language, 'set')) {
			$this->language->set('mymodule_version', $this->version);
		}
		if (version_compare(VERSION, '4.0.0', '>=')) {
			$this->version_oc = 4;
			$this->paths = array(
				'controller' => array(
					'mymodule' => 'extension/mymodule/module/mymodule',
					'mymodule_event' => 'extension/mymodule/event/mymodule',
					'module' => 'extension/module',
					'extension' => 'marketplace/extension',
					'modification' => 'marketplace/modification',
				),
				'language' => array(
					'mymodule' => 'extension/mymodule/module/mymodule',
				),
				'model' => array(
					'mymodule' => 'extension/mymodule/module/mymodule',
					'mymodule_path' => 'model_extension_mymodule_module_mymodule',
					'module' => 'setting/module',
					'module_path' => 'model_setting_module',
					'extension' => 'setting/extension',
					'extension_path' => 'model_setting_extension',
					'modification' => 'setting/modification',
					'modification_path' => 'model_setting_modification',
					'event' => 'setting/event',
					'event_path' => 'model_setting_event',
				),
				'view' => array(
					'mymodule' => 'extension/mymodule/admin/view/template/module/mymodule',
				),
				'token' => 'user_token=' . $this->session->data['user_token'],
				'slash' => '|'
			);
		} elseif (version_compare(VERSION, '3.0.0', '>=')) {
			$this->version_oc = 3;
			$this->paths = array(
				'controller' => array(
					'mymodule' => 'extension/module/mymodule',
					'mymodule_event' => 'extension/mymodule/event/mymodule',
					'module' => 'extension/extension/module',
					'extension' => 'marketplace/extension',
					'modification' => 'marketplace/modification',
				),
				'language' => array(
					'mymodule' => 'extension/module/mymodule',
				),
				'model' => array(
					'mymodule' => 'extension/module/mymodule',
					'mymodule_path' => 'model_extension_module_mymodule',
					'module' => 'setting/module',
					'module_path' => 'model_setting_module',
					'extension' => 'setting/extension',
					'extension_path' => 'model_setting_extension',
					'modification' => 'setting/modification',
					'modification_path' => 'model_setting_modification',
					'event' => 'setting/event',
					'event_path' => 'model_setting_event',
				),
				'view' => array(
					'mymodule' => 'extension/module/mymodule',
				),
				'token' => 'user_token=' . $this->session->data['user_token'],
				'slash' => '/'
			);
		} elseif (version_compare(VERSION, '2.3.0', '>=')) {
			$this->version_oc = 2.3;
			$this->paths = array(
				'controller' => array(
					'mymodule' => 'extension/module/mymodule',
					'mymodule_event' => 'extension/mymodule/event/mymodule',
					'module' => 'extension/extension/module',
					'extension' => 'extension/extension',
					'modification' => 'extension/modification',
				),
				'language' => array(
					'mymodule' => 'extension/module/mymodule',
				),
				'model' => array(
					'mymodule' => 'extension/module/mymodule',
					'mymodule_path' => 'model_extension_module_mymodule',
					'module' => 'extension/module',
					'module_path' => 'model_extension_module',
					'extension' => 'extension/extension',
					'extension_path' => 'model_extension_extension',
					'modification' => 'extension/modification',
					'modification_path' => 'model_extension_modification',
					'event' => 'extension/event',
					'event_path' => 'model_extension_event',
				),
				'view' => array(
					'mymodule' => 'extension/module/mymodule',
				),
				'token' => 'token=' . $this->session->data['token'],
				'slash' => '/'
			);
		} else {
			$this->version_oc = 2;
			$this->paths = array(
				'controller' => array(
					'mymodule' => 'module/mymodule',
					'mymodule_event' => 'extension/mymodule/event/mymodule',
					'module' => 'extension/module',
					'extension' => 'extension/module',
					'modification' => 'extension/modification',
				),
				'language' => array(
					'mymodule' => 'module/mymodule',
				),
				'model' => array(
					'mymodule' => 'module/mymodule',
					'mymodule_path' => 'model_module_mymodule',
					'module' => 'extension/module',
					'module_path' => 'model_extension_module',
					'extension' => 'extension/extension',
					'extension_path' => 'model_extension_extension',
					'modification' => 'extension/modification',
					'modification_path' => 'model_extension_modification',
					'event' => 'extension/event',
					'event_path' => 'model_extension_event',
				),
				'view' => array(
					'mymodule' => 'module/mymodule.tpl',
				),
				'token' => 'token=' . $this->session->data['token'],
				'slash' => '/'
			);
		}
	}

 

 

Надіслати
Поділитися на інших сайтах

$this->url->link учтен?

префикс для config

ps. Если это расширение, то лучше, мне так кажется, в other
Модуль - это то что можно добавить через layoauts

  • +1 1
Надіслати
Поділитися на інших сайтах

12.10.2022 в 16:02, Bn174uk сказал:

Если все равно все будут топить за 2.3:D

 

12.10.2022 в 16:43, Etegro сказал:

2.3 по моему мнению самая адекватная, без этих ненужных твигов, редакторов этих самых твигов и прочей гадости.

+

  • +1 1
Надіслати
Поділитися на інших сайтах

12.10.2022 в 16:43, Etegro сказал:

2.3 по моему мнению самая адекватная, без этих ненужных твигов, редакторов этих самых твигов и прочей гадости.

Я тоже согласен, хотя и 3.0 нормальная. Выше нет смысла лезть. 

12.10.2022 в 16:28, sv2109 сказал:

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

Новые версии, я так считаю, должны поддерживать низшие. У людей куча купленных модулей, которые не работают на высших версиях. Если суть новшества в изменении какого-то пути - это тупость! - новая версия должна дать улучшения, как-то, безопасность, упрощение работы и пр.

Надіслати
Поділитися на інших сайтах

13.10.2022 в 00:00, esculapra сказал:

Новые версии, я так считаю, должны поддерживать низшие. У людей куча купленных модулей, которые не работают на высших версиях. Если суть новшества в изменении какого-то пути - это тупость! - новая версия должна дать улучшения, как-то, безопасность, упрощение работы и пр

это идеальный вариант, но почти нереальный, не может версия 4 поддерживать модуль написанный под напр. 1.5 когда еще не было ни твига ни бутстрапа ни событий + файловая структура была совсем другой итд. Или если тянуть в версию 4 совместимость со всеми предыдущими то код движка будет настолько громоздким и запутанным что это будет наверное еще хуже, чем то что есть сейчас.. да и работать все это будет в разы медленнее из-за огромной кучи очень старого кода. 
Поэтому у других движках есть правило - совместимыми должны быть модули на уровне главной, мажорной версии движка, напр. если модуль написан для версии движка 2.0 то он должен работать и на 2.1.х.х и на 2.2.х.х и на 2.3.х.х  и на 2.х.х.х. Все большие изменения, которые ломают совместимость при этом накапливаются, обкатываются на каких-то дев. версиях и добавляются уже в версию 3.0 (весь старый и ненужный код при этом выбрасывается за ненадобностью), после чего ничего нового и глобального уже не добавляется до версии 4 и так далее. 
И это очень правильный подход. Разработчик написал модуль для 2.0 и все, он уверен на 100% что этот модуль будет работать на всех подверсиях двойки сколько бы их не было. И пользователь уверен что если он купит модуль под 2.0 то сможет им пользоваться даже на версии 2.99 если она когда-то выйдет. Ну вот почему же так не сделать?! Все же от этого только выиграют и разработчики и пользователи и даже сам движок.  
А не так что модуль написанный для 4.0.0.0 уже не работает на 4.0.1.0 и это даже не минорная версия, потому что минорная версия это 4.1, а это по логике вообще патч версия для очень мелких изменений и исправлений различных багов, которая по всей логике вообще никак не должна влиять на совместимость.. 

  • +1 1
Надіслати
Поділитися на інших сайтах

В 13.10.2022 в 12:13, sv2109 сказав:

 версии движка 2.0 то он должен работать и на 2.1.х.х и на 2.2.х.х и на 2.3.х.х  и на 2.х.х.х.

Тоді в opencart була б зараз версія 7 )))
Але я згоден то не діло коли навіть не мінорна версія (*.0.0.*) не сумісна з минулою.
Про ocmod я краще промовчу... "ну навіщо!". Якби подіями можна було змінювати всю логіку, то ще можна було пережити. Але ж при такій архітектурі  прибирати ocmod це  божевілля (ось як розробникам змінювати наприклад запити в моделях... риторичне питання)

 

Надіслати
Поділитися на інших сайтах

Короче, создал только что новый issue в оф. репозитории
https://github.com/opencart/opencart/issues/11800
если не сложно - поддержите. 
Сильно сомневаюсь что это что-то изменить, вероятно Даниель напишет что все разработчики ламеры ничего не понимающие в программировании и только он один самый лучший и все делает правильно и.. закроет это обращение, но я хотя бы буду знать что попытался. 

  • +1 1
Надіслати
Поділитися на інших сайтах

14.10.2022 в 11:34, sv2109 сказал:

Короче, создал только что новый issue в оф. репозитории
https://github.com/opencart/opencart/issues/11800
если не сложно - поддержите. 
Сильно сомневаюсь что это что-то изменить, вероятно Даниель напишет что все разработчики ламеры ничего не понимающие в программировании и только он один самый лучший и все делает правильно и.. закроет это обращение, но я хотя бы буду знать что попытался. 

наивный.

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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