web-dev-qa-db-fra.com

Problème avec JFactory :: getDocument () quand le module est placé dans {loadposition}

Je me suis coincé. Je code un simple module qui sera placé/visible uniquement sur les pages d'article com_content. Ce module récupère les mots-clés de l'article en cours, et pour éviter une requête de base de données supplémentaire, j'utilise JDocument/getMetaData:

$item = JFactory::getDocument();
$item_keywords = $item->getMetaData('keywords');

Ce code fonctionne bien lorsque le module est placé à la position normale du module et que je peux obtenir la liste des mots-clés:

architecture, design studio, house

Mais quand j'ai inséré le module dans le contenu de l'article à l'aide du plugin {loadposition}, j'ai découvert que le module ne pouvait pas récupérer les mots-clés de l'article actuel à l'aide de JDocument/getMetaData.

Existe-t-il une solution permettant de récupérer des mots clés d'article dans le module sans interrogation supplémentaire dans la base de données?

Je vais probablement ajouter un code qui vérifie comment le module est chargé. Mon code:

$item = JFactory::getDocument();
if ($item->template) {
    echo "standart module load - use getMetaData";
} else {
    echo "module loaded by plugin - create an additional query";
}

As-tu une meilleure idée?

2
Beshur

Vous ne pouvez pas utiliser le plug-in de contenu Joomla {loadposition} standard à cette fin car la préparation du contenu a lieu bien avant la préparation des données de base.

Vous devrez écrire votre propre plug-in Joomla System pour le remplacer, comme le plug-in Module Anywhere de NoNumber, qui remplace le code mos par le module après la préparation des données de tête. Pour en savoir plus, reportez-vous à la liste des événements du plugin Joomla: https://docs.joomla.org/Plugin/Events

1
Abhishek

Il est probablement plus facile de récupérer manuellement les mots-clés avec SQL à partir de votre module. Quelque chose comme (si view = article):

$app=JFactory::getApplication(); 
$id = $app->input->getInt('id', 0); 
$db=JFactory::getDbo(); 
$db->setQuery("select metakey from #__content where id={$id}");
$keywords=$db->loadResult(); 
0
jonasfh