Câu trả lời:
Tôi đang sử dụng Joomla 3.2, ở đầu tempate của tôi, tôi đặt:
$doc = JFactory::getDocument();
$dontInclude = array(
'/media/jui/js/jquery.js',
'/media/jui/js/jquery.min.js',
'/media/jui/js/jquery-noconflict.js',
'/media/jui/js/jquery-migrate.js',
'/media/jui/js/jquery-migrate.min.js',
'/media/jui/js/bootstrap.js',
'/media/system/js/core-uncompressed.js',
'/media/system/js/tabs-state.js',
'/media/system/js/core.js',
'/media/system/js/mootools-core.js',
'/media/system/js/mootools-core-uncompressed.js',
);
foreach($doc->_scripts as $key => $script){
if(in_array($key, $dontInclude)){
unset($doc->_scripts[$key]);
}
}
Điều này ngăn những tập lệnh đó được đưa vào, thêm hoặc xóa tập lệnh khi cần
JURI::root(true).
trước các đường dẫn kịch bản và nó hoạt động.
Bạn có thể bỏ đặt nó trong mẫu
unset(
$this->_scripts['/media/jui/js/mootools-core.js'],
$this->_scripts['/media/jui/js/core.js']);
Điều này sẽ xóa cả hai tệp JS khỏi Tiêu đề.
Trong Joomla 3.x, bạn có thể gọi JHtml::_('jquery.framework')
trong mẫu của mình để tải jQuery mà không cần Mootools. Điều này tải jQuery ở chế độ không xung đột theo mặc định, vì vậy nếu bạn cần chế độ bình thường, chỉ cần thêm tham số thứ hai là false : JHtml::_('jquery.framework', false)
.
Tôi đã sử dụng cái này:
foreach ($doc->_scripts as $script => $value)
{
if (preg_match('/media\/jui/i', $script))
unset($doc->_scripts[$script]);
}
needle
chuỗi là không thay đổi và mục đích duy nhất là để tạo ra một trận đấu case-insensitive, sau đó nó sẽ được thực hành tốt hơn để sử dụng stripos () ...if (stripos($script, 'media/jui') !== false)
Giải pháp của @ContextSwitch không hoạt động đối với tôi do một số tập lệnh đã được tải sau khi mẫu được xử lý nên việc không đặt các tệp ở giai đoạn đó không ảnh hưởng đến các tệp đó.
Vì vậy, tôi đã phải thực hiện giải pháp tương tự nhưng sử dụng một plugin đơn giản ràng buộc với onBeforeCompileHead
sự kiện. Theo mô tả của tôi ở đây .