Y a-t-il un moyen de vérifier si JQuery est chargé à l'aide de PHP?
J'ai deux plug-ins différents dans Joomla qui chargent le JQUERY JS, mais lorsqu'il est inclus plus d'une fois qu'il ne fonctionne pas correctement. P>
Pour expliquer le processus un peu plus: Joomla offre une capacité à intercepter la source HTML avant qu'elle ne soit rendue, essentiellement travaillant sur le code source lui-même. P>
Ceci utilise la fonction: p> $ Row est le contenu HTML de la page qui peut être analysé. P> Je pensais que peut-être qu'un preg_match pourrait fonctionner mais n'a pas beaucoup d'expérience avec elle. P> P>
6 Réponses :
devrait d'abord faire le chèque en JavaScript. Par exemple: alors, vous pouvez envoyer un message par AJAX au serveur. p> p>
Sauf si Joomla fournit un moyen de vous dire quels scripts y compris? (Zend Framework a une telle liste) P>
Ce n'est pas possible. PHP est le côté serveur, tandis que JavaScript (la langue jQuery est écrit) est le côté du client. Code PHP doit être exécuté avant le prochain texte qui inclut JavaScript même être envoyé à l'utilisateur et tenté d'être chargé.
Votre meilleur pari est de ne pas inclure JQuery plus d'une fois. Vous pouvez le faire en remplaçant tout votre inclus avec quelque chose comme: p> Ceci est un peu piraté, et il pourrait y avoir une meilleure façon. P> Edit: Après un peu de pensée: cela ne peut même pas fonctionner à cause de l'asynchronicité de chargement de la bibliothèque JQuery du serveur. Il semble que la meilleure façon de le faire serait avec un gestionnaire d'événements code> code> au script include, mais le DOM ne prend pas en charge cela. P> EDIT 2: D'accord, Maintenant, je pense que votre meilleur pari serait de simplement l'inclure une fois dans la page en utilisant une seule étiquette de script par page. Vous pouvez le faire en l'ajoutant à un en-tête global de quelque sorte, puis de le retirer partout ailleurs. Ensuite, peu importe quoi, ne pas l'inclure à nouveau. Cela pourrait signifier que vous le charriez sur certaines pages qui n'en ont pas besoin, mais en raison du cache sur les navigateurs modernes, cela ne devrait pas être un problème. P> p>
Je suppose que vous utilisez joomla1.0?
Contenu des tampons Joomla utilisant le tampon de sortie PHP. IE: ob_start (). p>
Vous pouvez obtenir le contenu à l'aide de: ob_get_contents (); p>
Ainsi, vous pouvez avoir une expression régulière qui vérifie la jQuery. Quelque chose comme: p> devrait être assez bon. (Je n'ai pas testé cela). P> Utiliser ob_get_contents () peut ne pas fonctionner dans des situations car le tampon de sortie PHP peut être imbriqué. Vous pouvez commencer autant de tampons dans des tampons. P> pour Joomla1.5, vous pouvez obtenir le tampon via l'API qui vous assure que vous obtenez toujours une sortie Joomla. p> si joomla1.0 ou 1.5 Vous devez noter que Joomla peut ajouter au tampon à tout moment avant de rendre la sortie (appels OB_FLUSH () ou équivalent). Ainsi, votre chèque pour JQuery doit prendre en compte que JQuery peut être chargée après le chèque. P> Notez que la mémoire tampon Joomla est créée non seulement pour HTML, mais peut être CSS, JavaScript, XML, JSON, etc., de sorte que vous souhaitiez vérifier le code HTML avant de faire vos tests JQuery. Vous pouvez également tester le panneau d'administration. P> <?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);
}
}
?>
Vous pouvez essayer d'utiliser l'objet jdocument code> pour obtenir les en-têtes, rechercher JQuery, puis réinitialiser si nécessaire. Le
getheaddata () code> et
SetHeadData () code> Les méthodes devraient vous aider à partir de là. Vous pouvez obtenir l'objet actuel
jdocument code> avec ce code:
$document =& JFactory::getDocument();
Je ne suis pas sûr, depuis que je suis novice dans le développement de Joomla, mais j'ai essayé d'imprimer_r the Getheaddata () et j'ai trouvé que vous ne présentez que les scripts ajoutés par les plugins mais pas par les modules. Je pense que puisqu'ils sont chargés après, ils impriment simplement leurs étiquettes de script directement sur la joomla contournant HTML. Dis-moi si je me trompe.
Mieux encore, vous pouvez le vérifier avec JavaScript, puis l'ajouter à la tête s'il manque.
if (typeof jQuery == 'undefined') { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.id = 'jQuery'; script.type = 'text/javascript'; script.src = 'js/jquery.js'; head.appendChild(script); }
Mais cela ne résoudra pas le problème si d'autres modules écrits médiocres chargent jQuery.
Cela ne répond pas à la question.
Vous voudrez peut-être reformuler cette question comme «Vérifiez si JQuery est inclus dans l'en-tête avec Joomla».