Что слетает в Joomla после апдейта и это нужно исправлять

Joomla — это система управления контентом, которая имеет своих поклонников, почитателей, пользователей и конечно команду, которая занимается её поддержкой и дальнейшей разработкой. Всё бы хорошо, если бы можно было создать что-то идеальное, чтобы работало, не ломалось и не нуждалось в обслуживании. В этой статье рассмотрим, что из внесённых изменений в работу Joomla слетает при её апдейте, и что приходится восстанавливать после каждого её апдейта.



BackUp сайта по любому случаю — это здоровая паранойя и сон младенца в промежутках между работой =)

Любую работу по вмешательству в любую работающую систему лучше всегда начинать с создание слепка того, что работает. Ибо работать оно не будет вечно — это во-первых, а во-вторых, кто из вас застраховал свой сайт на случай неудачного апдейта Joomla? Я не страховал, поэтому любой апдейт для меня повод сделать очередной бэкап сайта. ; )

Тем более, что делать его очень просто.

Накатывание апдейта Joomla на сарвер

Самое простое в Joomla — это накатить готовый апдейт. Тем более, что админка постоянно при входе напоминает о том, что вышла новая версия Joomla и что хорошо бы её обновить. А обновлять её действительно хорошо, так как разработчики не зря трудятся в поте лица, что-то улучшая в коде, в том числе закрывая найденные уязвимости, которые тоже случаются и которыми обязательно воспользуется какой-нибудь злодейский злодей, если ваша версия Joomla будет долго висеть без установленных обновлений, закрывающих вход в разные дырки всяким непрошеным гостям. Да и наверняка в новой версии будут присутствовать какие-нибудь приятные новые фишки или просто Joomla начнёт работать чуть быстрее и меньше нагружать сервер. Приятно же. =)

Что слетает в Joomla после апдейта и это нужно исправлять

Итак, апдейт Joomla успешно установлен. Теперь в порядке важности восстановления сайта после апдейта и приведение его в рабочее состояние, которое будет не хуже того, что было до апдейта.

1. Контекстная реклама Google

Для тех, кто делает сайт не просто потому что это круто или интересно, а чтобы он приносил доход, пожалуй самое важное — это в первую очередь восстановить выдачу контекстной рекламы.

Для этого требуется открыть файл /components/com_content/views/article/view.html.php и отредактировать выдачу рекламы в тексте статьи и в конце статьи:

2. Кнопки социальных сетей «Поделиться»

Чтобы не открывать файл /components/com_content/views/article/view.html.php дважды, сразу имеет смысл вставить в него и код вставки кнопок «Поделиться» в социальных сетях:

Код для пунктов 1 и 2: со 164-й строчки в файле view.html.php

		// читаем код рекламного блока в переменную $AdSense и $AdSense2
		$AdSense  = file_get_contents('./templates/protostar/includes/GaD-inarticle-up.php');
		$AdSense2 = file_get_contents('./templates/protostar/includes/GaD-inarticle-down.php');
		// читаем код вставки социальных кнопариков в переменные $YaShareUp и $YaShareDown
		$YaShareUp    = file_get_contents('./templates/protostar/includes/YaShare-up.php');
		$YaShareDown  = file_get_contents('./templates/protostar/includes/YaShare-down.php');

		// NOTE: The following code (usually) sets the text to contain the fulltext, but it is the
		// responsibility of the layout to check 'access-view' and only use "introtext" for guests
		if ($item->params->get('show_intro', '1') == '1')
		{
			$item->text = $YaShareUp . $item->introtext . $AdSense . '<br><br>' . $item->fulltext . $YaShareDown . $AdSense2; // выводим переменную $AdSense сразу после introtext и до fulltext
		}

2.1 Альтернативный вариант вставки через модули Joomla

// читаем код рекламного блока в переменную $AdSense и $AdSense2
// читаем код вставки социальных кнопариков в переменные $YaShareUp и $YaShareDown
// вставка кода Звёздного рейтинга
jimport( 'joomla.application.module.helper' );
$moduleUp = JModuleHelper::getModules('GaS-inarticle-up');
$moduleDown = JModuleHelper::getModules('GaS-inarticle-down');
$YamoduleDown = JModuleHelper::getModules('YaShare-down');
$attribs['style'] = 'none';
$AdSense  = JModuleHelper::renderModule($moduleUp[0], $attribs);
$AdSense2 = JModuleHelper::renderModule($moduleDown[0], $attribs);
$YaShareDown = JModuleHelper::renderModule($YamoduleDown[0], $attribs);
$SSR = '<div id="mb4star"></div>';

		// NOTE: The following code (usually) sets the text to contain the fulltext, but it is the
		// responsibility of the layout to check 'access-view' and only use "introtext" for guests
		if ($item->params->get('show_intro', '1') == '1')
		{
			$item->text = $item->introtext . $AdSense . '<br><br>' . $item->fulltext . $YaShareDown . $AdSense2 . $SSR; // выводим переменную $AdSense сразу после introtext и до fulltext
		}

2.2 Код для вставки Яндекс.Рекламы (общий для всех блоков, вставляется перед </head> в index.php шалона)

<!-- Yandex Native Ads -->
<script>window.yaContextCb=window.yaContextCb||[]</script>
<script src="https://yandex.ru/ads/system/context.js" async></script>

3. Восстанавливаем выдачу заголовков статей тегом <H1>

Для того, чтобы пользователи сайта (и поисковики) понимали, что является заголовком статьи, имеет смысл сразу вернуть заголовкам статей обрамление тегом <H1>. Для этого нужно внести изменения в файл /components/com_content/views/article/tmpl/default.php, который находится в папке по соседству с теми, что мы только что правили выше.

Исправляем код в файле default.php (с 52-й строчки)

		<?php if ($params->get('show_title')) : ?>
			<h1 itemprop="headline">
				<?php echo $this->escape($this->item->title); ?>
			</h1>
		<?php endif; ?>

4. Восстанавливаем выдачу заголовков категорий тегом <H2> на странице материала

Для того, чтобы не было несколько заголовков <H1> на странице, нужно в строке 31 файла /components/com_content/views/article/tmpl/default.php, в которой происходит выдача заголовка страницы, исправить выдачу его в теге <H2>, а не в <H1>. Подробно о том, как и почему, описано в → этой статье, а сам код должен выглядеть так:

	<?php if ($this->params->get('show_page_heading')) : ?>
	<div class="page-header">
		<h2> <?php echo $this->escape($this->params->get('page_heading')); ?> </h2>
	</div>
	<?php endif;

5. Восстанавливаем favicon

Далее, чтобы не сводить с ума поисковые машины тем, что у нас поменялся favicon сайта, сразу восстановим индексный файл шаблона сайта /templates/protostar/index.php, ну и до кучи, индексный файл index.php и файл логина login.php шаблона админки /administrator/templates/isis/ (если кто-то понял, насколько это удобно иметь собственную favicon админки при работе с сайтом):

Код для вставки в файл index.php шаблона Protostar сайта (со 134-й строчки)

	<!-- favicon -->
	<link rel="apple-touch-icon" sizes="180x180" href="/templates/favicon/apple-touch-icon.png">
	<link rel="icon" type="image/png" href="/templates/favicon/favicon-32x32.png" sizes="32x32">
	<link rel="icon" type="image/png" href="/templates/favicon/favicon-194x194.png" sizes="194x194">
	<link rel="icon" type="image/png" href="/templates/favicon/android-chrome-192x192.png" sizes="192x192">
	<link rel="icon" type="image/png" href="/templates/favicon/favicon-16x16.png" sizes="16x16">
	<link rel="manifest" href="/templates/favicon/manifest.json">
	<link rel="mask-icon" href="/templates/favicon/safari-pinned-tab.svg" color="#587bf5">
	<link rel="shortcut icon" href="/templates/favicon/favicon.ico">
	<meta name="apple-mobile-web-app-title" content="MoonBase">
	<meta name="application-name" content="MoonBase">
	<meta name="msapplication-TileColor" content="#587bf5">
	<meta name="msapplication-TileImage" content="/templates/favicon/mstile-144x144.png">
	<meta name="msapplication-config" content="/templates/favicon/browserconfig.xml">
	<meta name="theme-color" content="#587bf5">
	<!-- favicon -->

Код для вставки в файлов index.php и login.php шаблона isis админки (со 175-й и 108-й строчки соответственно)

<!-- favicon -->
<link rel="apple-touch-icon" sizes="180x180" href="/../administrator/templates/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" href="/../administrator/templates/favicon/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/../administrator/templates/favicon/favicon-194x194.png" sizes="194x194">
<link rel="icon" type="image/png" href="/../administrator/templates/favicon/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="/../administrator/templates/favicon/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/../administrator/templates/favicon/manifest.json">
<link rel="mask-icon" href="/../administrator/templates/favicon/safari-pinned-tab.svg" color="#aa44ee">
<link rel="shortcut icon" href="/../administrator/templates/favicon/favicon.ico">
<meta name="msapplication-TileColor" content="#aa44ee">
<meta name="msapplication-TileImage" content="../administrator/templates/favicon/mstile-144x144.png">
<meta name="msapplication-config" content="../administrator/templates/favicon/browserconfig.xml">
<meta name="theme-color" content="#aa44ee">
<!-- favicon -->

6. Вставка поддержки всплывашек с предупреждениями

Вставляем подготовленные файлы css и js в код индексного файла шаблона сайта ibdex.php:

...
<link href="/templates/protostar/css/moonbase.css" rel="stylesheet" />
</head>
...
<script src="/templates/protostar/js/moonbase.js"></script>
</body>
</html>

Подробности читать тут. Это для случая вставки через модуль Joomla (остальной код будет подцеплен и вставлен из соответствующего модуля).

7. Вставляем подсветку кода highlight.js и нумерацию строк кода

Перед закрывающим тегом </head> после вставки favicon вставляем подсветку кода highlight.js и нумерацию строк кода так, как описано в статьях про highlight.js:

<link rel="stylesheet" href="/templates/protostar/css/shades-of-purple.css">
<link rel="preload" href="/templates/protostar/js/highlight.pack.js" as="script">
<script src="/templates/protostar/js/highlight.pack.js"></script>

8. Убираем meta-тег name="generator"

Чтобы не открывать файл шаблона сайта дважды, сразу уберём meta-тег name="generator". Зачем он нам? ;)

Код для вставки в файл index.php шаблона Protostar сайта (в 16-ю строчку)

$this->setGenerator(null);

9. Вставка года начала проекта в копирайте сайта

И снова, чтобы не открывать файлы шаблонов сайта и админки дважды, лучше сразу вставить год начала проекта в копирайт сайта.

Код для правки в файл index.php шаблона Protostar сайта (231-я строчка) в шаблоне админки тоже где-то внизу файлов index.php и login.php

&copy; 2006—<?php echo date('Y'); ?> <?php echo $sitename; ?>

10. Вставляем анимацию favicon

Как работает анимация favicon подробно описано в → этой статье. Для включения анимации фавиконки нужно перед закрывающим тегом </body> в файле index.php шаблона добавить следующий код:

<script>
var counter			= 1;
var NumberOfPics	= 3 + 1;
var pause			= 400;
var nodeFavicon		= document.getElementsByTagName("link");

function animateFavicon() {
    for (var i = 0; i < nodeFavicon.length; i++)
    {
        if((nodeFavicon[i].getAttribute("rel") == "shortcut icon") || (nodeFavicon[i].getAttribute("rel") == "icon"))
        {
			nodeFavicon[i].setAttribute("href", "/templates/favicon/" + counter + ".png");
        }
    }
 if (counter < NumberOfPics) {
  setTimeout(animateFavicon, pause);
  counter++;
  if (counter == NumberOfPics) { counter = 1; }
 }
}

animateFavicon();
</script>

11. Вставляем код для объявлений уровня страницы Google AdSense

Для этого нужно скопировать код для объявлений уровня страницы в Google AdSense и прописать его в теге <head> файла шаблона index.php.

12. Стили шаблона Protostar

Изменение размера, семейства и цвета шрифта текста сайта

Вот не знаю, кому как, а для меня шрифт шаблона Protostar мелковат, сероват, да и семейство шрифтов какое-то слишком ретро. =)

Поэтому в файл /templates/protostar/css/template.css имеет внести некоторые изменения:

Строка 213:

font-family: Open Sans, sans-serif;

Строка 214:

font-size: 15px;

Строка 216

color: #1c2b40;

Подсветка активного подпункта Главного меню сайта на Joomla

В стандартном решении для меню сайта есть недоработки с подсветкой активного подпункта Главного меню сайта. Это решаемо и описано в статье:

Строка 7464

.navigation .nav-child li.active > a {background-color: #8888cc; color: #fff;}

Правильная нумерация списков в Joomla 3

Для того, чтобы смешанные нумерованные и ненумерованные списки в Joomla 3 и в хлебных крошках Kunena Forum выглядели красиво (как в договорах), нужно вставит ниже код:

Строки 7470..7482

ol {
	list-style: none;
	counter-reset: li;
}
ol > li:before {
	counter-increment: li; 
	content: counters(li,".") ". ";
	color: #d14;
	font-weight: 900;
}
ol.breadcrumb > li:before {
    content: '';
}

13. Добавление рекламных объявлений Google AdSense в виде сообщения в теме форума

В районе стр.120 в файле:

/components/com_kunena/template/crypsis/layouts/topic/item/default.php

14. Добавление кнопки «Удалить совсем» чтобы быстрее убивать спамеров

В районе стр.603 в файле:

/components/com_kunena/controller/message/item/actions/display.php

15. Добавление любых тэгов в заголовок модуля Joomla

Для добавления любых тэгов в заголовок модуля Joomla нужно добавить строчку filter="raw" в файл module.xml в районе 13-й строчки.

Полный путь к файлу:

administrator/components/com_modules/models/forms/module.xml

Полный текст поля title:

<field 
	name="title" 
	type="text"
	label="JGLOBAL_TITLE"
	description="COM_MODULES_FIELD_TITLE_DESC"
	class="input-xxlarge input-large-text"
	size="40"
	maxlength="100"
	required="true"
	filter="raw"
/>

16. Добавление любых тэгов в название заголовка статьи Joomla

Для добавления любых тэгов в название заголовка статьи Joomla нужно добавить строчку filter="raw" в файл article.xml в районе 30-й строчки.

Полный путь к файлу:

/administrator/components/com_content/models/forms/article.xml

Полный текст поля title:

<field 
	name="title" 
	type="text" 
	label="JGLOBAL_TITLE"
	description="JFIELD_TITLE_DESC"
	class="input-xxlarge input-large-text"
	size="40"
	required="true"
	filter="raw"
/>

17. Интеграция подсветки кода  highlight.js в редактор TinyMCE

Подробности в → этой статье.

Нужный файл:

/media/editors/tinymce/plugins/codesample/plugin.min.js

Чтобы преобразовать код HTML вставки для highlight.js нужно заменить:

function i(e,t,r){e.undoManager.transact(function(){var i=o(e);r=l.encode(r),i?(e.dom.setAttrib(i,"class","language-"+t),i.innerHTML=r,n.highlightElement(i),e.selection.select(i)):(e.insertContent('<pre id="__new" class="language-'+t+'">'+r+"</pre>"),e.selection.select(e.$("#__new").removeAttr("id")[0]))})}

на:

function i(e,t,r){e.undoManager.transact(function(){var i=o(e);r=l.encode(r),i?(e.dom.setAttrib(i,"class","language-"+t),i.innerHTML=r,n.highlightElement(i),e.selection.select(i)):(e.insertContent('<pre><code id="__new" class="language-'+t+'">'+r+"</code></pre>"),e.selection.select(e.$("#__new").removeAttr("id")[0]))})}

Чтобы поменять список языков вставки подсветки кода в TinyMCE на тот, который требуется и который был выбран при сборке highlight.js, нужно заменить:

function r(e){var t=[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}],n=e.settings.codesample_languages;return n?n:t}

на

function r(e){var t=[{text:"PHP",value:"php"},{text:"Apache",value:"apache"},{text:"Bash",value:"bash"},{text:"CSS",value:"css"},{text:"HTML",value:"html"},{text:"XML",value:"xml"},{text:"HTTP",value:"http"},{text:"JSON",value:"json"},{text:"JavaScript",value:"javascript"},{text:"Markdown",value:"markdown"},{text:"Nginx",value:"nginx"},{text:"Properties",value:"properties"},{text:"SQL",value:"sql"},{text:"Shell",value:"shell"}],n=e.settings.codesample_languages;return n?n:t}

18. Уязвимость конфига Joomla к взлому изнутри. Уязвимость configuration.php

В файле:

/administrator/components/com_config/model/application.php

в 481 строке:

if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0640'))

в 501 строке:

if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0440'))

Подробности про эту уязвимость → тут.

Заключение

Это пока всё, что нужно накатить обратно и поправить в движке Joomla и файлах шаблонов и стилей после того, как сделан апдейт Joomla.

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

Оставляйте свои комментарии ниже или на форуме в теме обсуждения этой статьи. ; )

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню