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


Простенький модуль ЧПУ, версия 2


  • Вы не можете ответить в тему
Сообщений в теме: 155

#141 stasikons

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 68 сообщений
Репутация: 4
Начинающий

Отправлено 04 October 2016 - 06:09 PM

Дописал вывод canonical для каждой страницы

А как сделать с этим ЧПУ? Какую переменную надо подставить в canonical?
  • 0

#142 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 04 October 2016 - 06:59 PM

А как сделать с этим ЧПУ?

Чтобы вывелась ЧПУ ссылка.
Например, для полной новости:
<link rel="canonical" href="{$smarty.const.CONF_FULL_SHOP_URL}{$smarty.const.ARTICLES_ROOT}/{$articles_full_array.uri}.html">

я вывел так в head.tpl.html:
{if $main_content_template eq "show_full_articles.tpl.html"}
<link rel="canonical" href="{$smarty.const.CONF_FULL_SHOP_URL}{$smarty.const.ARTICLES_ROOT}/{$articles_full_array.uri}.html">
{/if}

С остальными страницами аналогично.
  • 0

#143 stasikons

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 68 сообщений
Репутация: 4
Начинающий

Отправлено 04 October 2016 - 08:46 PM

{$smarty.const.ARTICLES_ROOT}/{$articles_full_array.uri}.html

Вот это откуда взять для карточки товара с указанием категории?
  • 0

#144 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 04 October 2016 - 10:40 PM

Для страницы товара у меня выводится так:
{if $main_content_template eq "product_detailed.tpl.html"}
<link rel="canonical" href="{$smarty.const.CONF_FULL_SHOP_URL}{if $product_info.cpu eq ''}/{/if}product_{$product_info.productID}.html">
{/if}

Да, чуть не забыл, вывод product_info["cpu"] прописывал в product_detailed.php - там ничего сложного нет.

PS. Наверное, забыл. Посмотрел только что - никаких дописок не нашел (
  • 1

#145 stasikons

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 68 сообщений
Репутация: 4
Начинающий

Отправлено 05 October 2016 - 05:03 PM

Супер, всё работает.
  • 0

#146 stasikons

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 68 сообщений
Репутация: 4
Начинающий

Отправлено 06 October 2016 - 03:08 PM

При создании новой карточки товара у меня всегда формируется ЧПУ-ссылка такого вида /кат/tovar.html, как сделать чтобы категория /кат не добавлялась в адрес ссылки? При формировании ссылки всегда добавляется категория, а нужна только ссылка на товар без категории. Добавлять ЧПУ категории к ЧПУ товара - галочки в админке нет.
  • 0

#147 Den

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 21 March 2017 - 01:52 PM

badisoft, пытаюсь установить ваш модуль. ЧПУ все заработали, но нет редиректа со старых страниц (product_XXX.html, category_XXX.html), он должен быть или нет? При этом в логах вижу ошибку
ERROR: 1054:Unknown column 'dahx_products.uri' in 'field list'
И ее в таблице действительно нет. Ошибок из шапки темы не наблюдаю.
  • 0

#148 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 21 March 2017 - 03:33 PM

ЧПУ все заработали, но нет редиректа со старых страниц (product_XXX.html, category_XXX.html), он должен быть или нет?

Встречный вопрос - зачем я пишу инструкции и описания?

Unknown column 'dahx_products.uri'

В моем модуле нет поля uri вообще. Это поле для ЧПУ-ссылки на товар от другого ЧПУ-модуля.
А раз запрос с этим полем есть, но поля такого в таблице нет, значит Вы поверх нового пустого сайта раскатали базу и файлы от старого сайта.
Не самая лучшая идея - устанавливать еще один ЧПУ-модуль поверх сайта с уже имеющимся кодом другого ЧПУ-модуля.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#149 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 March 2017 - 12:01 PM

нет редиректа со старых страниц (product_XXX.html, category_XXX.html)

Наиболее вероятным мне представляется отсутствие необходимых исправлений в .htaccess.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#150 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 12 June 2017 - 10:53 PM

Хочу отметить, что простота модуля, к сожалению, создает определенные сложности. Например, наличие отдельной таблицы для ЧПУ ссылок усложняет переход к полноценному ЧПУ, когда ссылки хранятся в отдельном поле таблиц категорий и товаров, соответственно. Для плавного перехода придется первое время дублировать ЧПУ ссылки и в таблице ЧПУ и, например, в таблице категорий, если мы переводим их первыми на полноценный ЧПУ.
Но что можно достигнуть при переходе - это отсутствие лишних запросов к базе т.к. сама ссылка будет храниться в той же таблице, что и категория или товар и при запросе товара ссылка будет получаться автоматически и без лишних запросов.
  • 0

#151 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 June 2017 - 10:09 AM

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

Странный тезис. Этот модуль ЧПУ писался вовсе не для того, чтобы облегчить переход к "полноценному ЧПУ".

когда ссылки хранятся в отдельном поле таблиц категорий и товаров

Поля ЧПУ, где ссылки хранятся раздельно в таблицах категорий/товаров/страниц/новостей заполняются четырьмя SQL-запросами - по запросу на таблицу. Или вообще получаются через JOIN LEFT из единой таблицы. Не вижу ни капли проблемы.

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

Достигнуть-то можно, но известные мне ЧПУ (трикивебовский, остальное клоны, использующие ту же идею) точно так же делают как минимум один запрос на каждую ссылку. В силу конструкции типа {$productID|function}, где function - функция, делающая запрос к таблице (в данном случае товаров) и возвращающая соответствующую productID ЧПУ-ссылку.
Другими словами, для того, что Вы хотите надо (1) заметно глубже влезать в потроха ShoCMS, хотя это и не сложно. Просто чтобы ЧПУ-ссылка изначально (и тем же запросом) была в массиве информации от категории, товаре, странице, новости. (2) модифицировать КАЖДЫЙ сторонний модуль, где есть ссылки. Правда, для трикивебовского их и тоже надо модифицировать.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#152 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 13 June 2017 - 07:54 PM

Просто чтобы ЧПУ-ссылка изначально (и тем же запросом) была в массиве информации от категории, товаре, странице, новости.

Вот этого я и добиваюсь. Уже даже все работает как мне надо ))
Со временем думаю, вообще убрать функцию replace_to_cpu, а файлы index.php и index_old.php снова объединить в один.
Все чпу ссылки уже разнесены по соотв. таблицам и берутся оттуда, а таблица cpu еще используется для функции replace_from_cpu.
Кеширование SMARTY тоже включено и корректно работает для поисковых ботов.
  • 0

#153 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 June 2017 - 08:27 PM

Вот этого я и добиваюсь. Уже даже все работает как мне надо )) Со временем думаю, вообще убрать функцию replace_to_cpu, а файлы index.php и index_old.php снова объединить в один.

Это надо было сразу делать.
Сейчас (опыт, знания) я не вижу в этом никакой проблемы - выводить в шаблон не product_{$product_info.ProductID}.html, а сразу {$product_info.url}, который будет сформирован еще на PHP-уровне и без дополнительных SQL-запросов.
Несколько изменений (вполне конечное количество, около десятка) в PHP-коде и кууууча правок в шаблоне, абсолютно единообразных. И в каждом стороннем модуле, имеющем ссылки - как в PHP, так и в шаблоне.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#154 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 13 June 2017 - 08:47 PM

badisoft, да, да. Все именно так и выводится.
И куча правок в шаблоне...
  • 0

#155 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 17 June 2017 - 03:11 PM

Непонятно, зачем в index.php подобные вещи:
'"feedback.html'	=> '"/feedback.html',

Не проще исправить это один раз в шаблоне(добавить слеш)?
Также непонятна идея хранить в базе ЧПУ с начальным слешем в каждой строке адреса.
Из-за этого возникают некоторые неприятности с двойными слешами при попытке вывести тег canonical и т.:
<link rel="canonical" href="https://mykrasa.com{if $product_info.cpu}{$product_info.cpu}...

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

Использовать {$smarty.const.CONF_FULL_SHOP_URL} не удобно т.к. он уже содержит слеш и приходится усекать строку чтобы он не удваивался.
  • 0

#156 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 June 2017 - 06:13 PM

Не проще исправить это один раз в шаблоне(добавить слеш)?

Не проще. Лишняя правка, а убирание одного элемента из массива добавления слэшей ничего не ускорит.

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

Тут я ничего не могу сказать, т.к. это было сделано лет этак пять назад, если не больше.
Возможно, дело в том, что ссылка из .htaccess передается именно со слэшем в начале.
Упрощается код поиска.

не говоря уже о совершенно лишних данных в базе

Это каких?

Использовать {$smarty.const.CONF_FULL_SHOP_URL} не удобно т.к. он уже содержит слеш и приходится усекать строку чтобы он не удваивался.

Да, есть такое дело. Не только в ЧПУ - во многих местах и модулях приходится отрезать завершающий слэш в CONF_FULL_SHOP_URL.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)