web-dev-qa-db-fra.com

Que fait JHtml :: _?

J'ai vu un code comme celui-ci:

JHtml::_("script", "path/to/script.js");
JHtml::_("stylesheet", "path/to/stylesheet.css");
JHtml::_("jquery.framework");

Que fait la fonction de soulignement ici?

6
Flimm

Le plus souvent

JHtml::_("script", "path/to/script.js");
JHtml::_("stylesheet", "path/to/stylesheet.css");
JHtml::_("jquery.framework");

appellera

JHtml::Script("path/to/script.js");
JHtml::Stylesheet("path/to/stylesheet.css");
JHtmlJquery::framework();

Cependant, il y a une petite différence entre les deux appels. Le premier permet aux plugins système de remplacer les classes principales.

Exemple

Supposons que vous n'aimiez pas la version de JQuery fournie avec Joomla pour une raison amusante. Vous pouvez maintenant créer un plugin système et, dans l'événement onAfterInitialise, vous venez d'enregistrer une méthode différente pour l'appel jquery.framework. Vous pouvez le faire en utilisant JHtml::register('jquery.framework', 'ClassToLoad::MethodToCall')

Michael Babker a écrit un exemple de plugin qui permettrait de changer la version chargée Bootstrap). Cela peut aider à comprendre comment cela fonctionne.

8
Bakual

C'est simplement un raccourci, pour sauver la saisie, je suppose. La documentation l'appelle une méthode de chargeur de classe.

JHtml::_("script", "path/to/script.js");
# is the same as:
JHtml::script("path/to/script.js");

JHtml::_("stylesheet", "path/to/stylesheet.css");
# is the same as:
JHtml::stylesheet("path/to/stylesheet.css");

JHtml::_("jquery.framework");
# is the same as:
require_once 'libraries/cms/html/jquery.php';
JHtmlJquery::framework();

Il y a un algorithme qui transforme le premier argument en nom de fonction correct, vous pouvez regarder le code source dans le fichier libraries/cms/html/html.php.

2
Flimm