ti-enxame.com

Devo usar JResponse :: setBody ou onContentPrepare para substituições de strings?

Estou desenvolvendo um plug-in de códigos de acesso que pesquisa o conteúdo do Joomla e cria saídas html a partir da string correspondente.

Atualmente estou usando este

   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 funciona muito bem. Como você pode ver, isso ocorre basicamente em todo conteúdo do Joomla, incluindo módulos (não tenho certeza sobre o Virtuemart ou outras extensões de terceiros). Mas se você usasse o código abreviado nos arquivos de modelo, ele não o encontraria.

Então, eu estou pensando em colocar a função no onAfterRender assim:

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

Isso corresponderia à string em qualquer lugar do site. Minha preocupação é o desempenho. Aqui está um exemplo simples da função de códigos de acesso.

https://eval.in/141437

o original é refinado com PREG_SET_ORDER e é executado apenas se a string de $ shortcode ['type'] for encontrada.

Portanto, a pergunta é: o que você recomendaria e por que, se tiver tempo para explicar.

Obrigado e PARABÉNS :)

5
Dan

Assim como no meu outra resposta sobre o desempenho do plug-in , a melhor maneira de descobrir é testar .

Dê uma olhada na outra resposta para obter detalhes, mas deve ser fácil adicionar instruções de registro de horas usando a classe JLog para comparar os resultados de tempo de cada método.

Dito isto, se você precisar pegar o código de acesso em qualquer lugar do site, onAfterRender é a maneira mais rápida, fácil e talvez a única (usando plugins).

1
codinghands

onContentPrepare é mais ou menos compilado para a saída de extensões. É minha opinião que não deve haver outro local onde uma localização/substituição na carga deve ser adicionada. A razão pela qual digo isso é garantir que o Joomla permaneça consistente com seus métodos.

Portanto, se for necessário algum tipo de localização/substituição, pode ser melhor colocá-lo em um módulo HTML personalizado (você também pode criar um layout personalizado para ele). Dessa forma, os plug-ins de conteúdo ficam analisando o conteúdo, deixando os plug-ins do sistema para ajustar as configurações do ambiente e assim por diante, ou carregar bibliotecas extras (basicamente, ajuste o núcleo do Joomla e estenda-o).

Observe as extensões que não são numeradas, principalmente o gerenciador de módulos Avançado, que permite segmentar módulos com muito mais configurações. Embora possa não ajudá-lo, o controle que eles dão pode levar a soluções alternativas que você não pensaria de outra forma. http://www.nonumber.nl/

1
Jordan Ramstad