Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


 Поделиться

Рекомендованные сообщения

Решил создать бесплатный модуль для 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
Ссылка на комментарий
Поделиться на других сайтах

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

  • +1 4
Ссылка на комментарий
Поделиться на других сайтах


В 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
если не сложно - поддержите. 
Сильно сомневаюсь что это что-то изменить, вероятно Даниель напишет что все разработчики ламеры ничего не понимающие в программировании и только он один самый лучший и все делает правильно и.. закроет это обращение, но я хотя бы буду знать что попытался. 

Ссылка на комментарий
Поделиться на других сайтах

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

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

наивный.

Ссылка на комментарий
Поделиться на других сайтах

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

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

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

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

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

Войти

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

Войти сейчас
 Поделиться

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

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

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

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