+7 (965) 339-38-11
 
Помимо профессионализма мы еще и люди интересные

Настройка ЧПУ для модуля News CMSMS

Для написания различных сайтов достаточно часто приходится пользоваться системой управления контентом CMS MS. Почему именно она? Дело в том, что это  простая, понятная в управлении и разработке CMS, на которой легко можно выполнить даже самые необычные просьбы заказчиков. Не говоря уже о стандартном функционале, который можно встретить на любом сайте.

Именно в такой набор стандартных компонентов и входит новостной модуль News, без которого не обходится ни один сайт. Тут я попытаюсь объяснить, как сократить длинный и совершенно не интересный для поисковиков url вида:
http: //www.site.ru/news/1/15/News-Module-Installed.html

До коротенькой и более привлекательной для seo ссылки:
http: //www.site.ru/News-Module-Installed-1-15.html

Для написания различных сайтов достаточно часто приходится пользоваться системой управления контентом CMS MS. Почему именно она? Дело в том, что это  простая, понятная в управлении и разработке CMS, на которой легко можно выполнить даже самые необычные просьбы заказчиков. Не говоря уже о стандартном функционале, который можно встретить на любом сайте.

Именно в такой набор стандартных компонентов и входит новостной модуль News, без которого не обходится ни один сайт. Тут я попытаюсь объяснить, как сократить длинный и совершенно не интересный для поисковиков url вида:


http: //www.site.ru/news/1/15/News-Module-Installed.html


До коротенькой и более привлекательной для seo ссылки:


http: //www.site.ru/News-Module-Installed-1-15.html


Если не углубляться в теорию, то такой url считается более важным для поисковой машины, так как находится ближе к домену в обход пути «/news/1/15/», что в глазах паука указывает на низкую значимость столь отдаленного контента.


Первое, что стоит сделать, это сохранить папку /modules/News у себя на компьютере и быть спокойным, что у нас все получится. А если и не получится, то мы ничего не потеряем.

Далее открываем файл News.module.php и находим 91 строку, а именно выражение

«$this->RestrictUnknownParams();»


После нее мы видим четыре строки, которые отвечают за вид наших ссылок. Их можно просто закомментировать, чтоб нам было откуда брать пример и к чему вернуться в случае, если что-то сделаем не так, а можно оставить и после них добавить наш код:


$this->RegisterRoute('/(?P<detailtemplate>.*?)\/(?P<junk>.*?)-(?P<articleid>[0-9]+)-(?P<returnid>[0-9]+)$/');
$this->RegisterRoute('/(?P<junk>.*?)-(?P<articleid>[0-9]+)-(?P<returnid>[0-9]+)$/');
$this->RegisterRoute('/(?P<articleid>[0-9]+)-(?P<returnid>[0-9]+)$/');

Найдите 10 отличий и продолжим.
Есть 4 основных составляющих url-a:
(?P<articleid>[0-9]+) – id статьи
(?P<returnid>[0-9]+) – id страницы в которой эта новость откроется(по умолчанию это та, с которой мы пришли, либо, указав параметр detailpage, мы можем ее изменить)
(?P<junk>.*?) – эта та самая часть «News-Module-Installed», которую модуль делает из заголовка или которую вы указываете сами при создании новости(алиас).
d,(?P<detailtemplate>.*?) – так указывается шаблон полного текста новости, если вы не используете шаблон по умолчанию.


Манипулируя этими компонентами можно составить свою ссылку, которую будет понимать модуль. В моем случае, я убрал надпись «[nN]ews», вместо разделяющих слешей поставил «-», чтоб получилась цельная ссылка без иерархии, и переставил местами алиас страницы с ее id и id страницы с которой пришли. Имя шаблона я поставил в самое начало и отделил слешем, чтоб он тоже участвовал в seo. Вы его можете расположить в другом месте, думаю, принцип понятен.


После того, как нужный нам url составлен, нужно настроить модуль так, чтоб он выдавал ссылки нужного вида, к примеру «Читать далее» или ссылка в заголовке статьи. Пока что он выводит url старого вида, которые уже не действуют. Для этого заходим в action.default.php и ищем строку 350 или


$prettyurl = 'news/'.$row['news_id'].'/'. ($detailpage!=''?$detailpage:$returnid) ."/$aliased_title";


где составляется ссылка для вывода. Ее модифицируем точно так же, как изменяли вид ссылки в предыдущем шаге.
Тут:


$row['news_id'] – id новости
($detailpage!=''?$detailpage:$returnid) – id страницы-источника или содержимое параметра detailpage
$aliased_title – алиас
И чуть ниже можно найти строку «$prettyurl .= '/d,' . $sendtodetail['detailtemplate'];», которая добавляет в конец информацию о шаблоне, если она есть.

В моем случае пришлось информацию о шаблоне переставить перед строкой 350, чтоб осуществить задуманное, а саму строку модифицировать как и в файле News.module.php, то есть переставить кое-что местами и заменить слеши на дефис. В итоге получилось:

if (isset($sendtodetail['detailtemplate']))
{
$prettyurl = $sendtodetail['detailtemplate'].'/';
}
$aliased_title = munge_string_to_url($row['news_title']);
$prettyurl .= "$aliased_title-".$row['news_id'].'-'.($detailpage!=''?$detailpage:$returnid);


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


P.S. Описанные номера строк актуальны для модуля News CMSMS версии 2.12. На других версиях не проверялось.