RSS
 

 

Как отключить проверку на дату публикации в Joomla.

09 Дек


Меня часто спрашивают, как в Joomla отключить проверку на дату публикации?

Эта проверка создает дополнительную нагрузку на MySQL, не давая нормально кешировать запросы. Как я уже говорил в своей статье Ускорение Joomla, нужно максимально уменьшить количество запросов и в том числе уникальных запросов к базе данных. Это позволит их эффективно кешировать.

Я расскажу, как это сделать
Мой способ не является популярным и подходит для опытных пользователей знающих php и не боящихся влезать во внутренний код стандартного ядра joomla. Естественно, изменять стандартные компоненты не лучший метод, но это, по моему мнению, единственный правильный способ отключить на проверку дату публикации.


Что нужно сделать?

Необходимо пройтись по фалам компонента com_content и использующим вами модулям и плагинам типа mod_mostread, mod_latestnews и т.п. и внести изменения в их код вручную.

Ориентировочно нужно будет исправить фалы в компонента com_content
\components\com_content\modules\article.php
\components\com_content\modules\category.php
\components\com_content\modules\frontpage.php
\components\com_content\modules\section.php

Так же нужно будет исправить фалы хелперы helper.php модулей mod_latestnews, mod_mostread, mod_related_items, mod_sections и других которые используют статьи и включены у вас.

Что меняем?

Для этого нужно искать текст "publish_up" и "publish_down" и в нужных местах изменять код, так чтобы не учитывалась дата публикации.
Например, в \components\com_content\models\frontpage.php я за комментировал эти строки

203
204
   $where .= ' AND ( a.publish_up = '.$this->_db->Quote($nullDate).' OR a.publish_up <= '.$this->_db->Quote($now).' )' .
                 ' AND ( a.publish_down = '.$this->_db->Quote($nullDate).' OR a.publish_down >= '.$this->_db->Quote($now).' )';

Можно собрать все изменения и выложить компонент и модули, но они будет актуальны только под определенную версию joomla, и с обновлением новой версии практически все привидеться повторить в тех файлах, которые заменит новая версия…


Еще один способ

Еще один способ позволяющий решить проблему  большого количества уникальных запросов в базу - это вместо описанного выше действия внести исправления всего в одну функцию JFactory::getDate();

Для этого в фале \libraries\joomla\utilities\date.php

52
53
54
55
56
57
58
59
60
	function __construct($date = 'now', $tzOffset = 0)
	{
		if ($date == 'now' || empty($date))
		{
			$this->_date = strtotime(gmdate("M d Y H:i:s", time()));
			return;
		}
 
		$tzOffset *= 3600;

нужно исправить  gmdate("M d Y H:i:s", time()) на gmdate("M d Y", time()) и точность проверок на даты с текущей датой станет до дня.

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

Но способ реально действует, хотя и не отключает проверку на дату публикации, а просто снижает ее точность до дня в место секундной по умолчанию

На всякий случай напомню, что внося любые изменения в движок joomla и ее стандартные компоненты, вы можете сделать не работоспособной. Поэтому делайте резервные копии и не тренируйтесь на рабочем сайте.


 
 

Метки: , , 09.12.2010

 

  • embomfoky

    очень интересно, спасибо

  • Lama

    Тоже не заметил уменьшения количества запросов после отключения проверки времени публикации. Может это работает вкупе с чем-то еще?

    • Виталий Тюменцев

      Это уменьшает количество уникальных запросов и при использовании компонента кеширования запросов QCache приводит к их эффективному кешированию. Я об этом и писал в Ускорение Joomla

  • Виталий Тюменцев

    При работающем компоненте qcahe я добивался таким образом уменьшения запросов на главной странице с примерно 40 до 4

  • ANT

    запросов в БД меньше не стало…

  • Артур

    Спасибо за идею, попробую поиграться с JFactory::getDate.