^

Пользователи

Блоги пользователей

Ваши сообщения

Вы не авторизованы.

Категория: General  /  Создано: 03/31/2017 14:16:30  /  Внесены изменения: 09/21/2017 21:30:39

Итак, преступим к rel="canonical"

Все началось с того, что я поставил J3 и посмотрел исходный код, кроме стандартного Open suorce... я обнаружил этот самых rel... и посмотрел как он работает. Дело все в том, что почему-то разработчики сделали (как-будто специально) многие ошибки и «нагрузили» J3 так, чтобы потом пришлось изрядно постараться над своей сборкой. Так вот, если ввести URL http://site.org/300 , где 300 – это ID материала, то rel="canonical" выдавал запрошенную ссылку вместо реальной ссылки на материал, которую можно посмотреть в блоге категории. Например, она должна быть такой: http://site.org/video/300-videoklip-loya . Однако, этот самый каноникал не хотел правильно работать. Я его переделал. Для начала убрал его вызов в файле:

../plugins/system/sef/sef.php

закомментировал строку:

//$doc->addHeadLink(htmlspecialchars($link), 'canonical');

сделал:
/*
$doc->addHeadLink(htmlspecialchars($link), 'canonical'
); */

После чего, произвел некоторые манипуляции с выводом данных из БД. Условие: стандартная J3, вывод стандартного материала (т.е. ни K2, ни ZOO, просто Joomla и её файлы в components/com_content/views/article/tmpl)
Нужно найти файл

../components/com_content/views/article/tmpl/default.php

и в любое его место (желательно почти вверху, после $user = JFactory::getUser(); $info = $params->get('info_block_position', 0);) вставить код:

//достаем ID материала, который запросили
$id_content = JRequest::getInt('id', 0);

//достаем псевдоним ссылки (alias) материала
$db = JFactory::getDBO();
$query = 'SELECT alias,catid FROM #__content WHERE state=1 AND id = "'.$id_content.'"';
$db->setQuery($query);
$rows = $db->loadObjectList();

foreach ( $rows as $row )
{
$cont_alias = $row->alias;
$cont_catid = $row->catid;
}

//достаем alias категории
$query2 = 'SELECT path FROM #__menu WHERE catid_my = "'.$cont_catid.'"';
$db->setQuery($query2);
$rows2 = $db->loadObjectList();

foreach ( $rows2 as $row2 )
{
$cont_path = $row2->path;
}

//подставляем для своего сайта. можно, конечно, сделать универсальный код и вместо домена подставлять, например, JUri::base(), но зачем лишний раз нагружать PHP в статике?
$href = "http://site.org/".$cont_path."/".$id_content."-".$cont_alias;
//можно проверить вывод link в шапке так: echo $doc->addHeadLink("123");
$doc =& JFactory::getDocument();
//собственно выводим результат:
$doc->addHeadLink( $href, 'canonical', 'rel');

Внимание catid_my - это вручную созданная в структуре таблицы _menu, которой присвоены ID категорий. Логика: каждому меню присваиваю соответствующее ID категории. Например, у нас есть категория Яблоки с ID 26, я иду в базу данных, создаю новую ячейку в ПРЕФИКС_menu, после чего вручную прописываю ID категорий в соответствующее название пункта меню Яблоки, которое собственно и выводит эту категорию на сайте. Иначе я не знаю как сделать, но сделать стоит это всего 1 раз, даже если у тебя много категорий.

Теперь как бы мы не запрашивали URL http://site.org/300 или http://site.org/video/300-videoklip-loya, всегда будет выводится тот URL, который должен, а именно – http://site.org/video/300-videoklip-loya в rel="canonical"

 

 

Изготовление входных групп по материалам сайта. | Молдинги купить европласт. | lipo 6 купить в риге

Copyrigcht © 2017 Яндекс.Метрика