it-swarm-es.tech

¿Debo usar JResponse :: setBody o onContentPrepare para el reemplazo de cadenas?

Estoy desarrollando un complemento de códigos cortos que busca en el contenido de Joomla y crea salidas html a partir de la cadena coincidente.

Actualmente estoy usando esto

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

Y trabaja muy bien. Como puede ver, esto atraviesa básicamente todo el contenido de Joomla, incluidos los módulos (no estoy seguro acerca de Virtuemart u otras extensiones de terceros). Pero si tuviera que usar el shortcode en sus archivos de plantilla, no lo encontraría.

Así que estoy pensando en colocar la función en onAfterRender de esta manera:

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

Esto coincidiría con la cadena en cualquier parte del sitio. Mi preocupación es el rendimiento. Aquí hay un ejemplo simple de la función de códigos cortos.

https://eval.in/141437

el original se refina con PREG_SET_ORDER y se ejecuta solo si se encuentra la cadena de $ shortcode ['type'].

Entonces la pregunta es, ¿qué recomendaría y por qué si tiene tiempo para explicarlo?.

Gracias y FELICITACIONES :)

5
Dan

Al igual que con mi otra respuesta sobre el rendimiento del complemento , la mejor manera de averiguarlo es probar .

Eche un vistazo a la otra respuesta para obtener detalles, pero debería ser fácil agregar declaraciones de registro de tiempo utilizando la clase JLog para comparar los resultados de tiempo de cada método.

Dicho esto, si necesita atrapar el shortcode en todas partes en el sitio, entonces onAfterRender es la forma rápida, fácil y quizás única (usando complementos).

1
codinghands

onContentPrepare es más o menos compilación para la salida de extensiones. Es mi opinión que no debería haber otro lugar donde se debería agregar una búsqueda/reemplazo en la carga. La razón por la que digo esto es para asegurarme de que Joomla se mantenga consistente con sus métodos.

Por lo tanto, si se necesita algún tipo de búsqueda/reemplazo, puede ser mejor colocarlo en un módulo HTML personalizado (también puede crear un diseño personalizado para él y tal). De esta manera, los complementos de contenido analizan su contenido, dejando que los complementos de su sistema ajusten la configuración del entorno y carguen bibliotecas adicionales (básicamente, ajuste el núcleo de Joomla y extiéndalo).

Mire las extensiones no numéricas, principalmente el administrador de módulos avanzado, le permite apuntar a módulos con muchas más configuraciones. Si bien puede que no lo ayude, el control que brindan puede conducir a soluciones alternativas en las que no pensaría de otra manera. http://www.nonumber.nl/

1
Jordan Ramstad