Joomla 3.4.1 วิธีการลบ JCaption เรียกด้วย jQuery?


10

ฉันต้องการลบJCaptionจากไฟล์ head, jquery และ 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']);

หากต้องการลบ jcaption ในเวอร์ชันก่อนหน้าซึ่งจำเป็นต้องใช้ mootools ในการใช้งาน:

$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

นี่เป็นคำถามที่เก่ามากและอาจไม่มีใครอ่านอีกต่อไป แต่อย่างไรก็ตามฉันจะโพสต์คำตอบของฉัน

ใน regex สำหรับ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']);

ไม่นานที่ผ่านมาฉันยังดิ้นรนกับ regex แต่เว็บไซต์นี้ช่วยได้มาก: http://regexr.com/ หากคุณลองไซต์หมายเหตุว่าคุณไม่จำเป็นต้องใช้แท็กเปิดและปิดเพราะมันมีอยู่โดยอัตโนมัติ .


หากต้องการหลีกเลี่ยงการใช้เครื่องหมายคำพูดเดี่ยวให้ตัดรูปแบบในเครื่องหมายคำพูดคู่ อัฒภาคไม่จำเป็นต้องหลบหนี ในขณะที่การหลีกเลี่ยงจุดจะยังคงให้ผลลัพธ์ที่คาดหวังในกรณีนี้มันแม่นยำกว่า / มีประสิทธิภาพมากกว่าในการจับคู่จุดตามตัวอักษรแทนที่จะใช้ตัวอักษร "อักขระ" ใด ๆ ในรูปแบบดังนั้นฉันแนะนำให้หลีกเลี่ยงจุด
mickmackusa

4

ลองสิ่งนี้:

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

มันเยี่ยมมาก! ฉันได้กำจัดสิ่งที่ไม่ได้ตั้งค่าทั้งหมด ($ doc -> _ สคริปต์บรรทัดของโค้ดและแทนที่ด้วย 2
mmundiff

รู้สึกดีที่จะรู้ว่าฉันเป็นความช่วยเหลือสำหรับคุณ :)
Sahil Purav

หวังว่ามันจะช่วยโปสเตอร์ต้นฉบับและพวกเขายอมรับคุณเป็นคำตอบ! ขอขอบคุณอีกครั้ง
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.