Перейти к содержимому


Фото
- - - - -

Открытие категории по id


  • Чтобы отвечать, сперва войдите на форум
32 ответов в теме

#21 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 18.01.2019 - 15:10

Если вы хотите делать нормально, а не абы как, то вам нужно получить АйДи первой категории из списка категорий товара в функции get_products подставлять это значение в урл, а на странице Товара, если это значение неправильное - отдавать 404

А вот это вот все с каноникалами - это даже не костыли...

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

Если значение неправильное, стоит ли выдавать 404? В принципе, сеошники говорят, что всё равно - 404, редирект, каноникал (а может врут?).



#22 Kosjak76

Kosjak76
  • Модератор
  • 3 837 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.01.2019 - 15:13

Если страница не существует - должен быть 404

Но это мое личное мнение.

Каждый СЕОшник говорит разное, но каждый уверен на 300% - что только он знает, как правильно.

Поэтому стараюсь с ними не работать)))



#23 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 18.01.2019 - 15:25

Спасибо, вроде, работает ЧЁТКО

 

api/products.php в районе 130 строки

                    b.url as brand_url,
      (SELECT category_id FROM __products_categories WHERE product_id = p.id ORDER BY position ASC LIMIT 1) as category_id
                FROM __products p        
                $category_id_filter  

 

Ссылка в tpl-файлах на товар должна быть в виде

 

<a href="catalog/{$product->category_id}/{$product->url}">

Смотрю, вроде, работает. Дальше тестировать буду уже завтра.



Если страница не существует - должен быть 404

Но это мое личное мнение.

http://forum.simplac...му-мур-гав-хрю/

Эта страница существует?



И ещё правка.

В htaccess убрать правило, касающееся products/

 

Ибо нефиг


Изменено: question, 18.01.2019 - 15:24


#24 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 19.01.2019 - 12:16

После экспериментов правки в htaccess получились такими

RewriteRule ^([0-9]+)/(.*).html$    index.php?module=ProductView&cid=$1&product_url=$2 [L,QSA]
RewriteRule ^([0-9]+)/?$    index.php?module=ProductsView&id=$1 [L,QSA]
RewriteRule ^([0-9]+)/([^/]+)/?$    index.php?module=ProductsView&id=$1&brand=$2 [L,QSA]
RewriteRule ^catalog/([0-9]+)$    /$1 [R=301,L]
 

Последняя строчка необязательна - чисто чтобы мои старые ссылки работали.

Логика такая: если человек заходит на страницу типа site.ru/оплата_и_доставка , то попадает на нужную страницу, если на site.ru/88/ , то попадает на раздел с id 88 (разделы в моём случае пишутся цифрами), если на site.ru/88/samsung-galaxy-sv.html , то попадает на страницу товара. При изменении в url товара цифры (в данном случае 88) на любую другую, происходит редирект на правильный url.
Нагрузка не выросла, вернее, при моей посещаемости добавление ещё одного запроса к БД никак не отразилась.
Вышеупомянутый код можно модернизировать, например, сделать для категорий префикс. Также можно, используя префикс, открывать категории не по id, а по url. Например
site.ru/category-88/
или
site.ru/категория-мобильные-телефоны/
Ну вот как-то так.
P.S. Правки в шаблоне очень индивидуальны, тут однозначного решения нет, я правил - смотрел, правил - смотрел.

Изменено: question, 19.01.2019 - 12:18


#25 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 19.01.2019 - 12:20

Объединить всё написанное выше и сделать готовую инструкцию, у меня не хватит усидчивости.



#26 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 21.01.2019 - 10:14

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

У себя я сделал так:

site.ru/razdel-1/

site.ru/razdel2/

и так далее... И вывод товаров следующим образом:

site.ru/razdel1/nazvanie-tovara.html

site.ru/razdel2/tovar-iz-vtorogo-razdela.html

Мне это больше напоминает рекомендации Яндекса по правильному построению сайта. Посмотрим, как сам Яндекс отнесётся...



#27 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2019 - 14:56

Как один из вариантов - что-то типа такого 

                                        p.meta_description, 
					b.name as brand,
					b.url as brand_url,
      (SELECT category_id FROM __products_categories WHERE product_id = p.id ORDER BY position ASC LIMIT 1) as category_id
				FROM __products p

Это не готовое решение, писал на коленке))) Можете попробовать и посмотреть, насколько увеличится нагрузка на базу

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

 

(SELECT category_id FROM __products_categories WHERE product_id = p.id ORDER BY position ASC LIMIT 1) as category_id 

получает category_id, в то время, как для получения url нужно залезть ещё в таблицу s_categories

Могу лишь предположить, что там что-то вроде

 

 

(SELECT url FROM __categories WHERE product_id = p.id AND (вот тут должно быть что-то сложное, какой-то селект) ORDER BY position ASC LIMIT 1) as category_url

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


Изменено: question, 22.01.2019 - 15:05


#28 yr4ik

yr4ik
  • Фрилансер
  • 925 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 22.01.2019 - 15:36

я думаю тут лучше без запроса. ф-я categories->get_category получает данные с локальной переменной, а не запросом. 


Изменено: yr4ik, 22.01.2019 - 15:36


#29 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2019 - 22:11

я думаю тут лучше без запроса. ф-я categories->get_category получает данные с локальной переменной, а не запросом. 

Мне нужно получить url родительской категории ТОВАРА. ID я получаю (благодаря Kosjak76, спасибо ему за помощь и всего самого хорошего).



#30 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2019 - 22:53

Может, как-то так...

      (SELECT url FROM __categories WHERE category_id = SELECT category_id FROM __products_categories WHERE product_id = p.id ORDER BY position ASC LIMIT 1) as category_url
 

 



#31 yr4ik

yr4ik
  • Фрилансер
  • 925 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 22.01.2019 - 22:56

Мне нужно получить url родительской категории ТОВАРА. ID я получаю (благодаря Kosjak76, спасибо ему за помощь и всего самого хорошего).

 
ну а я вам что про погоду рассказываю? Далее по этому иду получите нужную категорию и ее url (может хоть все дерево категорий)
или же делайте join __categories и получайте url в самом запросе. Я бы лучше использовал первый вариант. 


#32 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2019 - 23:30

или же делайте join __categories и получайте url в самом запросе. Я бы лучше использовал первый вариант. 

А можете написать, как должно в итоге выглядеть? Если не сложно.



#33 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2019 - 23:52

Дошло!!!!!!

 

 

            (SELECT url FROM __categories WHERE id = (SELECT category_id FROM __products_categories WHERE product_id = p.id ORDER BY position ASC LIMIT 1) ORDER BY position ASC LIMIT 1) as category_url

 

 






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых