Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Разработка модулей под 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 8
Link to comment
Share on other sites

Ничего не обычного, 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 1
Link to comment
Share on other sites

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

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

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

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

 

  • +1 2
Link to comment
Share on other sites

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

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

 

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

  • +1 2
Link to comment
Share on other sites

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 має лажати виключно в корені а назва файлу буде автоматично кодом. 

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

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' => '/'
			);
		}
	}

 

 

Link to comment
Share on other sites

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

префикс для config

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

  • +1 1
Link to comment
Share on other sites

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

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

 

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

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

+

  • +1 1
Link to comment
Share on other sites

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

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

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

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

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

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

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

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

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

наивный.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.