Войти Регистрация

Вход на сайт

Логин *
Пароль *

K2 - убираем из ссылки item и id

Четверг, 23 октября 2014 18:15 Автор 

После установки в Joomla компонента K2, который является мощнейшим конструктором контента (CCK), в ссылках на материалы появляются item и id.

Возможно для кого-то это покажется не критичным, но для многих это раздражающий фактор в борьбе за "красивые ссылки".

В данном случае я не исключение, поэтому поспешил избавиться от этих ненужных "вставок" в ссылки.

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

Screenshot 2

Для того, чтобы почистить ссылки нужно будет найти файл router.php в файловой структуре компонента K2. 

"корневая папка вашего сайта"/components/com_k2/router.php

 

Нужно заменить содержимое этого файла на приведённый ниже код

{slider title="Нажмите для просмотра кода" title-opened="Код файла router.php"  class="red"}

<?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;
  }
{slider title="Скачать файл router.php" open="true"}

{/sliders}

После замены кода ссылки станут более аккуратными.

Это наиболее часто встречаемый способ на просторах Internet.

Однако, разработчиками K2 предусмотрен более простой способ, который заключается в установке пары галочек в настройках компонента

Заходим в настройки K2 и во вкладке "Расширенные" устанавливаем два значения, как показано на рисунке ниже

k2 sef

Проверено на версии K2 2.6.8 и не надо лезть в код!

Stanislav

Master's Degree

Сайт: skopil.ru
Авторизуйтесь, чтобы получить возможность оставлять комментарии

Новые статьи

  • Joomla 3.x Добавление позиций в шаблон на фреймворке Helix 3
    Joomla 3.x Добавление позиций в шаблон на фреймворке Helix 3

    С помощью фреймворка Helix сделано множество шаблонов. Конструктор позволят делать многие операции быстро и визуально понятно. Однако с версткой макета есть один нюанс.

    Подробнее ...
  • Сбой при обновлении расширений Regular Labs
    Сбой при обновлении расширений Regular Labs

    Давно пользуюсь различными расширениями от студии Regular Labs, но недавно при очередном обновлении через панель администратора Joomla я получил ошибку обновления. При этом не все расширения выдавали такую ошибку. Разумеется, решение было найдено, делюсь :)

    Подробнее ...
  • Adobe Photoshop - чёрный экран при создании нового файла
    Adobe Photoshop - чёрный экран при создании нового файла

    Новые фишки от компании Adobe видимо работают не на всех устройствах, то ли видеопроцессоры не тянут, то ли ещё какие заморочки, но суть в том что многие сталкиваются с проблемой сразу при открытии Adobe Photoshop и видят черный экран. А при создании нового файла наблюдается пустое серое окно, что тоже не очень приятно. В этой статье опишу как исправить это.

    Подробнее ...
  • Intel Dual Band Wireless-AC 7260. Ошибки.
    Intel Dual Band Wireless-AC 7260. Ошибки.

    Для тех, кто решил установить себе модуль WiFi/Bluetootth с поддержкой двух диапазонов WiFi от компании и столкнулся с ошибками Bluetooth код 43 или код 10, а также с отсутствием поддержки режима "ac" WiFi, собственно и пригодится данная статья, в которой я опишу решение данных проблем.

    Подробнее ...
  • RSForm прокрутка вверх страницы многостраничной формы
    RSForm прокрутка вверх страницы многостраничной формы

    Рассмотрим еще одно небольшое, но очень важное усовершенствование мощного конструктора форм RSForm для CMS Joomla. На этот раз затронем многостраничную форму, когда очень большая форма разбивается с помощью инструмента "Разделитель страниц" на несколько страниц с навигацией. Не расписываю как это делается, предполагается, что у нас уже есть подобная форма и нужно её немного поправить для лучшей визуализации.

    Подробнее ...
  • RSForm маска ввода телефона
    RSForm маска ввода телефона

    Столкнулся с очень интересным и мощным конструктором форм RSForm под управлением Joomla CMS. Кто хоть раз им пользовался понимает, что функционал данного конструктора сразу не освоить, а умеет этот компонент очень много! Не буду сильно расписывать данный конструктор, а перейду непосредственно к теме статьи. Хочу поделиться простым способом подключения ввода телефонного номера по определенной маске.

    Подробнее ...
  • Страница 404 ошибки в Joomla 3 с помощью пункта меню
    Страница 404 ошибки в Joomla 3 с помощью пункта меню

    Ранее в статье Страница 404 ошибки в Joomla 3.9 был описан способ подключения страницы с помощью штатного материала Joomla. Однако, это не всегда подходит, особенно в сложных шаблонах, где используются конструкторы контента. В данной статье речь пойдет о способе подключения страницы 404 используя пункт меню, что позволит подключить страницу в любом оформлении.

    Подробнее ...