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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top