Joomla 3.4.1 jQueryで呼び出されたJCaptionを削除するには?


10

次の方法で非アクティブ化したヘッド、jquery、jcaptionファイルからJCaptionを削除したい:

unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);

mootoolsを使用する必要がある以前のバージョンでjcaptionを削除するには、次の手順を実行します。

$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);

jqueryでも削除しようとしましたが、preg_replace()の経験がないので、JCatpionをヘッドから削除するにはどうすればよいですか?

私のコード:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);

回答:


5

これは非常に古い質問で、おそらくもう誰も読んでいないでしょうが、とにかく私は私の答えを投稿します。

JQueryキャプションの正規表現にエラーがあります。ドットをエスケープする必要はありませんが、特殊文字をエスケープする必要があります。また、配列内の正しいキーをターゲットにする必要があるため['text/javascript']、スクリプトオブジェクトを呼び出した後に追加する必要があります。

したがって、正しいregex / preg_replaceは次のようになります。

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*function\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\)\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);

少し前まで私は正規表現にも苦労していましたが、このサイトは非常に役に立ちました:http : //regexr.com/ サイトを試してみる場合は、自動的に開始タグと終了タグを使用する必要がないことに注意してください。


一重引用符がエスケープされないようにするには、パターンを二重引用符で囲みます。セミコロンはエスケープする必要はありません。この場合、エスケープしないドットでも期待される結果が得られますが、パターン内の「任意の文字」のメタ文字よりもリテラルドットを一致させる方がより正確/効率的であるため、ドットをエスケープすることをお勧めします。
mickmackusa

4

これを試して:

$this->_scripts = array();
unset($this->_script['text/javascript']);

これは素晴らしい!>コードの_スクリプトラインをと2と交換してください-私はそれらの設定を解除($ドキュメントのすべてを処分した
mmundiff

私はあなたの助けになったと知ってよかったです:)
Sahil Purav '14

うまくいけば、それが元のポスターを助け、彼らはあなたの答えを受け入れます!再度ありがとう
mmundiff

2

これを試して:

if (isset($this->_script['text/javascript']))
{ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\    (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%',     '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript']))
unset($this->_script['text/javascript']);}
$this->_scripts = array();

0

プラグインを使用して挿入されたスクリプトタグの設定を解除する場合は、次の方法が役立ちます。

public function onBeforeRender() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();

        foreach ($doc->_script as $key => $script) {
            if (stristr($key, 'text/javascript') !== false) {
                unset($doc->_script['text/javascript']);
            }
        }
    }
}

PHPマニュアルでstrstr()strpos()、文字列内の部分文字列の存在を確認する場合よりも効率が悪いと宣言しているだけでなく、このタスクでは部分文字列を検索する必要はありません$key。完全な文字列の一致です。
mickmackusa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.