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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


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


Сообщений в теме: 155

#141 stasikons

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

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

Отправлено 04 октября 2016 - 18:09

Просмотр сообщенияSalp сказал:

Дописал вывод canonical для каждой страницы
А как сделать с этим ЧПУ? Какую переменную надо подставить в canonical?

#142 Salp

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

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

Отправлено 04 октября 2016 - 18:59

Просмотр сообщенияstasikons сказал:

А как сделать с этим ЧПУ?
Чтобы вывелась ЧПУ ссылка.
Например, для полной новости:
<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}
С остальными страницами аналогично.

#143 stasikons

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

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

Отправлено 04 октября 2016 - 20:46

Просмотр сообщенияSalp сказал:

{$smarty.const.ARTICLES_ROOT}/{$articles_full_array.uri}.html
Вот это откуда взять для карточки товара с указанием категории?

#144 Salp

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

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

Отправлено 04 октября 2016 - 22:40

Для страницы товара у меня выводится так:
{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. Наверное, забыл. Посмотрел только что - никаких дописок не нашел (

#145 stasikons

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

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

Отправлено 05 октября 2016 - 17:03

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

#146 stasikons

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

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

Отправлено 06 октября 2016 - 15:08

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

#147 Den

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

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

Отправлено 21 марта 2017 - 13:52

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

#148 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 21 марта 2017 - 15:33

Цитата

ЧПУ все заработали, но нет редиректа со старых страниц (product_XXX.html, category_XXX.html), он должен быть или нет?
Встречный вопрос - зачем я пишу инструкции и описания?

Цитата

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

#149 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

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

Цитата

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

#150 Salp

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

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

Отправлено 12 июня 2017 - 22:53

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

#151 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 13 июня 2017 - 10:09

Просмотр сообщенияSalp сказал:

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

Цитата

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

Цитата

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

#152 Salp

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

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

Отправлено 13 июня 2017 - 19:54

Просмотр сообщенияbadisoft сказал:

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

#153 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 13 июня 2017 - 20:27

Просмотр сообщенияSalp сказал:

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

#154 Salp

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

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

Отправлено 13 июня 2017 - 20:47

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

#155 Salp

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

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

Отправлено 17 июня 2017 - 15:11

Непонятно, зачем в 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} не удобно т.к. он уже содержит слеш и приходится усекать строку чтобы он не удваивался.

#156 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 17 июня 2017 - 18:13

Цитата

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

Цитата

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

Цитата

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

Цитата

Использовать {$smarty.const.CONF_FULL_SHOP_URL} не удобно т.к. он уже содержит слеш и приходится усекать строку чтобы он не удваивался.
Да, есть такое дело. Не только в ЧПУ - во многих местах и модулях приходится отрезать завершающий слэш в CONF_FULL_SHOP_URL.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)