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

Recommended Posts

@Scyth Для тех кто в танке..
Это нормальная простота кода - все на ладони, что, где и когда

А не навороченные роутеры из других движков

 

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

1 час назад, chukcha сказал:

@Scyth Для тех кто в танке..
Это нормальная простота кода - все на ладони, что, где и когда

А не навороченные роутеры из других движков

 


Для тех кто плохо знаком с базовыми алгоритмами и основами ЯП:  одна и та же переменная проверяется на соответствие либо через switch ... case, либо на крайний случай, через if ... else. То что выше - бессмыслица, порождённая незнанием как что работает. Когда первое же условие  = true, нет смысла проверять ту же самую переменную на соответствие другим значениям. Ибо они все будут false.

Называть такое "простотой кода" язык не поворачивается, т.к. это усложнение кода для обработчика. Да и чтение кода замедляет. Потому что надо каждый блок глазами пробежать, что автор имел ввиду. Точно ли там простое сравнение той же самой переменной или есть доп. условия? В случае со switch ... case код понятнее и читается быстрее.

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

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


7 минут назад, Scyth сказал:

то не вижу смысла вообще дальше с вами вести дискуссию.

Аналогично, потому что ваше самомнение зашкаливает.

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

13 минут назад, Scyth сказал:

То что выше - бессмыслица, порождённая незнанием как что работает.

Я вас хочу расстроить

Ио что вы видите в коде switch
Реально вырождается в банальный if
также как и ifelse

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

17 minutes ago, Scyth said:

Называть такое "простотой кода" язык не поворачивается, т.к. это усложнение кода для обработчика

обработчику насрать if там или switch/case, он все равно в двоичный код переводит, а в двоичном коде нет команды switch, он это все равно в сравнение преобразует.

использование If это просто стиль написания автора такой, но данная тема не имеет отношения к теме чпу системных страниц.

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

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


6 минут назад, lexxkrt сказал:

либо сделайте свой роутер.

так он "слепил"
Нет чтоб сделать правильно, так берет, по его мнению г-роутер, и подвергает его модификации.
И делает супер нагруженный  метод..

 

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

В 24.12.2018 в 12:37, Scyth сказал:

Кто же всё ещё сомневается в "говнокодости" системы opencart, добро пожаловать в этот самый класс ControllerStartupSeoUrl. Там полный набор bad practice, начиная от индусского перебора одной и той же переменной через if()... if()... if()... if()... и заканчивая ограничительными костылями or ... or ... or ... для конкретных маршрутов.

https://github.com/opencart/opencart/blob/master/upload/catalog/controller/startup/seo_url.php

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

16 часов назад, Otvet сказал:


В продакш версии (и даже в более поздней rc-версии) это всё ещё есть: https://github.com/opencart/opencart/blob/3.0.2.1_rc/upload/catalog/controller/startup/seo_url.php

А так молодцы, поправили. Не всё так плохо у текущих контрибьюторов. В отличие от местных комментаторов, которые не понимают разницы между *if* и *else if*.
Жаль только, что стабильные релизы медленно выпускаются. Версии 3.0.2.0 уже 1,5 года как, судя по оф. сайту. 

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


8 минут назад, Scyth сказал:

Не всё так плохо у текущих контрибьюторов.

Вы не понимаете, совсем, от слова совсем!!!

То что есть на гите, также работает "криво". Но куда вам понять? Вы же мастер кеширвания..

Для тех кто в танке
разницы между
if
if
if

и
if eleseif
с точки зрения кода - НЕТ
То что вы глазами видите короткий путь, это не значит, что так и работает

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

 

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

к Упростителю кода..

Вы заметили что в обновленной версии нет if, а есть регулярки, как вы думаете что быстрее - реглярка или банальный if?

 

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

22 часа назад, chukcha сказал:

Для тех кто в танке
разницы между
if
if
if

и
if eleseif
с точки зрения кода - НЕТ
То что вы глазами видите короткий путь, это не значит, что так и работает
 


Это вы не понимаете. И не поймёте, пока специального образования не получите, видимо. Разница есть. Гуглите как работает интерпретатор PHP.

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


1 час назад, Scyth сказал:

пока специального образования не получите,

Когда я получил специальное образование, вас еще в проекте не было.. И скажу, вам по секрету..
на тот момент конструкций switch днем с огнем нужно было поискать..
И для вашего развития -
switch - прекрасно работает и дает плюс в оптимизации кода исключительно на short jump и также табличных переходах

На long jump switch - банальный if , а в случае с php - тем более.
 

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

3 hours ago, Scyth said:


Это вы не понимаете. И не поймёте, пока специального образования не получите, видимо. Разница есть. Гуглите как работает интерпретатор PHP.

как раз это вы не понимаете. если хотите говорить об оптимизации то вам куда-то сюда https://github.com/opencart/opencart/issues к Даниэлю Керру. Быть может он вас выслушает, а не "пошлет" как всех остальных.

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

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

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


  • 1 year later...
В 24.12.2018 в 11:47, Scyth сказал:

В общем доработал коробочное решение.
Базируется полностью на стандартной функциональности SEO URL.

Что добавлено:
 

  1. Кэширование ссылок ЧПУ.
    Теперь каждый раз при отрисовке новой ссылки с ЧПУ, система не делает запрос в базу (иногда она делала и по несколько запросов на одну ссылку). Сто ссылок на страницу могло обернутся более сотней запросов в БД. Кому оно надо?
    Кэш ЧПУ очищается при добавлении/редактировании/удалении ссылки через стандартный интерфейс в админке.
    По тестам на реальных данных кэширование ускоряет отдачу ссылок на 2-3 порядка (минимум в 200 раз быстрее) .
  2. Гибкость в создании ЧПУ.
    Отныне любой маршрут без дополнительных параметров можно преобразовать в ЧПУ. А не только закостыленные раньше 4 варианта. Старый алгоритм, кстати, также работает, патч расширяет его, а не заменяет.
    ЧПУ для домашней страницы также работает! Достаточно добавить запись следующего вида:
    2018-12-24_12-45-00.png.d9ac2afe60a0608e4a8025cf70b08cb4.png

Патч прикрепляю (применять через git apply):
SEO_URL+.patch


SEO URL+ работает для Opencart 3.0.2.0. Для других версий не тестировалось.

 

 

Как этот патч применить? Для OcStore 3.0.2.3 будет работать?

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


  • 1 month later...
  • 1 month later...

OpenCart 3.0.3.2
Решил проблему стандартного SEO фиксом

catalog\controller\startup\seo_url.php

Для более ранних версий тройки должно пойти.

 

Заменить код

if (isset($data['route'])) {
	if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

		if ($query->num_rows && $query->row['keyword']) {
			$url .= '/' . $query->row['keyword'];

			unset($data[$key]);
		}
	} elseif ($key == 'path') {
		$categories = explode('_', $value);

		foreach ($categories as $category) {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = 'category_id=" . (int)$category . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

			if ($query->num_rows && $query->row['keyword']) {
				$url .= '/' . $query->row['keyword'];
			} else {
				$url = '';

				break;
			}
		}

		unset($data[$key]);
	}
}

на

if (isset($data['route'])) {
	if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

		if ($query->num_rows && $query->row['keyword']) {
			$url .= '/' . $query->row['keyword'];

			unset($data[$key]);
		}
	} elseif ($key == 'path') {
		$categories = explode('_', $value);

		foreach ($categories as $category) {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = 'category_id=" . (int)$category . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

			if ($query->num_rows && $query->row['keyword']) {
				$url .= '/' . $query->row['keyword'];
			} else {
				$url = '';

				break;
			}
		}

		unset($data[$key]);
	} else {
		$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE `query` = '" . $data['route'] . "'");
		if ($query->row) {
			if ($query->row['keyword'] == '/') { // From common/home
				$url = '/';
			} else {
				$url = '/' . $query->row['keyword'];
			}
		}
	}
}

Да будет всем счастье!

Змінено користувачем RAPOS
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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