1 1 1 1 1 1 1 1 1 1 Rating 4.95 (55 Votes)

Попытка разработчиков в Джумле 3 решить проблему с атрибутом rel="canonical" окончилась фиаско.

Поэтому, сделаем возможность прописать rel="canonical" для каждого материала.

Обновление. Более изящный способ добавить рел-каноникал в Джумлу 3

В джумле существует куча полей которые я никогда не прописываю, но которые могут выводить информацию в мета тегах, это:

<meta name="rights" content="авторские права" />
<meta name="author" content="автор" />
<meta name="xreference" content="внешняя ссылка" />
<meta name="keywords" content="ключи">

Я решил использовать одно из ненужных полей для вывода ссылки на каноническую страницу:

<link rel="canonical" href="" />

Мой выбор пал на мета-тег keywords, потому что он есть во всех внешних компонентах (особено меня интересова JoomGallery).

Итак, для того что бы сделать настраиваемый и управляемый рел каноникал нужно открыть файл head.php, находящийся по адресу:

/libraries/joomla/document/html/renderer

Найти вот такой код:

// Generate META tags (needs to happen as early as possible in the head)
		foreach ($document->_metaTags as $type => $tag)
		{
			foreach ($tag as $name => $content)
			{
				if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type'))
				{
					$buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
				}
				elseif ($type == 'standard' && !empty($content))
				{
					$buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
				}
			}
		}




И заменить на этот:

// Generate META tags (needs to happen as early as possible in the head)
		foreach ($document->_metaTags as $type => $tag)
		{
			foreach ($tag as $name => $content)
			{
				if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type'))
				{
					$buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
				}
				elseif ($type == 'standard' && !empty($content))
				{
//canonical
                if ($content) {
                if ($name=='keywords') {
                $buffer .= $tab . '<link rel="canonical" href="' . htmlspecialchars($content) . '" />' . $lnEnd; 
                continue;
                }
					$buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
					}
				}
			}
		}




Теперь, если нужен любой рел-каноникал, мне достаточно прописать его в поле «Мета-тег Keywords».

P.S. Метод так же работает в Joomla 2.5

P. P.S. При обновлении Джумлы файл head.php, обновиться. Поэтому сделайте дубль и после замените его.

*   *   *

Как верно замечено в комментариях, в последних версиях Джумлы файл который нужно править находиться по адресу:

/libraries/src/Document/Renderer/Html

И называется - HeadRenderer.php

Но я нашел лучшее решение для добавления управляемого Рел Каноникал в Джумла 3.

Это плагин ReReplacer от NoNumber. С помощью этого плагина можно заменить не только текст в материалах, но и HTML код на который вам нужен.

Скачать можно здесь (перебрал несколько версий пока плагин установился)

Я заменил

<meta name="keywords" content="

На

<link rel="canonical" href="

Выбрал Область поиска - Везде. Все заработало!

Замена кода плагином ReReplacer

 

(Кое что еще удалил и заменил, что бы сайт стал проходить валидацию.)

 

Комментарии  

0 # Аркадий Андреевич AAndreevich 23.07.2016 12:40
Спасибо! Избавил думать :D
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 07.03.2017 11:40
В папке head.php ничего подобного больше нет, Joomla 3.6.5.
Ответить | Ответить с цитатой | Цитировать
-1 # Игорь 14.03.2017 18:37
В папке head.php ничего подобного больше нет, Joomla 3.6.5.!!! вопрос не решен!
Ответить | Ответить с цитатой | Цитировать
+1 # Платон 15.03.2017 06:58
Вопрос не решен! :lol: ..Как категорично.
Бля, чел поделился отличной идеей. А самому поискать где этот файл находиться в новой джумле, что религия не позволяет?
Ответить | Ответить с цитатой | Цитировать
0 # Оксана 04.07.2017 06:49
Заменила код как указано в данной статье, ввожу ссылку в поле «Мета-тег Keywords»в пункте меню Joomla: после сохранения «Мета-тег Keywords» остается чистым, ничего не меняется! что делаю ни так? :sad:
Ответить | Ответить с цитатой | Цитировать
+2 # Сергей 05.08.2017 18:52
А что же будет со страницами, где в поле "keywords" введены именно ключевые слова?
Ответить | Ответить с цитатой | Цитировать
+1 # Владимир 04.08.2018 05:44
Если кому-то нужно, в Joomla 3.8.10 этот файл был обнаружен в другом расположении: /libraries/src/Document/Renderer/Html
Ответить | Ответить с цитатой | Цитировать
0 # Иван 13.11.2019 04:07
Просто суппер. С этим плагином я такого сотворю. Спасибо. ;-)
Ответить | Ответить с цитатой | Цитировать

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

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

Жми!
Подпишись на обновление
 
Поиск по сайту
Новые материалы
Последнии Комментарии