2013-06-20 4 views
0

J'ai un composant personnalisé, en fait plusieurs. Chacun aura un code HTML brut et codé en dur au début et à la fin de leurRécupère les valeurs codées en dur du composant dans le plugin dans Joomla 3.x

J'ai un plugin système qui doit obtenir ce code HTML et dans certains cas le changer pour autre chose, qui peut être géré dans le backend . En tant que plugin content cela fonctionne bien sur tous les articles com_content, mais il est ignoré par les composants, je crois comprendre que les plugins système peuvent le faire mais je ne peux pas récupérer les données dans le plugin et le renvoyer

exemple de texte de composant (text1 $, texte2 $ sont définis en haut du document)

JPluginHelper::importPlugin('system'); 
    JPluginHelper::importPlugin('plgSystemMyplugin'); 
    $dispatcher =& JDispatcher::getInstance(); 
    $data = array($text1, $text2); // any number of arguments you want 
    $data = $dispatcher->trigger('onBeforeRender', $data); 

    <article> 
<div class="spacer" style="height:25px;"></div> 
<div class="page_title_text"> 
    <h1>title</h1> 
    <?php var_dump($data); ?> 
</div> 
<section> 

mon plugin:

 jimport('joomla.plugin.plugin'); 

    class plgSystemMyplugin extends JPlugin { 
function onBeforeRender() { 

    if (JFactory::getDocument()->getType() != 'html') { 
      return; 
    } 
    else { 
    $document=JFactory::getDocument(); 
    $document->addCustomTag('<!-- System Plugin has been included (for testing) -->');   
    $document=JResponse::getBody(); 

    $bob=JResponse::getBody(); 


     $db = &JFactory::getDbo(); 
     $db->setQuery('SELECT 1, 2 FROM #__table'); 
     $results = $db->loadRowList(); 
     $numrows=count($results); 

       if($numrows >0) { 
           foreach($results as $regexes) { 
           $document = str_replace($regexes[0],$regexes[1],$document); 
           } 
           return $document; 
       } 
       else { 
        $document = 'error with plugin'; 
       } 
    JResponse::setBody($document); 
    return $document; 
    } 
    } 
    } 

au $ data moment retourne un tableau avec une 1 et valeur de clé (chaîne) " "(vide/vide).

mais pas les données de la base de données que j'attends.

en termes simples que j'ai {sometext} dans mon dossier et ma base de données et il devrait revenir <p>my other text</p>

peut vous aider?

merci

Répondre

1

Ok. Eh bien, en regardant plus en profondeur, il y a quelques problèmes qui ressortent. Le plus grand étant que vous enregistrez getBody dans une variable nommée $bob, mais ensuite passer partout à l'aide $document qui est le formulaire d'objet ci-dessus, pas le contenu.

En outre, vous avez eu un return $document traîner au milieu du code qui vous a empêché de voir que vous alliez mettre $document comme le nouveau corps. Probablement devrait être plus comme ci-dessous:

$bob=JResponse::getBody(); 


    $db = &JFactory::getDbo(); 
    $db->setQuery('SELECT 1, 2 FROM #__table'); 
    $results = $db->loadRowList(); 
    $numrows=count($results); 

    if($numrows >0) { 
     foreach($results as $regexes) { 
      $bob = str_replace($regexes[0],$regexes[1],$bob); 
     } 
    } 
    else { 
     $bob = 'error with plugin'; 
    } 
    JResponse::setBody($bob); 
    return $document; 
} 

pensées originales:

Deux pensées pour vous aider à démarrer. Je ne suis pas sûr que cela répondra vraiment à la question, mais devrait vous aider à aller dans la bonne direction. D'abord, vous ne devriez pas avoir à déclencher le plugin système. Ce sont des plugins système, donc le système s'en chargera pour vous. Si vous vouliez utiliser des plugins de contenu dans votre composant (ce que vous pouvez certainement faire!), Vous devrez les déclencher comme votre premier jeu de code. Dans ce cas, ne vous embêtez pas avec toute la section d'expédition. Deuxièmement, votre plugin semble configuré pour saisir correctement le corps du JDocument, cela devrait donc fonctionner.

Le problème probable est que l'intégralité du plugin système n'est simplement pas déclenchée. Assurez-vous qu'il est installé et que tout est nommé correctement. Il doit être sur plugins/system/myplugin/myplugin.php sur la base de ce nom et assurez-vous que le fichier xml avec ceci référence myplugin comme nom du plugin. Si ce n'est pas le cas, le système ne trouvera pas la classe mais ne lancera probablement pas d'erreur. Il va juste l'ignorer. Cela me donne des ennuis à chaque fois.

Pour faire une vérification juste pour s'assurer qu'il est appelé, je jette généralement un echo ou var_dump près du haut du fichier et juste à l'intérieur de la fonction. Confirmez que la fonction est au moins appelée en premier et que vous devriez être le plus souvent en mesure de le faire fonctionner.

+0

merci pour cela, j'ai '$ document-> addCustomTag ('');' dans le code du plugin système et il est en cours de sortie à l'écran. il a été correctement installé, les noms et les emplacements correspondants, mais ne semble pas créer d'autres éléments à l'écran. – ChelseaStats

+0

J'ai ajouté une mise à jour. –

+0

'$ bob' était là pour un débogage que je faisais mais utilisait' $ document' tout au long, y compris les lignes ci-dessus assigner le corps à '$ bob' où il était également assigné à' $ document' de toute façon ne peut toujours pas obtenir ce plugin pour changer le contenu brut. Merci quand même pour vôtre aide. :-) – ChelseaStats

Questions connexes