Joomla 3.4.1 làm thế nào để xóa JCaption, được gọi bằng jQuery?


10

Tôi muốn xóa JCaption khỏi tập tin head, jquery và jcaption tôi đã hủy kích hoạt bằng các phương pháp sau:

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

Để xóa jcaption trên các phiên bản trước có sử dụng mootool:

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

Tôi cũng đã cố gắng để xóa nó trên jquery nhưng tôi không có kinh nghiệm preg numplace () , phải làm gì để xóa JCatpion khỏi đầu?

Mã của tôi:

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

Câu trả lời:


5

Đây là một câu hỏi rất cũ và có lẽ không ai đọc nó nữa, nhưng dù sao tôi cũng sẽ đăng câu trả lời của mình.

Trong regex cho JQuerychú thích bạn có lỗi. Bạn không cần phải thoát dấu chấm nhưng bạn phải thoát các ký tự đặc biệt. Và bạn cũng cần nhắm mục tiêu khóa chính xác trong mảng để bạn cần thêm ['text/javascript']sau khi gọi đối tượng script.

Vì vậy, regex / preg numplace chính xác sẽ là:

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

Cách đây không lâu, tôi cũng đã phải vật lộn với regex nhưng trang web này đã giúp ích rất nhiều: http://regexr.com/ Nếu bạn dùng thử lưu ý trang web rằng bạn không cần sử dụng các thẻ mở và đóng vì nó đã tự động .


Để tránh thoát dấu ngoặc đơn, hãy bọc mẫu trong dấu ngoặc kép. Dấu chấm phẩy không cần phải thoát. Mặc dù không thoát các chấm vẫn sẽ mang lại kết quả như mong đợi trong trường hợp này, nhưng chính xác / hiệu quả hơn là khớp các chấm theo nghĩa đen thay vì một metacharacter "bất kỳ ký tự" nào trong mẫu, vì vậy tôi khuyên bạn nên thoát khỏi các chấm.
mickmackusa

4

Thử cái này xem sao:

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

Điều đó thật tuyệt! Tôi đã loại bỏ tất cả các unset đó ($ doc -> _ các dòng mã và thay thế bằng 2.
mmundiff

Cảm thấy tốt khi biết rằng tôi đã giúp đỡ bạn :)
Sahil Purav

Hy vọng nó đã giúp người đăng ban đầu và họ chấp nhận câu trả lời của bạn! Cảm ơn một lần nữa
mmundiff

2

Thử cái này xem sao:

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

Nếu bạn sẵn sàng sử dụng một plugin để bỏ đặt thẻ script được chèn, những điều sau đây có thể hữu ích.

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

Hướng dẫn sử dụng php không chỉ khai báo strstr()kém hiệu quả hơn strpos()khi kiểm tra sự tồn tại của chuỗi con trong chuỗi, tác vụ này không cần tìm kiếm chuỗi con - $keylà kết hợp chuỗi đầy đủ.
mickmackusa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.