В настройках item есть пункт опубликовано.
На странице вывод таких элементов контролируется конструкцией:
{% if item.published == 1 %}
{% endif %}
А вот как мне открыть такие блоки для админа?
Даже не знаю с чего начать.
В настройках item есть пункт опубликовано.
На странице вывод таких элементов контролируется конструкцией:
{% if item.published == 1 %}
{% endif %}
А вот как мне открыть такие блоки для админа?
Даже не знаю с чего начать.
{% if app.user %}
{% elseif not app.user %}
{% endif %}
Возможно так
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
Просто условием.
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 %}
reazzon Я неправильно выразился, только backend юзер, я понимаю что речь идет о frontend. Backend Auth и FrontEnd Auth - это две разные вещи. Первой не нужны плагины, чтобы взаимодействовать с ней везде, второй нужен - RainLab.User.
Правильно я понял, что если я авторизируюсь в админке, то мне не нужно ставить плагин User чтобы открыть себе доступ к неопубликованным материалам?
У меня нет регистраций на сайте который делаю на октябре. Мне значит ни каких сессий не нужно добавлять на страницы и можно просто обойтись условием написанным выше?
В компоненте плагина в файле \plugins\octoclub\tutorial\components\item\default.htm просто вставил
{% if app.user %}
Авторизован
{% elseif not app.user %}
Неавторизован
{% endif %}
В админке я авторизован. На фронтенде сайта вижу Неавторизован.
В админке я под пользователем который создан при установке CMS.
В настройках захожу в Администраторы, у пользователя под которым я сижу (он у меня один) обозначено в ГРУППЫ - Owners, РОЛЬ - Developer.
Может где то в конфигах есть настройка на авторизацию вместе с фронтом? Или может какие сессии нужно добавлять? Или у меня пользователь с неправильными правами?
Koresh Попробуй dump(app.user), посмотри, что там есть. Если ничего непонятно, то dump(app.user.toArray()) и увидишь поля на которые можно подвесить условия, хотя, по-моему, один факт того, что переменная не пустая уже является условием.
Но в любом случае посмотри. Либо еще как вариант:
{% if app.user is not empty %}
То есть проверка если пользователь не пустой
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 Делай по другому.
Спасибо! Так работает. Проверил разлогинился/залогинился в админке - условие отрабатывает правильно.
Единственное, что проверку if (\BackendAuth::check())
наверное нужно внутри какой то функции делать onRun, onStart или onEnd. Если просто вставить - вызывает ошибку.
Я пока в onRun плагина добавил в файле \plugins\octoclub\tutorial\components\Item.php
. Наверное так же и для категорий сделаю.