Я предполагаю, что вы используете Joomla1.0?
Joomla буферизует содержимое, используя выходной буфер PHP. то есть: ob_start ().
Вы можете получить содержимое, используя: ob_get_contents ();
Таким образом, вы можете иметь регулярное выражение, которое проверяет JQuery. Что-то вроде:
$jquery_loaded = preg_match("/<script.*?src=[\"']jquery[^\"']\"/i", ob_get_contents());
должно быть достаточно хорошо. (Я не проверял это).
Использование ob_get_contents () может не работать в ситуациях, поскольку выходной буфер PHP может быть вложенным. Вы можете запустить как можно больше буферов внутри буферов.
Для Joomla1.5 вы можете получить буфер через API, который гарантирует, что вы всегда получаете выходные данные Joomla.
$Document =& JFactory::getDocument();
$buffer = $Document->getBuffer();
Независимо от того, используете ли вы Joomla1.0 или 1.5, вы должны заметить, что Joomla может добавить в буфер в любой точке до того, как он отобразит вывод (вызывает ob_flush () или эквивалентный). Таким образом, ваша проверка JQuery должна учитывать, что JQuery может быть загружен после проверки.
Обратите внимание, что буфер Joomla создается не только для HTML, но может быть CSS, JavaScript, XML, JSON и т. Д. Поэтому вы можете проверить наличие HTML перед выполнением тестов JQuery. Вы также можете проверить на панели администратора.
$mainframe =& JFactory::getApplication();
$doctype = $document->getType();
// deactivate for backend
if ($mainframe->isAdmin() || $doctype != 'html') {
return false;
}
Для справки вот пример системного плагина, который частично делает то, что вы хотите. Это плагин совместимости для MooTools1.2.
<?php
/**
* MooTools1.2 w/ 1.1 compat for AjaxChat
* @copyright www.fijiwebdesign.com
* @author gabe@fijiwebdesign.com
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
// included only
defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed!' );
jimport( 'joomla.plugin.plugin' );
/**
* Joomla PHP Speedy Integration
*
* @author gabe@fijiwebdesign.com
*/
class plgSystemAjaxchat extends JPlugin
{
/**
* Constructor
*
* For php4 compatability we must not use the __constructor as a constructor for plugins
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
* This causes problems with cross-referencing necessary for the observer design pattern.
*
* @access protected
* @param object $subject The object to observe
* @param array $config An array that holds the plugin configuration
* @since 1.0
*/
function plgSystemAjaxchat(& $subject, $config)
{
parent::__construct($subject, $config);
$mainframe =& JFactory::getApplication();
$document =& JFactory::getDocument();
$doctype = $document->getType();
// deactivate for backend
if ($mainframe->isAdmin()) {
return false;
}
// add mootools 1.2
if ( $doctype == 'html' ) {
$document->addScript('components/com_ajaxchat/js/mootools-1.2-core.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-more.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-core-compat.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-more-compat.js');
}
}
/**
* After Templte output is in buffer
*/
function onAfterRender() {
$mainframe =& JFactory::getApplication();
$document =& JFactory::getDocument();
$doctype = $document->getType();
// deactivate for backend
if ($mainframe->isAdmin()) {
return false;
}
// Only render for HTML output
if ( $doctype !== 'html' ) {
return;
}
// get the output buffer
$body = JResponse::getBody();
// remove mootools if not needed
if (stristr($body, 'mootools.js') || stristr($body, 'mootools-uncompressed.js')) {
$body = preg_replace("/<script.*?mootools(-uncompressed)?\.js.*?<\/script>/i", '', $body);
} else {
$body = preg_replace("/<script.*?mootools-1\.2\-.*?\.js.*?<\/script>[\s\t\r\n]*/i", "\n", $body);
}
JResponse::setBody($body);
}
}
?>