Зачем использовать addStyleSheet или JHtml :: stylesheet только для связывания файла CSS?

Согласно странице wiki Добавление Javascript и CSS на страницу , вы можете добавьте таблицу стилей с помощью addStyleSheet следующим образом:

$document = JFactory::getDocument();
$document->addStyleSheet($url);

Или с помощью JHtml::stylesheet:

JHtml::stylesheet($url, array(), true);

Но страница wiki Создание базового шаблона дает указание учащемуся включить таблицы стилей, подобные этому:

<head>
    <jdoc:include type="head" />
    <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css">
</head>

Это обходит addStyleSheet и JHtml::stylesheet. Это хорошая идея? Когда вы будете использовать первый и когда вы будете использовать последний?

Примечание: JHtml::_("script", …) и JHtml::_("stylesheet", …) почти точно такие же, как JHtml::script и JHtml::stylesheet. См. Что делает JHtml::_ .

9 голосов | спросил Flimm 22 Maypm15 2015, 13:09:13

4 ответа


7

JHtml обычно используется в расширениях, поскольку это означает, что переопределения могут быть выполнены, что является действительно хорошей функцией, если вы разработчик. Он также расширяет $document->..., добавляя некоторые дополнительные функции.

Вот пример:

/js
   /script.js
   /script.min.js

При использовании JHtml, сценарий minified будет загружен для уменьшения времени загрузки страницы. Когда вы включаете режим отладки в глобальной конфигурации, он загружает версию файла unminified , чтобы сделать ее доступной для чтения.

Вы не можете переопределить шаблон так же, как вы можете для расширений, поэтому многие шаблоны используют <link>, потому что любые переопределения можно просто сделать, добавив custom.css, а затем добавьте в него свой код. Таким образом, использование собственных тегов <link> выполняется быстрее, чем использование API Joomla для загрузки файла CSS

ответил Lodder 22 Maypm15 2015, 13:22:52
6

В дополнение к остальным, самое большое преимущество, которое я нашел, - все файлы CSS /JSS находятся в одном массиве в 1 раз.

Это может показаться не полезным, но фрагмент из другого примера

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css">

Позже, когда вы хотите изменить system.css, вы внесете изменения, а затем поймете, что ваши пользователи имеют старый system.css в своем кеше с вашим новым содержание, то есть вам придется изменить код на несколько иной URL-адрес (или сократить время кэширования и чаще загружать пользователя)

Когда вы используете метод JHTML при создании шаблона, вы можете сгенерировать «версию» файла CSS /JS (filemtime является хорошим для использования, или git commit ID и т. д.), поэтому мгновенное изменение содержимого новый css всем людям для просмотра вашего сайта. Длительное время кеширования + мгновенное поколение означает меньшее количество загрузок на страницу.

Пример кода (НЕ ТЕСТОВАЯ РАБОТА, хотя я использую аналогичный код)

$styles  = $this['asset']->get('css');
if ($styles) {
  foreach ($styles as $style) {
    if ($url = $style->getUrl()) {
      if ($url[0] == "/") {
      //its local, find it and add the mtime
        if (file_exists(getcwd() . $url)) {
          $url .= "?" .filemtime(getcwd() . $url);
        }
      }
      printf("<link rel=\"stylesheet\" href=\"%s\" type=\"text/css\" />\n", $url);
    } else {
      printf("<style>%s</style>\n", $style->getContent());
    }
  }
}

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

ответил exussum 22 Maypm15 2015, 15:45:36
4

Joomla предоставляет свой собственный API со своей фабрики, мы можем назвать его как JFactory.

Нет вреда для использования:

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css">

над

$document = JFactory::getDocument();
$document->addStyleSheet($url);

Однако, если вы включаете свои таблицы стилей с помощью вышеуказанного метода, он автоматически включается в раздел <head> вашего шаблона с помощью <jdoc:include type="head" />. Идем дальше, если мы разрабатываем собственное расширение, и если вы явно хотите иметь свой собственный CSS или Javascript, вы можете объявить его с помощью вышеописанного метода. Он снова добавит его в раздел <head> и не позволит вам обновить шаблон index.php

Иногда вы хотите, чтобы ваши скрипты появлялись в конце вашего тела, чтобы загружать все элементы DOM. В этой ситуации вы можете включить свои скрипты в конец своего элемента <body> со следующими параметрами:

<script type="text/javascript" src="myScript.js"></script>

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

ответил Sahil Purav 22 Maypm15 2015, 13:25:00
-1

, если вы используете <link >, ваша голова joomla не будет tidy , потому что <link > будет отображаться под javascript block, outsite <jdoc:include type="head" />, а joomla снова вернется в папку css. Это повлияет на производительность Joomla. И если вы используете <link >, вы получите много переменных echo в plain index.php: (

Я использую $doc->addStyleSheet, потому что .css будет отображаться в блоке css, внутри <jdoc:include type="head" />. то же самое для javascript используйте $doc->addScript. После <jdoc:include type="head" /> joomla будет считать все законченным и будет выполнять более важную работу. :)

Некоторые люди используют <link > для браузера без поддержки, например,

<!--[if IE 8]>
<link href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/ie8only.css" rel="stylesheet" type="text/css" />
<![endif]-->

<!--[if lt IE 9]>
    <script src="<?php echo $this->baseurl ?>/media/jui/js/html5.js"></script>
<![endif]-->

это будет показано внизу <jdoc:include type="head" />.

ответил Evelyn Raditya 29 Mayam15 2015, 00:27:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132