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

Recommended Posts

Ребят, нашёл гнусный косяк, очень надо побороть.

Использую ocStore Версия 1.5.5.1.2 со встроенным SeoPro.

 

В общем суть (структура приведена для примера, показаны только категории):

Структура сайта такая —

 

Главная

  -> Мужская одежда ( muzhskaja-odezhda/ )

      -> Джинсы ( muzhskaja-odezhda/dzhinsy/ )

      -> Рубашки ( muzhskaja-odezhda/rubashki/ )

  -> Женская одежда ( zhenskaja-odezhda/ )

      -> Джинсы ( zhenskaja-odezhda/dzhinsy/ )

      -> Рубашки ( zhenskaja-odezhda/rubashki/ )

 

Проблема: подкатегории имеют одинаковые url (dzhinsy, rubashki), но в целом урл уникальный ( muzhskaja-odezhda/dzhinsy/ , zhenskaja-odezhda/dzhinsy/ ). Соответственно после того как я перехожу по ссылке muzhskaja-odezhda/dzhinsy/ меня редиректит на zhenskaja-odezhda/dzhinsy/ . Очень гнусная проблема. Обязательно нужно избавиться. Может кто то уже допилил скрипт до нормальной кондиции?

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


seo_url'ы должны быть в системе уникальными.

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

seo_url'ы должны быть в системе уникальными.

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

 

Товарищ shoputils загуглите пожалуйста что такое URL. URL в моём случае полностью уникальные. Проблема тут в другом. Во-первых разработчик SeoPro допустил опрометчивость назвав поле в админке в которое нужно ввести часть адреса страницы "URL". Если меня сейчас читает разработчик, думаю что стоит поправить это в будущих версиях хотя бы на Alias (если конечно планируется выпустить исправленную версию) дабы не вводить начинающих в заблуждение.

 

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

 

Ну наконец сами подумайте, в разных категориях могут быть товары с одним названием, это ЛОГИЧНО. Так же как и производители у разных товаров тоже могут быть одинаковыми. Например в категориях мужской и женской одежды могут быть брюки например.

 

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

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


r2d2,

Увы, хотим (хочу) вас расстроить

 

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

 

например priduct_id=5 =>/категория1/категория2/товар

 

А теперь представьте, что вы переместили товар... Т.е. - не все так просто...

 

 

но путь должен быть всегда уникальным.

Но вам остается только пользоваться, тем чем есть.

 

Если вы сталкивались с другими системами, как это вопрос решается там?

DLE

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 [L]

Мало кому известная система

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

hostcms

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ /index.php

Решение принимается на уровне роутеров, покажу, что внутри

Core_Router::add('robots.txt', '/robots.txt')
	->controller('Core_Command_Controller_Robots');
.....


$oDefault_Router_Route = Core_Router::add('default', '()');

Еще примеры? А надо ли?

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

r2d2 сказал(а) 09 Мар 2014 - 5:21 PM:

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

Ожидать Ваше право, если Вы знаете в чем проблема - зачем тогда спрашиваете?

r2d2 сказал(а) 09 Мар 2014 - 5:21 PM:

Товарищ shoputils загуглите пожалуйста что такое URL. URL в моём случае полностью уникальные. Проблема тут в другом. Во-первых разработчик SeoPro допустил опрометчивость назвав поле в админке в которое нужно ввести часть адреса страницы "URL". Если меня сейчас читает разработчик, думаю что стоит поправить это в будущих версиях хотя бы на Alias (если конечно планируется выпустить исправленную версию) дабы не вводить начинающих в заблуждение.

Загуглите что такое Seo_url в Opencart`е. Он должен быть уникальным - хоть тресни.

seo_url 'dzhinsy' категории, родительская категория которой 'Мужская одежда' не может быть такой же как у категории, родительская категория которой 'Женская одежда'

freelancer (кстати, один из разработчиков сборки) меня немного с ответом опередил - это самое верное решение.

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

как workaround могу посоветовать dzhinsy-1, rubashki-1

все модули автогенерации делают так

Плохо. Буду искать решение, либо если у вас есть время я бы был не против пообщаться на тему проблем допилить SeoPro. Я разработчик.

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


r2d2,

Увы, хотим (хочу) вас расстроить

 

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

 

например priduct_id=5 =>/категория1/категория2/товар

 

А теперь представьте, что вы переместили товар... Т.е. - не все так просто...

 

 

но путь должен быть всегда уникальным.

Но вам остается только пользоваться, тем чем есть.

 

Если вы сталкивались с другими системами, как это вопрос решается там?

DLE

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 [L]

Мало кому известная система

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

hostcms

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ /index.php

Решение принимается на уровне роутеров, покажу, что внутри

Core_Router::add('robots.txt', '/robots.txt')
	->controller('Core_Command_Controller_Robots');
.....


$oDefault_Router_Route = Core_Router::add('default', '()');

Еще примеры? А надо ли?

 

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

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


И структуру, и контроллер

 

Вы же разработчик - что я не так сказал?

 

Я вам подсказал куда смотреть. Вы увидели?

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

И структуру, и контроллер

 

Вы же разработчик - что я не так сказал?

 

Я вам подсказал куда смотреть. Вы увидели?

теперь уже И структуру И контроллер. ИЛИ уже не прокатывает. Ок, всё понял))

 

По структуре, поясните за правильную структуру по феншую. Я так понял вы шарите в ней.

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


как workaround могу посоветовать dzhinsy-1, rubashki-1

все модули автогенерации делают так

Я тут поелозил трассировщиком по seo_pro.php, нашёл где происходит коллапс. Нужна ваша помощь в пояснении.

 

В общем вот в этом месте собственно генерится редирект на левую категорию.

J8j8Q0A.png

 

Происходит это из-за того что при начальном разборе URL (запросе в БД) походу не смотрится на то что при селекте категорий с одинаковыми алиасами их больше одной. Ну и подставляется почему то ID последней категории которую я добавил с таким же названием.  Кеш соответственно заполняется тем же бредом.

 

Единственное что, я не очень вдавался вглубь этого всего дела, не особо думал над каждой строкой попросту по нехватке времени, ткните меня в место где из контроллера происходит запрос в модель (в БД). Или даже лучше в то место где происходит проверка на наличие/отсутствие кеша. Ну и поговорить очень бы хотелось на эту тему, поскольку мне НУ ОЧЕНЬ НАДО. Думаю и другим тоже. Если будет возможность, киньте контакты как с вами связаться.

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


1. Смотрим конструктор класса.

2.  смотрим...

if (isset($this->cache_data['keywords'][$keyword]))

ага, увидел

 

Кстати, класс Сache это стандартный опенкартовский или это часть SeoPro?

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


Ха, жестянка, перезаписываются элементы массива с одинаковыми индексами при составлении массива... Во попадос (: По этому редиректит именно на последнюю "одинаковую" категорию, потому как она в базе ниже по выдаче. Ну ясно.

 

Единственное не понял, для чего перекрёстно 2 массива строится сначала keywords а потом queries, ведь значение впоследствии всё равно только из keywords берётся?

 

UPD Тоже понял, для обратного преобразования и последующего сравнения в том месте где я показывал редирект. Печаль. Надо думать как запилить массив по другому. Я так понял в общем, основная проблема в реализации поиска по массиву. Но я думаю что array_keys всё равно работает быстрее чем запрос к базе (;

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


Дело не в array_keys или подобных методах

 

На первой странице здесь показано зачем нужен сеокеш.

 

Особенно при формировании ЧПУ ссылок в категориях, да и не только в категориях.

 

А масcив должен быть уникальным по keyword, по query он уникален.

 

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

/категрия1/категория2/продукт

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

Дело не в array_keys или подобных методах

 

На первой странице здесь показано зачем нужен сеокеш.

 

Особенно при формировании ЧПУ ссылок в категориях, да и не только в категориях.

 

А масcив должен быть уникальным по keyword, по query он уникален.

 

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

/категрия1/категория2/продукт

да я понимаю для чего тут кеш. Не в этом дело. Array_keys тут может понадобиться для поиска по значению элемента массива дублированных записей. Возвращать будет уникальные ключи (в зависимости от того сколько совпадений найдет). Соответственно можно будет отказаться от массива с ключами по keywords.

 

Далее если array_keys возвращает более 1 ключа, циклом по ключам ищется и сравнивается РЕАЛЬНЫЙ родитель и его id. Ну и далее по тому же принципу — если родитель тоже дублируется, так же смотрим его родителя пока не находим элемент без совпадений. Получается разбор URI с конца а не с начала как сейчас реализовано. Таким образом можно будет вообще избавиться от массива с ключами по keywords. Поправьте меня если я что-то не так думаю.

 

Совсем не понял что имелось в виду про

"Пробуйте прописать и двигайте вариант с прописыванием полного пути к продукту

/категрия1/категория2/продукт"

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


Ок... поясню

 

Вы схватились за "чужую" идею решения  ЧПУ.

Создайте свою модель ЧПУ и прикрутите свой контроллер.

 

Вам нужен "правильный путь"?

/категрия1/категория2/продукт -> product_id=56

/категрия1/категория2/ -> category_id=10

/категрия1/ ->category_id=2

 

Ведь по сути, какая разница как выглядит  keyword

 

Я вам показывал примеры других систем... Но везде есть конкретные правила составления  url

Вот и вы создайте свои правила. И под них адаптируйте контроллеры.

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

Ок... поясню

 

Вы схватились за "чужую" идею решения  ЧПУ.

Создайте свою модель ЧПУ и прикрутите свой контроллер.

Вот только не пойму зачем воротить всё с нуля если можно доделать то что уже имеется?

Вам нужен "правильный путь"?

/категрия1/категория2/продукт -> product_id=56

/категрия1/категория2/ -> category_id=10

/категрия1/ ->category_id=2

Да, только так работать не будет. Что будет например если родитель у категории сменится?

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


Что будет например если родитель у категории сменится?

Это я хотел У вас спросить - давно....

 

А ничего страшного не будет... Ведь у вас уникальный keyword. Ваша задача получить один и только один объект.

 

Будет путаница, будет нужен инструмент редиректов и канокинал на такой случай,

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

Что будет например если родитель у категории сменится?

Это я хотел У вас спросить - давно....

 

А ничего страшного не будет... Ведь у вас уникальный keyword. Ваша задача получить один и только один объект.

 

Будет путаница, будет нужен инструмент редиректов и канокинал на такой случай,

Возможно мы друг друга не понимаем... Я предлагаю сделать разбор URI с обратной стороны. С конца то есть. Таким образом можно будет ТОЧНО определить id каждой категории (каждого кусочка URI между слешами) просто определив что родитель данной категории с не уникальным именем уникален. И в итоге собрать точный "path" ("20_34_67" как пример)

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


Короче разобрался в работе всего этого дела глубже, многое понял) Ошибался.. Думаю.

А как дышал :)

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

А как дышал :)

да не, всё норм, просто оценю количество времени, если не слишком долго займёт, может сделаю.

 

Ща другая проблема. Я так понял этот "кеш" это хреновая тема. Она конечно быстрее работает чем запросы к базе, но мля, за 1 цикл сохранения в кеш делается количество перезаписей 1 файла равное количеству товаров! Это жесть конечно) Ну и представить если: товаров более 1000, сответственно раз в час минимум перезаписывается 1000 раз 1 файл. Сутки - 24000 перезаписей минимум. Сколько времени проживёт винт?

 

Надо какой то другой вариант придумывать. Возможно сразу html писать

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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