Добавление файла JavaScript в нижний колонтитул и пользовательские стили

9

Для быстрой загрузки страницы мне нужно вставить JS в конце страницы из компонентов и модулей.

Следующий способ объявления скриптов не работает, чтобы вставить его внизу, потому что нет параметра, чтобы поместить его в нижний колонтитул.

$rsws_document  = JFactory::getDocument(); 
$rsws_document->addScript();

Так каковы краткие способы выполнить мою цель? Если joomla не предоставляет такую ​​функциональность, это является существенным недостатком для скорости загрузки страницы.

Я также хочу добавить пользовательские стили из модуля, чтобы они вставлялись на страницу только один раз, даже если один и тот же модуль добавляет их несколько раз на этой странице -

<style type="text/css"> .classname { color:red; }.....</style>

Как мне этого добиться?

DEV-м
источник
1
Вы должны держать свой вопрос в одной теме. У вас есть два вопроса здесь.
Bakual
1
есть расширение, которое может помочь: extensions.joomla.org/extension/scriptsdown
noiragneau

Ответы:

6

JDocument-> addScript () имеет опции, чтобы отложить загрузку скрипта и / или загрузить его асинхронно. См. Документ API: http://api.joomla.org/cms-3/classes/JDocumentHTML.html#method_addScript

Это позволит браузеру загружать скрипты позже в процессе, что поможет со временем загрузки страницы.

Нет API для загрузки скриптов внизу страницы. Если вам это нужно, вы должны использовать сторонние расширения или добавить его непосредственно в шаблон.

Bakual
источник
Да, я знал об этом. Но в WordPress есть такие функции, касающиеся моих вопросов, как для сценариев, так и для пользовательских CSS. Поэтому Joomla должна добавить его.
dev-m
Были обсуждения, чтобы добавить что-то подобное. Лично я не вижу преимущества добавления его внизу по сравнению с отсрочкой / асинхронностью.
Bakual
2

Сейчас я думаю, что нет возможности загружать скрипты внизу страницы.

Что касается вашего второго вопроса, вы можете использовать статическое логическое свойство и установить его в true при первом отображении вашего CSS. Для следующих экземпляров модуля просто протестируйте это свойство, чтобы решить, нужно ли вам добавлять CSS или нет.

Возможно, хорошим местом для добавления этого статического свойства является вспомогательный класс модуля.

С Уважением,

Пеп Лайнез
источник
2

$ document-> addScript () всегда добавляет сценарии в разделе заголовка перед тегом. Итак, если вы хотите загрузить файл скрипта внизу страницы, вам нужно включить js в этот файл, просто используя<script src="{pathtojacvascriptfile}"></script>

Я надеюсь, что это может помочь


источник
2

Нет способа добавить скрипт в нижний колонтитул прямо сейчас. Однако вы можете создать плагин, который будет получать выходные данные, искать тег с соответствующим именем, например, нижний колонтитул, и использовать str_replace для добавления в ваш код.

Но вы можете использовать эти расширения для достижения этого:

  1. ScriptsDown
  2. JCH Optimize

Также я нашел один метод. Я предпочитаю не взламывать основной код, но это лучшее, что я могу придумать на данный момент.

пожалуйста, проверьте эту ссылку - Javascript файлы включены в нижний колонтитул

Надеюсь, это поможет другим :)

Joomler
источник
2

Мы используем модуль под названием «Пустой модуль», который позволяет поместить любой скрипт (PHP, Java, CSS, HTML и т. Д.) И выбрать, где его загрузить (голова, тело, конец тела и т. Д.).

Это бесплатно, и я нашел это абсолютно полезным: http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-modules/3668

Чтобы переместить сценарии из нижней части тела, это немного больше работы. Использовать этот:

Включить в шаблон:

<? PHP
$ head = $ doc-> getHeadData ();
// Удалить сценарии
unset ($ doc -> _ scripts [JURI :: root (true). '/media/system/js/mootools-more.js']);
?>

Добавьте одну «неустановленную» строку для каждого скрипта, который нужно удалить из головы. Затем добавьте его в пустой модуль загрузки внизу (позиция отладки?). Один плюс, если вы создаете разные пустые модули, это то, что вы можете загружать скрипты только там, где это необходимо (например, экземпляр модуля только для motools, загружая его только на определенной странице).

Для стилей вы также можете использовать пустой модуль.

Надеюсь, это поможет.

Джонатан Роза - Zott Online Ag
источник
0

Я еще не пробовал. Вы можете создать модуль, который не отображает HTML, просто печатает сценарии и стили, но он находится в нижней части модуля на страницах, где отображается ваш другой модуль.

Хунг Тран
источник