Joomla 3.4.1 jQuery ile çağrılan JCaption nasıl silinir?


10

JCaption'u aşağıdaki yöntemlerle devre dışı bıraktığım kafa, jquery ve jcaption dosyasından silmek istiyorum :

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

Kullanırken mootoollerin gerekli olduğu önceki sürümlerde jcaption'ı silmek için:

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

Ayrıca jquery silmek için çalıştı ama preg_replace () deneyimi ile yok, JCatpion kafasından silmek için ne yapmalı?

Kodum:

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

Yanıtlar:


5

Bu çok eski bir soru ve muhtemelen kimse artık okumuyor, ama yine de cevabımı göndereceğim.

Altyazının normal ifadesinde JQueryhatalarınız var. Noktalardan kaçmanıza gerek yok, ancak özel karakterlerden kaçmanız gerekiyor. Ayrıca, dizideki doğru anahtarı hedeflemeniz gerekir, böylece ['text/javascript']komut dosyası nesnesini çağırdıktan sonra eklemeniz gerekir .

Doğru regex / preg_replace şöyle olur:

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

Çok uzun zaman önce regex ile de mücadele ediyordum ama bu site çok yardımcı oldu: http://regexr.com/ Site deniyorsanız, zaten otomatik olarak açık ve kapalı etiketleri kullanmanız gerekmediğini unutmayın. .


Tek tırnaklardan kaçmayı önlemek için, deseni çift tırnak içine alın. Noktalı virgüllerin kaçmasına gerek yoktur. Kaçan noktalar bu durumda beklenen sonucu yine de sunsa da, modeldeki "herhangi bir karakter" metakaraktesi yerine gerçek noktaları eşleştirmek daha doğru / etkilidir, bu yüzden noktalardan kaçmayı öneririm.
mickmackusa

4

Bunu dene:

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

Bu harika! > Kod _ komut hatları ve 2. ile değiştirin - O unset ($ doc tüm kurtuldu
mmundiff

Sana yardım
ettiğimi

Umarım orijinal postere yardımcı olmuştur ve sizinkini cevap olarak kabul ederler! Tekrar teşekkürler
mmundiff

2

Bunu dene:

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

Enjekte edilen komut dosyası etiketini kaldırmak için bir eklenti kullanmak istiyorsanız, aşağıdakiler yararlı olabilir.

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 manuel bir dize bir alt dize varlığını kontrol ederken strstr()daha az verimli olduğunu strpos()değil, bu görev bir alt dize aramak gerekmez - $keytam dize eşleşmesidir.
mickmackusa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.