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

ЧПУ Системных страниц Opencart 3.0.2


Recommended Posts

Всем привет. С опенкарт знаком недавно, поэтому не судите, искал по форуму не нашел. 
Версия Опенкарт 3.0.2.0 
Не могу понять как сделать ЧПУ на системных страницах ( Логин/Регистрация, Контакты, и др)  типа: index.php?route=information/contact
Сразу скажу: Галочку ЧПУ нажал, файл .htaccess переименовал, кеш который находится в system - не нашел, в смысле его там нет.( не знаю может его там не должно быть)) 

В админ панели на вкладке Dashboard справа нажимал на колесико и там обновлял ( где то прочитал, что это очистка кеша )

Во вкладке Дизайн - SEO URL добовлял значения, не помогает. 

Помогите деревянному )))

Link to comment
Share on other sites


  • 8 months later...

Не знаю точно с какой версии, но в последнем опенкарте 3 в разделе дизайн есть SEO URL там можно подправить нужные урлы. Не логично конечно настройку урлов помещать в дизайн, но почему-то так сделали

Edited by kosuha606
Link to comment
Share on other sites


  • 1 month later...

Всем привет. не знаю что там может или не может встроенный чпу, но проблему с index.php?route=common/home он точно не осилил.

Подскажите как эту глюч в тройке убрать? и .htaccess правил

и с бубном танцевал- без результата.

Link to comment
Share on other sites


On 11/8/2018 at 2:04 AM, Dimasscus said:

Всем привет. не знаю что там может или не может встроенный чпу, но проблему с index.php?route=common/home он точно не осилил.

Подскажите как эту глюч в тройке убрать? и .htaccess правил

и с бубном танцевал- без результата.

cjmmon/home не работает в стандартном сео. 

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=27700

и вроде как в Опенкарт Русская сборка, данная проблема пофикшена.

Link to comment
Share on other sites


11 часов назад, lexxkrt сказал:

cjmmon/home не работает в стандартном сео. 

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=27700

и вроде как в Опенкарт Русская сборка, данная проблема пофикшена.

да перепробовал все. не помогает

Link to comment
Share on other sites


  • 1 month later...
On 11/13/2018 at 8:30 AM, lexxkrt said:

в таблицу seo url маршрут common/home с ключом " " добавьте

Добавляли, к сожалению, не работает. Проблема всё ещё актуальна (используется OC 3.0.2.0)

Edited by vitalino000
Link to comment
Share on other sites


Третий день копаюсь в Opencart 3.0.2.0. Случай свёл меня с ним как с "наиболее популярным интернет-магазином". Уж лучше бы выбрал платный, ей богу. Такого говнокода под капотом я не видел со времён чтения "творений" индусских разработчиков.
 

В 28.09.2018 в 11:34, lexxkrt сказал:

все работает в 3020, открывается по opencart/contact

Скриншот 28-09-2018 123201.jpg


lexxkrt, не обманывайте  пользователей. Из коробки это не работает. По крайней мере без каких-то дополнительных правок/модулей. Могу привести вам кусок кода, где обрабатываются ЧПУ перед выводом. И там закостылена обработка ссылок только на: 1. продукты, 2. производителей, 3. категории и страницы с информацией (только information/information!). Остальное игнорится и выводится без ЧПУ.

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

 

В 22.12.2018 в 22:52, vitalino000 сказал:

Добавляли, к сожалению, не работает. Проблема всё ещё актуальна (используется OC 3.0.2.0)


Вам поможет следующее: 

web\catalog\controller\startup\seo_url.php, строку 124 

			return $link;

заменяете на 
 

return str_replace(['index.php?route=','common/home'], [], $link);

Также удостоверьтесь что в файле .htaccess у вас есть строчка 
 

RewriteRule ^([^?]*) index.php?route=$1 [L,QSA]


Именно "route=", а не "_route_=", как в оригинальном коробочном .htaccess!

Edited by Scyth
Link to comment
Share on other sites


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

Именно "route=", а не "_route_=", как в оригинальном коробочном .htaccess!

ШО за бред?

Если вы не разобрались как работает seo_url, то не надо гнать пургу на движок.

 

 

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

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

ваш гавнокод, на стройную структуру опенкартовского роутера.

Link to comment
Share on other sites

9 часов назад, chukcha сказал:

Если вы не разобрались как работает seo_url, то не надо гнать пургу на движок.

 

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

 

 

P.S. Но идеи говнокода это не отменяет. Худшей и более затратной по ресурсам реализации ЧПУ я ещё ни в одном фреймворке не видел.

Edited by Scyth
Link to comment
Share on other sites


UPD: Действительно, нашёл где используется _route_. В методе ControllerStartupSeoUrl->index() обрабатываются адреса с этим параметром. И если в SEO URL создать запись, как показал lexxkrt, то страница site.local/contact действительно откроет контакты.

НО! Это не работает для генерации ссылок! Т.е. ссылка ЧПУ как бы есть, но она нигде не выводится (если только вы не вобьёте её вручную).

 

В методе ControllerStartupSeoUrl->rewrite() закостылен ограниченный набор маршрутов, которые я описал в предыдущем сообщении. И ссылки по ключам, указанным в админке, в разделе SEO URL вы нигде не увидите. Хотя они и будут работать, но не будут генерироваться в коде.

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

Edited by Scyth
Link to comment
Share on other sites


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

Edited by Scyth
Link to comment
Share on other sites


Печалька, проверьте сколько раз вы обращаетесь к кешу?
Чем кешированные данные отличаются от реальных запросов?

Вы плодите очень много не нужных сущносетй

route=product/catetegory&path=23_54&sort=p.nameorder=DESC&limit=100

И т.д.

 

Link to comment
Share on other sites

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

Чем кешированные данные отличаются от реальных запросов?


Минимум 200-кратное увеличение производительности данного метода ни о чём, конечно не говорит, да? ;)

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

Кроме того, кэш ограничен хранением строк (даже если подключить какой-нибудь memcache или APC, ограничения OpenCart не позволят использовать его в полную силу). Это ещё одна причина не тратить своё время на экстра-оптимизацию.

Edited by Scyth
Link to comment
Share on other sites


6 часов назад, Scyth сказал:

Минимум 200-кратное увеличение производительности данного метода ни о чём, конечно не говорит, да?

допустим на странице 30 ссылок

всего записей ЧПУ 70тыс

что быстрее:  30 запросов по 1мс или обращение к ФС, чтение с диска пары/десятка мегабайт и потом распарсить json всё это ?

  • +1 1
Link to comment
Share on other sites

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

допустим на странице 30 ссылок

всего записей ЧПУ 70тыс

что быстрее:  30 запросов по 1мс или обращение к ФС, чтение с диска пары/десятка мегабайт и потом распарсить json всё это ?


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

Для интереса, глянул seoPro, который тут выше Чукча расхваливал, так вот он использует подобный же принцип кеширования. Вытягивает ВСЕ записи ЧПУ и помещает их в кэш. И уже с кэшем работает. Так что можете проверить производительность метода на своих 70 тысяч товаров с включенным seoPro и без него.

Но навскидку могу сказать, что кэш из 2 мегабайт (если предположить что ключ и значение каждой ссылки занимает в среднем 32 байта) отработает быстрее, чем 30 запросов к БД. Для справки, БД тоже тянет данные и свой кэш с ФС. Но в первом случае идёт одно обращение к ФС, во втором - 30.
Если же подключен memcache, то СУБД вообще сосёт палец в сторонке, т.к. обращения к ФС вообще не произойдёт в первом случае.

Блин, зачем я всё это рассказываю. Люди, погуглите про кэширование, что это, как оно применяется и зачем оно нужно. Такие примитивные вопросы задаёте, ей богу.

Edited by Scyth
Link to comment
Share on other sites


Вы в курсе что сеопро - сначала кеширует, а затем использует
Вы же на каждый запрос тянет кеш а потом сохраняете
Кроме того, вы еще в пересохраняете кеш  с каждым запросом
И.. еще.. при 70к - сеопро нужно пользовать не кешируемый.

Link to comment
Share on other sites

On 12/24/2018 at 12:22 AM, Scyth said:

Такого говнокода под капотом я не видел со времён чтения "творений" индусских разработчиков.

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

 

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

 

Edited by lexxkrt
Link to comment
Share on other sites


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

могу подсказать, битрикс.

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

Когда человек пришел с другого движка, то простота кода опенкарта шокирует.

  • +1 1
Link to comment
Share on other sites

В 25.12.2018 в 12:52, chukcha сказал:

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


Да, в курсе. У SeoPro одна операция с кэшем (вытянуть) на каждый запрос, у меня две (вытянуть и в конце сохранить).

 

В 25.12.2018 в 12:55, lexxkrt сказал:

 

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

 


Я же предлагал выше заглянуть в класс ControllerStartupSeoUrl. Или вы хотите чтобы я цитатами кода тут топик заспамил? ОК. Как вам такой пример творения индийского школьника? Всё из того же класса, далеко ходить не надо.
 

					if ($url[0] == 'product_id') {
						$this->request->get['product_id'] = $url[1];
					}

					if ($url[0] == 'category_id') {
						if (!isset($this->request->get['path'])) {
							$this->request->get['path'] = $url[1];
						} else {
							$this->request->get['path'] .= '_' . $url[1];
						}
					}

					if ($url[0] == 'manufacturer_id') {
						$this->request->get['manufacturer_id'] = $url[1];
					}

					if ($url[0] == 'information_id') {
						$this->request->get['information_id'] = $url[1];
					}

 

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.