web-dev-qa-db-fra.com

Jquery n'est pas inclus dans la tête de mon composant

Je viens de lire ce tutoriel https://docs.joomla.org/J3.x:Developing_an_MVC_Component et j'ai terminé mon composant (Joomla! 3.7). Maintenant, je réalise que la vue du site ne contient pas le (s) lien (s) jquery dans l'en-tête - contrairement à l'autre (sous-) page de mon site.

Je sais que je pourrais simplement ajouter les lignes de code nécessaires dans mon modèle, mais je ne l'ai pas fait car dès le début, Joomla l'a fait pour moi, sauf lorsque je navigue dans la vue de mon composant. Malheureusement, je n'ai trouvé aucune information sur ce comportement, alors j'espère que quelqu'un pourra nous éclairer à ce sujet ...?!

1
Rico

Ce n'est pas au template ou à Joomla de charger jQuery. Vous constaterez normalement que jQuery est chargé sur un grand nombre de pages par défaut, mais que Joomla n’est pas obligé de le charger par défaut sur chaque page. C’est donc à vous de décider.

Pour le charger, ajoutez simplement:

JHtml::_('jquery.framework');

dans vos vues de composant.

1
Lodder

Joomla l'ajoute partout. Effectuez une recherche de JHtml::_('jquery.framework'); dans les fichiers de base et voyez comment.

Les frameworks javascript semblent un peu mal mis en œuvre. Il y a quelques informations à leur sujet ici. https://docs.joomla.org/J3.x:Javascript_Frameworks

L'emplacement le plus courant semble se trouver dans le fichier default.php de votre composant. Une approche "que fait Joomla" est généralement préférable si vous n’êtes pas sûr de quelque chose.

Si vous voulez simplement qu'il soit disponible n'importe où (et que votre composant ne doit être utilisé qu'avec votre modèle), je ne vois pas quoi que ce soit de mal à l'ajouter à votre modèle, bien que cela puisse parfois signifier que les fichiers se chargent dans le mauvais ordre. vous devez également l'ajouter à votre composant pour vous assurer que le js de votre composant est chargé après le JQuery.

Comme il ne sera chargé qu'une fois, il n'y a rien de mal à l'ajouter à votre modèle et à votre composant.

1
Richard B

Pour développer la réponse de Lodder, utilisez

JHtml::_('jquery.framework');

en haut des vues de votre composant et avant tout autre appel vers votre js personnalisé, garantit que jQuery sera chargé, avant vos autres scripts, et une seule fois, même si d'autres extensions ou le modèle l'ont appelé avec la même méthode.

De plus, il est à noter que JHtml::_('jquery.framework'); chargera jQuery en mode sans conflit.

Pour le charger en mode normal:

JHtml::_('jquery.framework', false);
1
FFrewin