Статьи, приемы, хитрости и Уроки по Photoshop, Illustrator, Web дизайну и кодингу.

K2 - как убрать item и id статьи из url

После установки компонента К2 на любую версию CMS Joomla (1.5, 2.5, 3.0), ссылки в адресной строке выглядят не совсем так как в структуре меню или каталогов в административной части.

Появляютя дополнительные данные в поле URL ("item" и "ID" статьи):

item

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

Необходимо все-таки убрать item и id статьи из url. Вобщем решение как всегда на поверхности - и можно сделать это путем редактирования файла «router.php» в структуре сайта:

rout

Путь где лежит файл - "корневая папка сайта"/components/com_k2/router.php.

Перед тем как его открыть я сделал копию файла на всякий пожарный.

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

<?php

// no direct access defined('_JEXEC') or die('Restricted access'); //SELECT alias FROM `j25_k2_items` WHERE id = "1" LIMIT 1 //SELECT id FROM `j25_k2_items` WHERE alias = "test" LIMIT 1 function K2BuildRoute( & $query) {

$segments = array ();

$menu = & JSite::getMenu(); if ( empty($query['Itemid'])) { $menuItem = & $menu->getActive(); } else { $menuItem = & $menu->getItem($query['Itemid']); } $mView = ( empty($menuItem->query['view']))?null:$menuItem->query['view']; $mTask = ( empty($menuItem->query['task']))?null:$menuItem->query['task']; $mId = ( empty($menuItem->query['id']))?null:$menuItem->query['id']; $mTag = ( empty($menuItem->query['tag']))?null:$menuItem->query['tag'];

if ( isset ($query['layout'])) { unset ($query['layout']);
}

if ( $mView == @$query['view'] && $mTask == @$query['task'] && $mId == @intval($query['id']) && @intval($query['id']) > 0 ) { unset ($query['view']); unset ($query['task']); unset ($query['id']); }

if ( $mView == @$query['view'] && $mTask == @$query['task'] && $mTag == @$query['tag'] && isset($query['tag']) ) { unset ($query['view']); unset ($query['task']); unset ($query['tag']); }

if ( isset ($query['view'])) { $view = $query['view']; $segments[] = $view; unset ($query['view']); }

if (@ isset ($query['task'])) { $task = $query['task']; $segments[] = $task; unset ($query['task']); }

if ( isset ($query['id'])) { $id = $query['id']; $segments[] = $id; unset ($query['id']); }

if ( isset ($query['cid'])) { $cid = $query['cid']; $segments[] = $cid; unset ($query['cid']); }

if ( isset ($query['tag'])) { $tag = $query['tag']; $segments[] = $tag; unset ($query['tag']); }

if ( isset ($query['year'])) { $year = $query['year']; $segments[] = $year; unset ($query['year']); }

if ( isset ($query['month'])) { $month = $query['month']; $segments[] = $month; unset ($query['month']); }

if ( isset ($query['day'])) { $day = $query['day']; $segments[] = $day; unset ($query['day']); }

if ( isset ($query['task'])) { $task = $query['task']; $segments[] = $task; unset ($query['task']); }

// Изменения. if(isset($segments[0])) { if($segments[0]=='item') { $alias = explode(':',$segments[1]); $segments[0]=null; $segments[1]=$alias[1]; } } // Изменения. Конец.

return $segments; }

function K2ParseRoute($segments) { $vars = array ();

// Изменения. $id = false; if(count($segments)==1) { $alias = $segments[0]; $alias = str_replace ( ':' , '-' , $alias); $db = &JFactory::getDBO(); $query = 'SELECT id FROM `#__k2_items` WHERE alias = "'.$alias.'" LIMIT 1'; $db->setQuery($query); $id = $db->loadResult(); }

if($id) { $vars['view'] = 'item'; $vars['task'] = $id.':'.$alias; $vars['id'] = $vars['task']; }else{
// Изменения. Конец.

$vars['view'] = $segments[0]; if (!isset($segments[1])) $segments[1]=''; $vars['task'] = $segments[1];

if ($segments[0] == 'itemlist') {

switch($segments[1]) {

case 'category': $vars['id'] = $segments[2]; break;

case 'tag': if (isset($segments[2])) $vars['tag'] = $segments[2]; break;

case 'user':
if (isset($segments[2]))
$vars['id'] = $segments[2];
break;

case 'date': if (isset($segments[2])) $vars['year'] = $segments[2]; if (isset($segments[3])) $vars['month'] = $segments[3]; if (isset($segments[4])) { $vars['day'] = $segments[4]; } break;

}

}

else if ($segments[0] == 'item') {

switch($segments[1]) {

case 'edit': if (isset($segments[2])) $vars['cid'] = $segments[2]; break;

case 'download': if (isset($segments[2])) $vars['id'] = $segments[2]; break;

default: $vars['id'] = $segments[1]; break;

}

}

if($segments[0] == 'comments' && isset($segments[1]) && $segments[1] == 'reportSpammer') {

$vars['id'] = $segments[2]; }

//Изменения. }

return $vars; }

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

item2

Если в конце ссылки вдруг окажется "слэш" - найдите в этом же файле стороки:

if(isset($segments[0]))
{
if($segments[0]=='item')
{
$alias = explode(':',$segments[1]);
$segments[0]=$alias[1];
$segments[1]=null;
}
}

и замените на эти:


if(isset($segments[0]))
{
if($segments[0]=='item')
{
$alias = explode(':',$segments[1]);
$segments[0]=null;
$segments[1]=$alias[1];
}
}

Последнее изменениеЧетверг, 24 Октябрь 2013 15:52
  • Оцените материал
    (8 голосов)
  • Опубликовано в Web coding
  • Прочитано 15722 раз
SeRbGa

SeRbGa

мечтатель

Сайт: www.serbga.ru

Оставить комментарий

Комментарии  

Дмитрий
0 #19 Дмитрий 12.06.2015 09:29
Отлично, но только появились новые дубли, теперь страницы доступны
/item/108-stili-tekstovyj-miks-3
stili-tekstovyj-miks-3
Цитировать
SeRbGa
0 #18 SeRbGa 05.04.2015 17:11
Изучая настройки K2 наткнулся на пункт Advanced SEF Settings - в пункте "Расширенные" - там все можно настроить. И item убрать и ID и оставить как нужно -вобщем все в настройках можно сделать
Цитировать
Дмитрий
0 #17 Дмитрий 04.04.2015 12:35
Отлично. спасибо таким людям что они есть!
Цитировать
MT.AlucarD
0 #16 MT.AlucarD 06.03.2015 06:42
На joomla 3x не работает, после проделанных манипуляций сайт полностью перестал работать, благо сделал копию router.php Кто-нибудь знает решение под Joomla 3x?
Цитировать
Владислав
0 #15 Владислав 02.11.2014 12:59
Спасибо большое решение работает, даже слеш не надо было убирать
Цитировать
SeRbGa
0 #14 SeRbGa 01.11.2014 16:29
я не пробовал, так что сказать не могу.
Цитировать
Maxim
0 #13 Maxim 01.11.2014 13:56
Цитирую Дима:
А как сделать чтоб убрать только item ? Проблема в том что у меня часто встречаются одинаковые заголовки, а вручную подгонять всегда алиасы как-то неохота.


Удалось сделать? та же самая проблема
Цитировать
Игорь
0 #12 Игорь 28.10.2014 10:46
Исчерпывающий ответ!
Цитировать
Игорь
0 #11 Игорь 27.10.2014 17:16
Спасибо
Цитировать
Стас
0 #10 Стас 19.10.2014 21:48
Спасибо SeRbGa, несколько раз переписал алиасы и почистил кэш. вроде все ок.
Цитировать

Добавить комментарий


Защитный код
Обновить

Наверх

Популярные статьи

  • 1
  • 2
  • 3
  • 4

последние комментарии

ON-Line Блог SeRbGa.ru предоставляет самую свежую и актуальную информацию для веб-дизайнеров и разработчиков в виде тематических материалов, уроков созданных собственноручно, а так же переводов статей и новостей, полученных с зарубежных информационных ресурсов.

Копирование материалов сайта разрешено только с указанием активной индексируемой гиперссылки на данный сайт!

ДИСКЛЕЙМЕР/DISCLAIMER:

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