web-dev-qa-db-fra.com

Devrais-je utiliser JResponse :: setBody ou onContentPrepare pour le remplacement de chaînes?

Je développe un plug-in de shortcodes qui effectue une recherche dans le contenu de Joomla et crée des sorties html à partir de la chaîne correspondante.

J'utilise actuellement cette

   public function onContentPrepare($context, &$row, &$params, $page = 0){

        if ($this->run_plg != 1)return;
        require_once 'shortcodes.php';
        $row->text = shortcodes($row->text);

        return true;
    }

Et ça marche très bien. Comme vous pouvez le constater, tous les contenus Joomla, y compris les modules (essentiellement sur Virtuemart ou sur d’autres extensions tierces), sont concernés. Mais si vous utilisiez le shortcode dans vos fichiers de modèle, il ne le trouverait pas.

Je pense donc à placer la fonction dans onAfterRender comme ceci:

function onAfterRender() {
    require_once 'shortcodes.php';
    $body        = JResponse::getBody();
    $body       = shortcodes($body);
    JResponse::setBody($body);
}

Cela correspond à la chaîne n'importe où sur le site. Ma préoccupation est la performance. Voici un exemple simple de fonction shortcodes.

https://eval.in/141437

l'original est affiné avec PREG_SET_ORDER et ne s'exécute que si la chaîne de $ shortcode ['type'] est trouvée.

La question est donc: que recommanderiez-vous et pourquoi si vous avez le temps d’expliquer?.

Merci et félicitations :)

5
Dan

Comme avec mon autre réponse sur les performances du plugin , le meilleur moyen de le savoir est de tester .

Regardez l'autre réponse pour plus de détails, mais il devrait être facile d'ajouter des instructions de consignation de temps à l'aide de la classe JLog afin de comparer les résultats de synchronisation de chaque méthode.

Cela dit, si vous devez intercepter le shortcode partout sur le site , alors onAfterRender est le moyen rapide, facile et peut-être le seul (en utilisant plugins).

1
codinghands

onContentPrepare est plus ou moins construit pour la sortie des extensions. À mon avis, il ne devrait y avoir aucun endroit où une recherche/remplacement en charge devrait être ajouté. La raison pour laquelle je dis cela est pour m'assurer que Joomla reste compatible avec ses méthodes.

Donc, si une sorte de recherche/remplacement est nécessaire, il peut être préférable de le placer dans un module HTML personnalisé à la place (vous pouvez également créer une présentation personnalisée pour celui-ci et ainsi de suite). De cette façon, les plugins de contenu continuent d'analyser votre contenu, laissant à vos plugins système le soin de régler les paramètres d'environnement, ou de charger des bibliothèques supplémentaires (essentiellement, ajustez le noyau de Joomla et étendez-le).

Examinez les extensions non numérotées, principalement le gestionnaire de modules avancé, qui vous permet de cibler des modules avec beaucoup plus de paramètres. Bien que cela ne vous aide peut-être pas, le contrôle qu'ils donnent peut mener à des solutions alternatives auxquelles vous ne penseriez pas autrement. http://www.nonumber.nl/

1
Jordan Ramstad