web-dev-qa-db-ja.com

ブラウザに戻る前にページ全体をレンダリングする方法は?

ブラウザに戻る前にページ全体をレンダリングする方法はありますか?ページ全体(<html>から</html>まで)を取得し、いくつかの疑似変数を置き換えて、ユーザーが変更したバージョンに再実行します。 index.phpを使用してこれを行うことができますが、見た目は醜いです。

「ページがレンダリングされた後」のようなコールバックがあるのでしょうか?

HTML出力全体を直接編集するには、onAfterRenderイベントを使用してシステムプラグインを作成します。アプリケーションのgetBody()メソッドを使用してコンテンツを取得し、setBody()を使用して変更されたコンテンツを保存します。

defined('_JEXEC') or die;

plgSystemExample
{
    protected $app;

    public function onAfterRender()
    {
        if ($this->app->getDocument()->type !== 'html')
        {
            return;
        }

        $body = $this->app->getBody();

        //do modifications to $body here

        $this->app->setBody($body);
    }
}

ただし、置換するコンテンツがコンテンツアイテムの内部のみである場合(記事のショートコードなど)、onContentPrepareイベントを使用してコンテンツプラグインを作成し、記事のテキストのみを変更します。

4
Sharky