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

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


konorws

27 114 перегляди

Добрый день.

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



18 часов назад, Dotrox сказал:

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

Лапша и повторы кода - это его фирменный стиль, а все, кто не понимает "гениальности" этого стиля, для него - идиоты.

Вот и так  идем что в разных версиях все что меняется это размещение файлов с одной директории в другую. 

Надіслати

Собрал демо сайт на Magento 1 из бесплатных модулей и налил туда 30 000 товаров. Хостинг самый простой за 200 руб. в месяц. Можно из любопытства прогнать его по gtmetrix, pageSpeedInsight :-) . Мадженто тоже неплохой движок и в определенных условиях может составить конкуренцию ОС. Попробую в тех же условиях собрать подобное на ОС но некоторые модули, которые нужны для такого же сайта для ОС предлагаются на платной основе.

Змінено користувачем EVMedvedev
Надіслати

Добавлю свои 5 копеек.

 

На днях я испытывал муки морального выбора, стоит ли мне продолжать работать с OpenCart или срочно переучиваться пока не поздно... Аргументов за и против - огромная масса. Я остановился на том, чтобы до конца 20-го года все же останусь с OpenCart. Почему? А вот почему!

 

1. Я не работаю в корпорации, где мне платят просто за то, чтобы я пришел на работу и выучил их любимую систему, с которой они работают, потому что им так проще всего нанимать новых людей в компанию, которые, в свою очередь, приходят, пишут код, оставляют права на него компании, и потом уходят. Но их результат работы смогу подхватить следующие программисты в цепочке текучки. Я фрилансер, зарегистрированный как ЧП. И как бы нужно платить ежемесячные взносы. Значит надо иметь прогнозированную прибыль. Значит нельзя просто "психануть" и бросить то, что уже работает для меня.

 

2. Клиенты. Может кто-то и платит по $40-50 в час за услуги программиста. Но, не все могут это позволить. Так же как и купить выделенный сервер. Есть к примеру начинающий дизайнер одежды, у которого бюджет на все-все $500. Скажите ему, что он только за хостинг будет платить по $100 в месяц, а не то, чтобы еще и разработчику. И что, скажите пожалуйста, этот дизайнер не должен пытаться быть дизайнером, потому что у него нет бюджета на крутой и "правильный" магазин?

 

3. Бизнес - это бизнес. Он всегда меняется. А еще реже он выживает. И, если через 5 лет OpenCart превращается в боль, то это очень круто!

 

Если бизнес прожил 5 лет, то он входит в тот небольшой процент фирм, которые могут себе позволить переделать все с нуля, и даже купить себе сервер и нанять сисадмина. А если не могут, то значит проблема в самом бизнесе. И тут программисты вообще ни при чем. Если бизнесмену не жалко слить $50 за 1 публикацию в "модном" журнале (которая вообще не приносит результат), но при этом его жаба давит сделать так, чтобы от каждой продажи через сайт откладывать 10%-15% на развитие сайта (в том числе и на полную переделку при накоплении нужной суммы), то скажите, кто в этом виноват - программист или бизнесмен? Давайте не путать пределы своей ответственности.

 

P.S.

На днях мне попалась интересная статья "10 признаков того, что программирование не для вас". Один из критериев, что программирование не для Вас, если Вы ищете “правильное” решение, не понимая, что есть спектр “хороших” и “плохих” решений

 

"Если для вас цель программирования — это поиск единственно правильного решения, а не нескольких подходящих решений, вы никогда не станете успешным программистом.

 

В компьютерной науке всегда важно находить компромисс. Какой вариант решения лучше в данных условиях? Всё зависит от условий и ваших целей. Если для вас программирование — это тест, в котором есть только верные и неверные ответы, вы не видите общей картины и не используете творческий потенциал. Любое решение может быть “правильным”, если вы можете обосновать его в данных условиях.

 

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

 

Полный текст статьи: https://medium.com/nuances-of-programming/10-признаков-того-что-программирование-не-для-вас-a5aa1c167604

 

 

P.P.S

Лично для себя я сейчас понемногу делаю библиотеку StdM.

 

Так код:

if (isset($this->request->post['modcode_status'])) {
	$data['modcode_status'] = $this->request->post['modcode_status'];
} else {
	$data['modcode_status'] = $this->config->get('modcode_status');
}

Превращается в:

 

$data['status'] = $this->stdm->field('status');

 

---

Код:

// Breadcrumbs
$data['breadcrumbs'] = array();

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('text_home'),
	'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
);

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('text_extension'),
	'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)
);

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('heading_title'),
	'href' => $this->url->link('extension/module/sticker', 'token=' . $this->session->data['token'], true)
);

Превращается в:

$data['breadcrumbs'] = $this->stdm->breadcrumbs();

 

Конечно, для этого нужно добавить конструктор:

 

// Follow Std Module Library
function __construct($registry) {
	parent::__construct($registry);

  	// StdM Follow		
  	$this->load->library('stdm');
  	$this->stdm = new StdM($registry);
  	$this->stdm->code('modcode');
  	$this->stdm->type('module_monolithic');
}

 

  • +1 1
Надіслати
7 часов назад, SergeTkach сказал:

Код:

Спойлер

 



// Breadcrumbs
$data['breadcrumbs'] = array();

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('text_home'),
	'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
);

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('text_extension'),
	'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)
);

$data['breadcrumbs'][] = array(
	'text' => $this->language->get('heading_title'),
	'href' => $this->url->link('extension/module/sticker', 'token=' . $this->session->data['token'], true)
);

Превращается в:



$data['breadcrumbs'] = $this->stdm->breadcrumbs();

 

Конечно, для этого нужно добавить конструктор:

 



// Follow Std Module Library
function __construct($registry) {
	parent::__construct($registry);

  	// StdM Follow		
  	$this->load->library('stdm');
  	$this->stdm = new StdM($registry);
  	$this->stdm->code('modcode');
  	$this->stdm->type('module_monolithic');
}

 

 

 

 

 

Странная библиотека. Какая у нее зона ответственности? Каша какая-то получается...

Змінено користувачем n3bo
Надіслати
7 часов назад, SergeTkach сказал:

2. Клиенты. Может кто-то и платит по $40-50 в час за услуги программиста. Но, не все могут это позволить.

Тут вопрос роста. Вы всю жизнь можете делать и сидеть в рамках OC и вас все будет устраивать. Если это так тогда это ваш выбор. 
Я также начинал фрилансером и работал в корпорации где учил разные системы (TYPO3, Magento) мой взгляд менялся со временем. 
Сейчас я сам возглавляю свою небольшую компанию и выбор системы важен я работаю как с OC так из Magento но хорошый программист тот кто не просто может сделать на CMS которую знает а может предложить то что действительно нужно клиенту. 

Есть масса не больших магазинов и их тоже нужно делать. Но я лучше буду вести 3 больших ИМ которые платят (30-50$) и работаю в долгую но требую больше знаний чем 120 Маленьких. 

Вы не увидите на OC например SearchEngine или Solr вы останетесь в тех же SQL которые мало то что написанные через одно место так дуюлируются сто раз. 

P,S  Главное в работе что бы она была в удовольствие и тогда она будет прекрастно получатся. (Я не вижу много интересного в копировании кода в десятки мест). Я лучше буду создавать более сложные приложения но себе в удовольствие.

Надіслати
28 минут назад, n3bo сказал:

Какая у нее зона ответственности?

Ее зона ответственности - превратить работу со стандартным набором повторяющегося кода к минимальным усилиям.

 

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

Правда, надо отделить:

- Расширения, которые хранят данные в таблице `oc_setting`

- Расширения, которые хранят данные в таблице `modules`

 

Для этого идет

$this->stdm->type('module_monolithic');

Внутри библиотеки (кстати, в которой для каждой версии системы подключается свой файл), с помощью $registry получаются те же самые данные, которые доступны в контроллере модуля. Я про $this->request->post и вообще все другое.

 

К примеру

### FIELDS
public function field($key, $default_value = '') {
	switch ($this->module_type) {
		case 'module_with_blocks':
			return $this->fieldModWithBlocks($key, $default_value);
			break;
		case 'module_monolithic':
			return $this->fieldModMonolithic($key, $default_value);
			break;
		default:
			break;
	}
	
	return false;
}

private function fieldModWithBlocks($key, $default_value) {
	if (!$key) {
		return false;
	}		

	if (isset($this->request->post[$key])) {
		return $this->request->post[$key];
	} elseif ($this->module_info[$key]) {
		return $this->module_info[$key];
	} else {
		return $default_value;
	}

	return false;
}

public function fieldModMonolithic($key, $default_value) {
	if (!$key) {
		return false;
	}

	if (false === strpos($key, $this->extension_code . '_')) {
		$key = $this->extension_code . '_' . $key;
	}

	if (isset($this->request->post[$key])) {
		return $this->request->post[$key];
	} elseif ($this->config->get($key)) {
		return $this->config->get($key);
	} else {
		return $default_value;
	}

	return false;
}

 

 

Надіслати
27 минут назад, konorws сказал:

Я лучше буду создавать более сложные приложения но себе в удовольствие.

 

Вы были фрилансером, и были почти что влюблены в OpenCart. Работаете в корпоративном русле - полюбили другое. Оно логично, потому что это то, чем Вы живете.

 

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

 

Это работает в тех условиях, в которых работает. Оно себе медленно плывет. Но точно не тонет. И точно не исчезнет с рынка в ближайшие пару лет.

 

А если начать искать лучшее, то:

PHP - не лучший язык программирования

Apache - не лучший сервер

MySQL - не лучшая база данных

Клавиатура qwerty - не лучшая клавиатура с точки зрения удобства печатания

Хрущевки - не лучший вариант жилья

Жареная картошка - не лучший вариант еды

Шашлыки под водочку - не лучший вариант отдыха

"Тягание" железа в спортзале - не лучший вариант заботы о здоровье

 

Как вообще жить в этом мире, где все не лучшее, а такое, как исторически сложилось?.. (это типа ирония, если что)

  • +1 1
Надіслати
10 минут назад, SergeTkach сказал:

Как вообще жить в этом мире, где все не лучшее, а такое, как исторически сложилось?.. (это типа ирония, если что)

Идеала нигде нет. Но у всего есть свои плюсы. Просто нужно знать где что применить. Очень много людей закапывают себя в яму сознательно (не хотят видеть иных вариантов) а потом уже немогут или не видят почему остались не счем или почему кто то зарабатывает больше.

Наведу пример мне недавно передали большой сложны проект (связан с банкингом) так как предыдущий разработчик не справлялся. (Он был не плохим разработчиком он делал и поддерживал эту систему 5 лет) но у него была проблема что он не шел дальше. Он работал по ФТП. Не использовал композер на интеграцию новой библиотеки или нового сервиса шло много времени. И он не мог подключить себе помочь так как даже понятия не имел что такое ГИТ.  Я общался с ним долго и он не мог понять почему его работа их перестала устраивать а ответ был просто Она перестала быть эффективной с ростом проекта нужно расти и самому. И главное что вопрос не в том что Опенкарт или маджента вопрос в том что лучше для конкретного примера. Есть клиенты которым я советую "найдите фрилансера который вам сделает сайт за 500$ и на чните работу а когда вы вирастите и будете иметь понимание что к чему и зачем вернетесь ко мне и мы продолжим разговор" И поверьте люди возвращаются уже с совсем дургими взглядами. Не всем нужна Маджента но и не всем подходит опенкарт.  А вариантов еще много. Например  sylius. 
 

 

11 минут назад, SergeTkach сказал:

Это работает в тех условиях, в которых работает. Оно себе медленно плывет. Но точно не тонет. И точно не исчезнет с рынка в ближайшие пару лет.

Да тут я с вами не буду спорить.  Но суть моего сообщения была в том что бы Расти если видеть один OC так ты будеш закрыт в нем и не видеть другого. К сожелению многие так и делают. 

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

 

Надіслати
10 часов назад, SergeTkach сказал:

Добавлю свои 5 копеек.

и я добавлю, и поддержу Вас за правильный подход.

 

3 часа назад, n3bo сказал:

Каша какая-то получается...

никакой каши нет.

я например, не использую дополнительную библиотеку, а использую готовые методы по такому же принципу как и @SergeTkach

например для Крошки универсальный код под все версии Опенкарта:

private function breadcrumbs($shabl = null, $sort_fitl = null) {
	$shabl = ($shabl) ? '/'.$shabl : null;
	$this->data['breadcrumbs'] = array();
	//v.1
	if($this->what_versi < 2000) {
		$home = 'home';
	}
	//v.2
	else {
		$home = 'dashboard';
	}
	$this->data['breadcrumbs'][] = array(
		'text'      => $this->data['text_home']
		,'href'      => $this->url->link('common/'.$home, $this->token_token, $this->ssl)
	);
	$this->data['breadcrumbs'][] = array(
		'text'  => $this->data['text_module']
		,'href' => $this->url->link($this->mod_ext, $this->token_token.$this->type_mod, $this->ssl)
	);
	$this->data['breadcrumbs'][] = array(
		'text' => $this->data['heading_title']
		,'href' => $this->url->link($this->versi_put.'/'.$this->name_mod.$shabl, $this->token_token.$sort_fitl, $this->ssl)
	);
}

потом его вставляю, где мне нужно в метод, например в myMetod() и где еще он используется: index() и т.д.

public function myMetod() {
	..........
	..........
	$this->breadcrumbs('link');
	.........
}

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

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

................
$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
................
................

а использую метод:

public function getLangModule($langs = array()) {
	foreach($langs as $k => $v) {
		$this->data[$k] = $v;
	}
}

//и потом для всех в конструкторе его вывожу, либо в отдельном методе.
public function __construct($registry) {
	parent::__construct($registry);
	...............
	$this->getLangModule($this->load->language('module/my_module'));
	...............
	...............
}

и потом в tpl-файле вывожу

<div><?php echo $text_manufacturer; ?></div>

 

Надіслати
2 часа назад, konorws сказал:

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

 

Я хочу уточнить: Вы пошли на фирму и там у Вас был наставник, который объяснял, что да как в Magento. Самостоятельно и автономно сколько бы времени ушло, чтобы разобраться? Просто интересно. Интересуюсь с позиции, что это популярная поддерживаемая система, которую, возможно, придётся изучить))

Надіслати
12 часов назад, SergeTkach сказал:

Apache - не лучший сервер

Поэтому люди используют nginx + php-fpm.

 

12 часов назад, SergeTkach сказал:

MySQL - не лучшая база данных

Поэтому люди используют PostgreSQL или вообще нереляционные типа MongoDB.

 

12 часов назад, SergeTkach сказал:

PHP - не лучший язык программирования

Поэтому он активно развивается, чего вы не замечаете зажимая себя в рамках ОК, кодовая база которого устарела уже на десяток лет.

 

 

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

У osCommerce было несколько популярных форков, отличительной особенностью которых было то, что за функцию отправки почты нужно было доплачивать.

В конечном счёте этот мегапопулярный движок умер. Разработчики даже не выпустили третью версию, над которой начинали работу. Хотя, вроде, кто-то ещё пытается это дерьмище людям впаривать.

 

Мораль: движки либо развиваются, либо умирают. У ОК с развитием пока не очень: костяк его архитектуры не менялся со времён копирования его с CodeIgniter 13 лет назад.

Кстати, в те времена CodeIgniter был самым популярным фреймворком. И где он сейчас?

  • +1 1
Надіслати
17 часов назад, SergeTkach сказал:

 

Я хочу уточнить: Вы пошли на фирму и там у Вас был наставник, который объяснял, что да как в Magento. Самостоятельно и автономно сколько бы времени ушло, чтобы разобраться? Просто интересно. Интересуюсь с позиции, что это популярная поддерживаемая система, которую, возможно, придётся изучить))

Да наставник был и он был хорош. Но он не расказивал все. У тебя есть задача и ты в поисках решение он мог натолкнуть на мысль где искать. И только когда ты сделал он садился с табой  и разбирал код что куда. 

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

никакой каши нет.

 

 

В 27.09.2019 в 20:04, vier сказал:

$this->breadcrumbs('link');

что? get? set?  сам метод разбирать не будем :)

 

В 27.09.2019 в 20:04, vier сказал:

foreach($langs as $k => $v) { $this->data[$k] = $v; }

k, v, m, n , l , f , g

 

Змінено користувачем n3bo
Надіслати
5 минут назад, n3bo сказал:

 

что? get? set?  сам метод разбирать не будем :)

 

k, v, m, n , l , f , g

 

я понимаю, что для Вас это сложно, так что я не буду здесь вступать в перепалку. - я здесь поддержал @SergeTkach и просто показал примеры своей реализации, и не кому не хочу их навязывать - каждый выбирает свой путь работы.

Надіслати
Только что, vier сказал:

я понимаю, что для Вас это сложно, так что я не буду здесь вступать в перепалку. - я здесь поддержал @SergeTkach и просто показал примеры своей реализации, и не кому не хочу их навязывать - каждый выбирает свой путь работы.

 

Я не говорю, что то что вы делаете - это плохо. Но вопрос в том, как потом разобраться человеку, который будем с этим работать? когда есть библиотека на 500 методом и 10000 строк, которая умеет все и непонятно что. Плюс вопрос в модификаторах и т.д. 

Надіслати
1 минуту назад, n3bo сказал:

 

Я не говорю, что то что вы делаете - это плохо. Но вопрос в том, как потом разобраться человеку, который будем с этим работать? когда есть библиотека на 500 методом и 10000 строк, которая умеет все и непонятно что. Плюс вопрос в модификаторах и т.д. 

тогда сорри - не так понял раньше Ваш посыл.

данные мои реализации - это чисто для моей удобности написания и поддержки своих модулей.

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

ведь согласитесь, что на первом этапе написания модуля есть рутинная и стандартная работа, такие как: Языки, Крошка, подключение Стилей, Шаблона и т.п.

 

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

Надіслати
В 27.09.2019 в 21:02, SergeTkach сказал:

 

Я хочу уточнить: Вы пошли на фирму и там у Вас был наставник, который объяснял, что да как в Magento. Самостоятельно и автономно сколько бы времени ушло, чтобы разобраться? Просто интересно. Интересуюсь с позиции, что это популярная поддерживаемая система, которую, возможно, придётся изучить))

 

Я все три платформы: ОС, Prestashop и Мадженто изучал самостоятельно без наставников. Если смотреть с точки зрения освоения Мадженто 1 самый сложный движок. Просто в силу очень широкого спектра возможностей в коробочном варианте и более сложной организации кода, которая позволяет сторонним разработчикам делать множество модулей без вмешательства в код ярда. За Мадженто 2 без освоения Мадженто 1 приниматься вообще не стоит, да и широкое распространение Мадженто 2, как мне кажется, не скоро получит в силу ее очень высокой сложности и ресурсоемкости.

Второй по сложности движок- Prestashop. Но его сейчас не советую осваивать. С него народ уходит. В силу ошибок в организации развития проекта разработчики наделали ошибок. В результате чего движок стал тяжеловесный и плохо развиваемый. Сейчас они пытаются исправить ошибки переписывая систему полностью на Symfony. Но процесс будет идти еще несколько лет. А до этого не рекомендую с ним связываться. Я с этого движка начинал осваивать разработку ИМ 10 лет назад.

ОС самый простой в освоении движок для начинающих. Но его проблема как раз именно в этом. В архитектуре построения кода заложено большое количество ошибок ошибок проектирования. Например из известных мне движков только в ОС модели для фронт и бэк частей разделены. Все нормальные разработчики создают один код работы с данными и для фронт и для бэка. Другой фундаментальный косяк - использование VQMod вместо применения широко используемых всеми профессиональными разработчиками решений для совместной разработки кода, таких как override, dependency injection и событий которые позволяют менять алгоритмы ядра системы в очень широких пределах без модификаций кода ядра. MVC паттерн тоже реализуется весьма криво (простыни кода с передачей данных в шаблоны в контроллерах это нечто). Модульность построения системы слабая. В этом плане такое ощущение что разработчики ОС до сих пор находятся в каменном веке. Это же является проблемой и для изучающих PHP программирование, потому что они осваивают все самые неправильные, самые устаревшие метод работы кодировщиков и проектировщиков.

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

Но вообще в силу архитектурных проблем ОС как серьезная среда разработки больших и средних проектов не получит серьезного распространения, пока их не устранит. Если хотите развиваться в PHP программировании - изучайте Symfony. На этой основе создано гигантское количество систем самого разного назначения (ERP, CRM, PIM, ServiceDesk, eCommerce как B2B так и B2C). По крайней мере, сколько бы это времени не стоило, оно того стоит на длительную перспективу.

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

За Мадженто 2 без освоения Мадженто 1 приниматься вообще не стоит, да и широкое распространение Мадженто 2, как мне кажется, не скоро получит в силу ее очень высокой сложности и ресурсоемкости.

Я начинал осваивать с Мадженто2  и я вам скажу не так уж все печально. Что мне понравилось с самого начала так это простой пример создания нового Entity
Например мне нужно создать функционала какой то список с данными с формы.

Мадженто2:
1. Создать файл конфигурации:

- Создать модель (Отличия от опенкарта). Вам нужно описать структуру данных + возможно повторно использовать если увас уже есть похожие 
- Описать поля и структуру для рендеринга. 
- На фронтенде создать контролер и форму
В админке сразу получим автоматом страницы: Списка, Редактирования, Удалоения, и Добавления.

2. Опенкарт (лень писать все)
- Написать модель в админке несколько SQL запросов
- Создать контролер написать все методы скопировать милион строк кода для сохранения УРЛ, Обработки полей загрузки переводов
- Скопировать 90% вида из другово файла поменять под свои данные
- На фронте тотже список что пред этим только там будет форма

Вот мой кстате первый модуль под мадженту2 я его делал как Тестовое задание не знаю Мадженты вообще. 
https://github.com/konorws/magento2-AdminContacts

Надіслати
31 минуту назад, konorws сказал:

Я начинал осваивать с Мадженто2  и я вам скажу не так уж все печально. Что мне понравилось с самого начала так это простой пример создания нового Entity
Например мне нужно создать функционала какой то список с данными с формы.

Мадженто2:
1. Создать файл конфигурации:

- Создать модель (Отличия от опенкарта). Вам нужно описать структуру данных + возможно повторно использовать если увас уже есть похожие 
- Описать поля и структуру для рендеринга. 
- На фронтенде создать контролер и форму
В админке сразу получим автоматом страницы: Списка, Редактирования, Удалоения, и Добавления.

2. Опенкарт (лень писать все)
- Написать модель в админке несколько SQL запросов
- Создать контролер написать все методы скопировать милион строк кода для сохранения УРЛ, Обработки полей загрузки переводов
- Скопировать 90% вида из другово файла поменять под свои данные
- На фронте тотже список что пред этим только там будет форма

Вот мой кстате первый модуль под мадженту2 я его делал как Тестовое задание не знаю Мадженты вообще. 
https://github.com/konorws/magento2-AdminContacts

 

Я больше года работаю на поддержке сайта на Magento 2 который переводил с Magento 1, а до этого в 2015 переводил его с Prestashop, на котором поддерживал его с 2011 года . Я переносим модули по все этой цепочке. На ОС опыт разработки сайтов тоже есть. Так что я имею представление о различиях Мадженто 2 и OC :-) . А по поводу создания сущностей - в Symfony это сделано еще удобнее. Попробуйте поработать с Doctrine ORM. Более того там и модификация структуры данных удобнее сделана чем в Magento. Так что вы пока еще не так много знаете :-) . 

Надіслати
13 минут назад, Vladzimir сказал:

А я так и не нашел простого, функционального и расширяемого решения для ИМ, кроме https://github.com/gplcart/

Но его разработчик забросил уже как год. А его я рассматривал как замена опенкарту.

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

Надіслати
52 минуты назад, EVMedvedev сказал:

Попробуйте поработать с Doctrine ORM. Более того там и модификация структуры данных удобнее сделана чем в Magento. Так что вы пока еще не так много знаете :-) . 

Ошибаетесь. Я работал с доктриной и ее аналогами много. (Даже интегрировал ее в OC). Я вам скажу что в любой системе есть что то лучшее чем в другой но если смотреть в комплексе то не все классные инструменты между собой совместимы по разным причинам. 

Надіслати
51 минуту назад, EVMedvedev сказал:

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

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

https://github.com/copona/copona

  • +1 2
Надіслати

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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