Joomla - как удалить файл JS из головы, используя информацию, предоставленную пользователем в параметрах шаблона

Я успешно удалил файлы JS и CSS вручную из заголовка HTML шаблона Joomla, используя обычный метод, описанный ниже.

unset($this->_scripts['/media/jui/js/bootstrap.min.js']);
unset($this->_stylesheets['/media/jui/js/bootstrap.min.css']);

Мой вопрос заключается в следующем. Можно ли сохранить информацию о файле и пути в переменной, а затем использовать переменную вместо пути/файла в приведенных выше примерах? И если да, то что может быть хорошим способом сделать это?

Причина? Я хочу дать пользователям моего шаблона возможность вводить несколько файлов/путей, разделенных запятой, в параметры шаблона, сохранять эти различные файлы/пути в массив, а затем перебирать этот массив (сбрасывать/удалять каждый из HTML-заголовка шаблона).

Цель? Иногда нужно удалить js из заголовка html и в нижней части страницы, чтобы уменьшить время загрузки страницы, мерцание перехода страницы/белое мигание и т. д. В этом случае я не хочу использовать плагин. Я бы предпочел просто дать своим пользователям более точный контроль, если это возможно, встроенный в шаблон. Конечно, у меня будет место в параметрах шаблона, чтобы пользователь мог добавить любые js, которые они удаляют из заголовка, в конец.

Код, который я использую?

// grab the js file paths user enters into template parameters and add them to an array i can loop through

$unsetJSFiles = $this->params->get( 'customFilesUnsetJS' );
$unsetJSFilesArray = explode(',', $unsetJSFiles);

// loop through each js file path user entered and unset each one from joomla html head  

foreach ($unsetJSFilesArray as $valueJS) {
    $doc = JFactory::getDocument();
    unset($doc->_scripts[$valueJS]);
    }

Кажется, это не работает. Я успешно проверил, что значения выводят то, что я ищу, через print_r, эхо и т. Д. Но цикл не работает. Это первый реальный вопрос, который я задал в stackoverflow. Перерыл кучу тем и гуглил, но на эту не нашел ответа. Большое спасибо за любой совет!


person Sidekick Dan    schedule 19.06.2015    source источник


Ответы (1)


Попробуйте объявить $doc вне цикла (над циклом)!

А сбросить его надо ЭТИМ и объявить рут!

unset($this->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);

Итак, попробуйте (не проверено !!):

// grab the js file paths user enters into template parameters and add them to an array i can loop through

$doc = JFactory::getDocument();
$unsetJSFiles = $this->params->get( 'customFilesUnsetJS' );
$unsetJSFilesArray = explode(',', $unsetJSFiles);

// loop through each js file path user entered and unset each one from joomla html head  

foreach ($unsetJSFilesArray as $valueJS) {        
    unset($this->_scripts[JURI::root(true) . $valueJS]);
}
person Community    schedule 19.06.2015