В шаблоне OctoberCMS можно объединять стили в один файл:

<link href="{{ [
            'assets/css/template.css',
            'assets/css/style.css'
            ]|theme }}" rel="stylesheet">

Можно ли сюда добавить условие, чтобы получить что то вроде такого:

<link href="{{ [
            'assets/css/template.css',
            
            {% if page_label %}
                'assets/css/label.css',
            {% endif  %}
            
            'assets/css/style.css'
            ]|theme }}" rel="stylesheet">

  • reazzon ответили на это сообщение.

    да отдельным подключением добавь

    • Изменено

    А если в файле темы \themes\name\layouts\default.htm в блоке php создать переменную с массивом путей к файлам стилей и в него пушить пути при выполнении условия?

    Что то типа:

    ==
    <?php
    $stylesAll = array("assets/css/template.css");
    
    if (page_label) {
        array_push($stylesAll, "assets/css/label.css");
    }
    
    array_push($stylesAll, "assets/css/style.css");
        
    ?>
    ==
    <!doctype html>
    <html lang="ru">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    
            <link href="{{ [
               {% stylesAll %}
                ]|theme }}" rel="stylesheet">
            {% styles %}
        </head>
    
        <!-- .... -->
        
    </html>

    В условии if (page_label), page_label - это я в файле \plugins\octoclub\name\components\Item.php внутри функции onRun() передаю:

    if ($item->label == 1) {
        $this->page['page_label'] = true;
    }

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

    • reazzon ответили на это сообщение.

      Koresh Данный синтаксис изначально неверен, ты пытаешься внутри массива сделать if.

      Koresh Тут уже правильнее, но есть ошибка, ты опять в разметку массива [] пытаешься вставить логику.

      Попробуй так.

      <link href="{{ stylesAll|theme }}" rel="stylesheet">
      • Koresh ответили на это сообщение.

        reazzon Да, ошибку внутри массива видел, это техническое упущение при описании вопроса.
        У меня проблема в блоке php - сайт падает на ошибку. Ругается на строчку if (page_label) {
        Как правильно передать значение из файла \plugins\octoclub\name\components\Item.php внутри функции onRun(), чтоб можно было в блоке php проверить условием и запушить в массив?

        • reazzon ответили на это сообщение.

          Koresh Ну во-первых, переменные пишутся всегда начиная с $, он ругается так, потому-что ты ему даешь константу.

          Попробуй на странице ловить перменную не в onStart() а в onEnd().
          Пробуй все варианты синтаксиса переменной:

          • $page_label
          • $this['page_label']
          • $this->page['page_label']

          Пока у меня получилось только массив получить. Файл \themes\name\layouts\default.htm:

          ==
          function onEnd() {
              $stylesAll = array("assets/css/template.css");
          
              if ( $this['page_label'] ) {
                  array_push($stylesAll, "assets/css/label.css");
              }
          
              array_push($stylesAll, "assets/css/style.css");
          }
          ==
          <!doctype html>
          <html lang="ru">
              <head>
                  <meta charset="utf-8">
                  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
                  <link href="{{ stylesAll|theme }}" rel="stylesheet">
                  {% styles %}
              </head>
              <!-- .... -->
          </html>

          Теперь бы как то вывести сюда этот массив <link href="{{ stylesAll|theme }}" rel="stylesheet">
          Сейчас с таким кодом в исходном html-страницы выводит вместо этого:
          <link href="https://site.com/themes/name" rel="stylesheet">

          Вот как бы это ещё победить?

          Как эксперемент пробую просто так <link href="{{ stylesAll }}" rel="stylesheet">
          на выходе: <link href="" rel="stylesheet">

          • reazzon ответили на это сообщение.

            Koresh а что вообще на странице у тебя в {{ stylesAll }}? Сделай {{ dump(stylesAll) }}, может у тебя просто в переменную ничего не доходит?

            • Koresh ответили на это сообщение.
              • Изменено

              reazzon Так показывает NULL

              Object variables NULL

              Но я в блоке php делал в конце var_dump($stylesAll); и показывает правильно массив, с учётом условия.

              А ещё я пробовал так прокинуть массив в html - в конце блока php ставил $this->page['stylesAll'] = $stylesAll;

              Вроде бы решил.
              Добавил в конец php-блока к тому что есть: $this['stylesAll'] = $stylesAll;

              • reazzon ответили на это сообщение.

                Да, работает!
                В объединённом файле фижу стили со всех css-шных файлов.
                Правда проблема - почему то не работает сжатие объединённых файлов.

                Пока только на стилях проверил, но думаю по такой схеме и js должно заработать.

                • reazzon ответили на это сообщение.

                  Буквально пять минут прошло и сжатие заработало. Работает и в css и в js сделанному по такой же схеме.
                  Отличная схема для оптимизации. Спасибо за помощь!

                  Koresh Блин, ну ведь да, ты же не отправлял в твиг на страницу переменную, ты ее определил только в PHP секции.

                  Koresh Рад что теперь все работает!