В настройках item есть пункт опубликовано.
На странице вывод таких элементов контролируется конструкцией:

{% if item.published == 1 %}

{% endif %}

А вот как мне открыть такие блоки для админа?

Даже не знаю с чего начать.

  • BlackCat и reazzon ответили на это сообщение.
  • Koresh Делай по другому.

    В компоненте, или в секции "Код" твоей страницы, передай перменную в TWIG.

    if (\BackendAuth::check()){
        $this->page['backend_user'] = true;
    }

    и в TWIG уже можно

    {% if backend_user %}
        // Пользователь администратор сайта.
    {% endif %}
    {% if app.user %}
       
    {% elseif not app.user %}
        
    {% endif %}

    Возможно так

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

      Koresh Я бы тебе рекомендовал не делать проверку на то опубликована запись или нет.

      Проверки на публикацию лучше выносить в scope метод
      Вот пример:

      public function scopeActive($query)
      {
              return $query->where('is_active', 1);
      }

      Почему не проверять статус публикации в твиге?

      Представим следующее.
      У тебя есть массив постов 5шт. И ты хочешь вывести его в каком-нить блоке, типа похожие посты где надо выводить только 3 поста. Посты должны быть опубликованы.

      $posts = [
         [ 'name' => 'Первый пост', 'is_public' => 1 ],
         [ 'name' => 'Второй пост', 'is_public' => 0 ],
         [ 'name' => 'Третий пост', 'is_public' => 0 ],
         [ 'name' => 'Четвертый пост', 'is_public' => 1 ],
         [ 'name' => 'Пятый пост', 'is_public' => 1 ]
      ]

      Ты на странице в твиге напишешь так:

      {% for post in posts %}
         {% if loop.index <= 3 %}
            {% if post.is_public %}
              {{ post.name }}
            {% endif %}
         {% endif %}
      {% endfor %}

      В итоге ты получишь вывод одного поста!
      Потому что твои опубликованные посты идут вперемешку с неопубликованными. А проверку на количество ты можешь сделать самым рациональным образом только на текущий индекс цикла. А циклу все равно он возвращает только номер текущей итерации.

      Причем даже если ты поменяешь условия местами ничего не изменится, так как итерация в любом случае прибавит +1.

      Как показать неопубликованные объекты админу?
      Об этом сказал @Boarworm
      Просто условием.

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

        BlackCat Твой пример абсолютно неверен.
        В твиге тоже можно использовать логику. Пример:

        {% for post in posts if post.is_public %}
            // работаем с массивом только опубликованных новостей
            {% if loop.index <= 3 %}
                // Работаем только с тремя первыми записями в массиве только опубликованных новостей
            {% endif %}
        {% endfor %}

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

        Koresh А вот как мне открыть такие блоки для админа?

        Отвечая на твой вопрос, все просто, тебе ответил Boarworm я лишь покажу пример кода:

        {% if item.published == 1 or app.user %}
        
        {% else %}
        
        {% endif %}
        • Koresh ответили на это сообщение.

          BlackCat Я бы тебе рекомендовал не делать проверку на то опубликована запись или нет.

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

          reazzon Отвечая на твой вопрос, все просто, тебе ответил Boarworm я лишь покажу пример кода:

          Я так понимаю для этого нужно ставить плагин User? Или в ядре CMS-ки это уже есть?

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

            Koresh Если только backend то плагин ставить не нужно. Он к этому не относится.

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

              reazzon На фронтенд. Хочу если материал не опубликованный чтобы посетители его не видели, а я как админ мог посмотреть.

                Koresh Я неправильно выразился, только backend юзер, я понимаю что речь идет о frontend. Backend Auth и FrontEnd Auth - это две разные вещи. Первой не нужны плагины, чтобы взаимодействовать с ней везде, второй нужен - RainLab.User.

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

                  Koresh Любой на выбор rainlab.user или lovata.buddies.
                  Просто будет у тебя два условия в конструкции через and

                  reazzon Я неправильно выразился, только backend юзер, я понимаю что речь идет о frontend. Backend Auth и FrontEnd Auth - это две разные вещи. Первой не нужны плагины, чтобы взаимодействовать с ней везде, второй нужен - RainLab.User.

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

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

                    Koresh Нет не нужно ничего ставить, backend user из коробки

                    В компоненте плагина в файле \plugins\octoclub\tutorial\components\item\default.htm просто вставил

                    {% if app.user %}
                        Авторизован
                    {% elseif not app.user %}
                        Неавторизован
                    {% endif %}

                    В админке я авторизован. На фронтенде сайта вижу Неавторизован.
                    В админке я под пользователем который создан при установке CMS.
                    В настройках захожу в Администраторы, у пользователя под которым я сижу (он у меня один) обозначено в ГРУППЫ - Owners, РОЛЬ - Developer.

                    Может где то в конфигах есть настройка на авторизацию вместе с фронтом? Или может какие сессии нужно добавлять? Или у меня пользователь с неправильными правами?

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

                      Koresh Попробуй dump(app.user), посмотри, что там есть. Если ничего непонятно, то dump(app.user.toArray()) и увидишь поля на которые можно подвесить условия, хотя, по-моему, один факт того, что переменная не пустая уже является условием.

                      Но в любом случае посмотри. Либо еще как вариант:

                      {% if app.user is not empty %}
                      То есть проверка если пользователь не пустой

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

                        BlackCat Попробуй dump(app.user), посмотри, что там есть.

                        Выводит null

                        BlackCat dump(app.user.toArray())

                        NULL

                        В конфигах искал настройки - ничего такого не увидел.
                        Есть вот такое в \config\cms.php:

                        'backendForceRemember' => true,

                        В \config\session.php

                        'driver' => 'file',
                        'lifetime' => 120,
                        'expire_on_close' => false,
                        'encrypt' => false,
                        'files' => storage_path('framework/sessions'),
                        'connection' => null,
                        'table' => 'sessions',
                        'lottery' => [2, 100],
                        'cookie' => 'october_session',
                        'path' => '/',
                        'domain' => null,
                        'secure' => false,
                        'same_site' => null,

                        Я в админке как залогинился при установке CMS, так больше и не выходил из неё. Захожу из закладки - меня сразу залогиненного впускает.
                        Плагин User я не ставил. К страницам сессий не добавлял.

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

                          Koresh Делай по другому.

                          В компоненте, или в секции "Код" твоей страницы, передай перменную в TWIG.

                          if (\BackendAuth::check()){
                              $this->page['backend_user'] = true;
                          }

                          и в TWIG уже можно

                          {% if backend_user %}
                              // Пользователь администратор сайта.
                          {% endif %}
                          • Koresh и bogdan ответили на это сообщение.

                            reazzon Делай по другому.

                            Спасибо! Так работает. Проверил разлогинился/залогинился в админке - условие отрабатывает правильно.

                            Единственное, что проверку if (\BackendAuth::check()) наверное нужно внутри какой то функции делать onRun, onStart или onEnd. Если просто вставить - вызывает ошибку.
                            Я пока в onRun плагина добавил в файле \plugins\octoclub\tutorial\components\Item.php. Наверное так же и для категорий сделаю.

                              Koresh Да, именно про onRun, onStart или onEnd я и имел ввиду)

                              Koresh По идее так правильно. Но если по быстрому нужно, то в секции кода пишешь
                              function onStart(){
                              /* тут код получения user и прочего, почти то же самое что в onRun() плагина */
                              }