jComments 2.3: Ошибка is_a(): Deprecated.

Во время создания блога да и других сайтов, в глобальных настройках я всегда выставляю показ ошибок - "для разработчиков (все ошибки PHP)", что бы устранить косяки кодеров. Ведь любые ошибки, даже самые незначительные напрягают сервер. Хотя с последним я утверждать не буду - не системный администратор. Но чистый код все же лучше!

И так, в процессе создания блога столкнулся с косяком разработчиков jComments 2.3, странно но почему то они все еще используют функцию is_a в коде, которая уже как бы устарела и в php5 не рекомендуется к применению. По видимому она унаследовала со времен Joomla 1.0

Сама функция проверяет принадлежность текущего объекта к указанному классу. В PHP 5 и выше рекомендуется использовать оператор instanceof. В общем прекращаем лить воду и исправляем баг.

В файле сайт.ру/components/com_jcomments/libraries/joomlatune/template.php находим:

if (!is_a($tmpl, 'JoomlaTuneTemplate')) {
	unset($tmpl);
	$this->raiseError('Incorrect template: ' . $template);
	return false;
}

 и заменяем на:

if (!($tmpl instanceof JoomlaTuneTemplate)) {
	unset($tmpl);
	$this->raiseError('Incorrect template: ' . $template);
	return false;
}

Вот как то так.

Вот еще парочка баг-фиксов для бэкенда:

Открываем сайт.ру/administrator/components/com_jcomments/admin.jcomments.html.php:

<td align="center"><?php echo JCommentsHTML::_('grid.checkedout', $row, $i); ?></td>

меняем на:

<td align="center"><?php echo JHtml::_('grid.id', $i, $row->id); ?></td>

Хак исправляет баг с checkbox списка комментариев.

Открываем сайт.ру/administrator/components/com_jcomments/admin.jcomments.migration.php:

function getSources()

меняем на:

public static function getSources()

Небольшая правочка в синтаксисе php.

Ну и для тех кто не любит копирайты, открываем сайт.ру/components/com_jcomments/jcomments.class.php:

if ($lang == 'russian' || $lang == 'ukrainian' || $lang == 'belorussian' || $lang == 'ru-RU' || $lang == 'uk-UA' || $lang == 'be-BY') {
	$tmpl->addGlobalVar('support', base64_decode('PGEgaHJlZj0iaHR0cDovL3d3dy5qb29tbGF0dW5lLnJ1IiB0aXRsZT0iSkNvbW1lbnRzIiB0YXJnZXQ9Il9ibGFuayI+SkNvbW1lbnRzPC9hPg=='));
} else {
	$tmpl->addGlobalVar('support', base64_decode('PGEgaHJlZj0iaHR0cDovL3d3dy5qb29tbGF0dW5lLmNvbSIgdGl0bGU9IkpDb21tZW50cyIgdGFyZ2V0PSJfYmxhbmsiPkpDb21tZW50czwvYT4='));
}

меняем на:

if ($lang == 'russian' || $lang == 'ukrainian' || $lang == 'belorussian' || $lang == 'ru-RU' || $lang == 'uk-UA' || $lang == 'be-BY') {
	$tmpl->addGlobalVar('support', '');
} else {
	$tmpl->addGlobalVar('support', '');
}

Спасибо за внимание!