it-swarm.dev

Dovrei usare JResponse :: setBody o onContentPrepare per le sostituzioni di stringhe?

Sto sviluppando un plug-in di shortcode che cerca tra i contenuti di Joomla e crea output HTML dalla stringa corrispondente.

Attualmente sto usando questo

   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;
    }

E funziona molto bene. Come puoi vedere, questo viene eseguito praticamente su tutti i contenuti di Joomla, inclusi i moduli (non sono sicuro di Virtuemart o di altre estensioni di terze parti). Ma se dovessi usare lo shortcode nei tuoi file modello non lo troverebbero.

Quindi sto pensando di inserire la funzione in onAfterRender in questo modo:

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

Ciò corrisponderebbe alla stringa in qualsiasi punto del sito. La mia preoccupazione è la prestazione. Ecco un semplice esempio della funzione di codici brevi.

https://eval.in/141437

quello originale viene perfezionato con PREG_SET_ORDER e viene eseguito solo se viene trovata la stringa da $ shortcode ['type'].

Quindi la domanda è: cosa consiglieresti e perché se hai tempo di spiegare.

Grazie e CONGRAT :)

5
Dan

Come per il mio altra risposta sulle prestazioni del plugin , il modo migliore per scoprirlo è test .

Dai un'occhiata all'altra risposta per i dettagli, ma dovrebbe essere facile aggiungere istruzioni di registrazione del tempo usando la classe JLog per confrontare i risultati di temporizzazione di ciascun metodo.

Detto questo, se devi catturare lo shortcode ovunque sul sito, allora onAfterRender è il modo rapido, facile e forse unico (usando plugins).

1
codinghands

onContentPrepare è più o meno compilato per l'output di estensioni. Ritengo che non dovrebbe esserci altro posto in cui aggiungere/cercare un carico. Il motivo per cui dico questo è assicurarsi che Joomla rimanga coerente con i suoi metodi.

Quindi, se è necessaria una sorta di ricerca/sostituzione, può essere preferibile inserirlo in un modulo HTML personalizzato (è anche possibile creare un layout personalizzato per esso e simili). In questo modo i plug-in di contenuto continuano ad analizzare i tuoi contenuti, lasciando i plug-in di sistema per regolare le impostazioni dell'ambiente e simili o caricare librerie extra (in pratica, regola il core di Joomla ed estenderlo).

Guarda le estensioni non numeriche, principalmente il gestore moduli avanzato, ti consente di scegliere come target i moduli con molte più impostazioni. Anche se potrebbe non aiutarti, il controllo che danno può portare a soluzioni alternative che non penseresti altrimenti. http://www.nonumber.nl/

1
Jordan Ramstad