Come posso fermare Joomla da includere JQuery?
Domanda
Ho recentemente aggiornato da Joomla 3.2.1 a Joomla 3.2.2.
In Joomla 3.2.1, ho ricevuto manualmente jQuery da includere:
$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]);
}
}
.
Ma questo non funziona in Joomla 3.2.2.C'è un modo per non includere JQuery di Joomla in 3.2.2?
Soluzione 3
Ho aggiunto:
$doNotInclude = array(
'jquery',
'bootstrap',
'behavior',
);
if(in_array($file, $doNotInclude)){
return;
}
.
subito dopo:
list($key, $prefix, $file, $func) = static::extract($key);
.
in Biblioteche / CMS / HTML / HTML.php, nella funzione "_".
Non mi piace da quando è una modifica al core Joomla, ma funziona.Sto ancora cercando una soluzione migliore.
Altri suggerimenti
Un'altra variazione che funziona bene per me con Joomla 3.4 è quella di modificare il file Template> index.php con qualcosa come:
$doc = JFactory::getDocument();
$headData = $doc->getHeadData();
$scripts = $headData['scripts'];
//scripts to remove, customise as required
unset($scripts[JUri::root(true) . '/media/system/js/mootools-core.js']);
unset($scripts[JUri::root(true) . '/media/system/js/mootools-more.js']);
unset($scripts[JUri::root(true) . '/media/system/js/core.js']);
unset($scripts[JUri::root(true) . '/media/system/js/modal.js']);
unset($scripts[JUri::root(true) . '/media/system/js/caption.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery.min.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/bootstrap.min.js']);
unset($scripts[JUri::root(true) . '/media/jui/js/jquery-migrate.min.js']);
$headData['scripts'] = $scripts;
$doc->setHeadData($headData);
. È necessario aggiungere un prefisso di JUri::root(true)
prima di ciascuno di questi nomi file - i percorsi relativi non funzionerà
Puoi anche provare qualcosa del genere:
$removeScripts = [
'/media/jui/js/jquery.min.js',
'/media/jui/js/jquery-noconflict.js',
'/media/jui/js/jquery-migrate.min.js',
'/media/system/js/caption.js',
];
foreach ($removeScripts as $removeScript) {
unset($this->_scripts[JURI::root(true).$removeScript]);
}
. Il problema è con il tuo in_array
.
Se lo rimuovi cambiando questo:
foreach($doc->_scripts as $key => $script){
if(in_array($key, $dontInclude)){
unset($doc->_scripts[$key]);
}
}
.
A questo:
foreach($doc->_scripts as $key => $script){
unset($doc->_scripts[$key]);
}
.
Allora funziona bene.È un bel controllo inutile se la chiave dell'array esiste come ho raccolto non hai cancellato manualmente nessuno di questi file da soli.
Spero che questo aiuti
Joomla 3.3.6 Carica gli script in modo diverso, quindi $ DOC -> _ Script restituiranno nulla ... quindi non c'è nulla da inserire.
Consiglio di utilizzare questo plugin: https://github.com/poznakomlus/joomla_options
.Ti consente di rimuovere Bootstrap, JQuery e Mooquaols (puoi scegliere cosa disabilitare).
Disclaimer: non sono affiliato in alcun modo con il plug-in sviluppatore o il plugin stesso in alcun modo.
Se si sta scrivendo un modello personalizzato o un componente, in cui è necessario rimuovere tutti gli script caricati per impostazione predefinita all'interno di Joomla è possibile creare un plug-in semplice e collegare l'esecuzione all'evento onBeforeCompileHead
.
La mia implementazione era come di seguito.È molto semplice.È possibile giocare ulteriormente con l'elenco di ricerca, essendo specifico per i nomi dei file o semplicemente nella blacklist semplice della cartella principale.
protected $app;
public function onBeforeCompileHead() {
// Front end
if ($this->app instanceof JApplicationSite) {
$doc = JFactory::getDocument();
$search = array(
'jui/js/',
'system/js/'
);
foreach ($doc->_scripts as $key => $script) {
foreach ($search as $findme) {
if (stristr($key, $findme) !== false) {
unset($doc->_scripts[$key]);
}
}
}
}
}
.