Joomla 3.4.1 cara menghapus JCaption, disebut dengan jQuery?

10

Saya ingin menghapus JCaption dari file head, jquery, dan jcaption yang saya nonaktifkan dengan metode berikut:

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']);

Untuk menghapus jcaption pada versi sebelumnya di mana mootools digunakan diperlukan:

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

Saya juga mencoba untuk menghapusnya di jquery tetapi saya tidak punya pengalaman preg_replace () , apa yang harus saya lakukan untuk menghapus JCatpion dari head?

Kode saya:

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

Jawaban:

5

Ini adalah pertanyaan yang sangat lama dan mungkin tidak ada yang membacanya lagi, tetapi saya akan memposting jawaban saya.

Di regex untuk JQueryketerangan Anda memiliki kesalahan. Anda tidak perlu melarikan diri dari titik-titik tetapi Anda harus melarikan diri dari karakter khusus. Dan juga Anda perlu menargetkan kunci yang benar dalam array sehingga Anda perlu menambahkan ['text/javascript']setelah memanggil objek skrip.

Jadi regex / preg_replace yang benar adalah:

$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']);

Belum lama ini saya juga berjuang dengan regex tetapi situs ini banyak membantu: http://regexr.com/ Jika Anda mencoba situs perhatikan bahwa Anda tidak perlu menggunakan tag buka dan tutup karena sudah ada secara otomatis .

Laci K
sumber
Untuk menghindari keluarnya tanda kutip tunggal, bungkus pola dalam tanda kutip ganda. Titik koma tidak perlu diloloskan. Meskipun tidak melarikan diri dari titik-titik masih akan memberikan hasil yang diharapkan dalam kasus ini, itu lebih akurat / efisien untuk mencocokkan titik-titik literal daripada metacharacter "karakter apa saja" dalam pola, jadi saya sarankan untuk melarikan diri dari titik-titik.
mickmackusa
4

Coba ini:

$this->_scripts = array();
unset($this->_script['text/javascript']);
Sahil Purav
sumber
Ini HEBAT! Saya menyingkirkan semua yang tidak disetel ($ doc -> _ scripts baris kode dan ganti dengan 2.
mmundiff
Rasanya senang mengetahui bahwa saya adalah bantuan untuk Anda :)
Sahil Purav
Semoga itu membantu poster asli dan mereka menerima milikmu sebagai jawabannya! Terima kasih lagi
mmundiff
2

Coba ini:

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();
stckvrw
sumber
0

Jika Anda bersedia menggunakan plugin untuk menghapus tag tag yang disuntikkan, berikut ini bisa bermanfaat.

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']);
            }
        }
    }
}
Mohd Abdul Mujib
sumber
Tidak hanya manual php menyatakan bahwa strstr()kurang efisien daripada strpos()ketika memeriksa keberadaan substringin sebuah string, tugas ini tidak perlu mencari substring - $keyadalah pencocokan string penuh.
mickmackusa