K2 - как убрать item и id статьи из url
После установки компонента К2 на любую версию CMS Joomla (1.5, 2.5, 3.0), ссылки в адресной строке выглядят не совсем так как в структуре меню или каталогов в административной части.
Появляютя дополнительные данные в поле URL ("item" и "ID" статьи):
Конечно это не глобальная проблема и даже с этим все работать будет, но для поисковиков и удобства пользователей -это беда.
Необходимо все-таки убрать item и id статьи из url. Вобщем решение как всегда на поверхности - и можно сделать это путем редактирования файла «router.php» в структуре сайта:
Путь где лежит файл - "корневая папка сайта"/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; }
После замены кода ссылки примут нормальный вид:
Если в конце ссылки вдруг окажется "слэш" - найдите в этом же файле стороки:
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];
}
}
Комментарии
/item/108-stili-tekstovyj-miks-3
stili-tekstovyj-miks-3
Удалось сделать? та же самая проблема