Я пишу блок и хочу узнать, вошел ли пользователь в панель управления, когда блок просматривается. Я предполагаю, что должно быть что-то вроде isAdminArea() или isEditing(), но до сих пор не смог найти это по собственному желанию!
Сообщите, вошел ли пользователь для редактирования/панели инструментов в Concrete5 из блока
Ответы (4)
Если вы используете Concrete5.6.0 или выше, вы можете сделать это:
global $cp;
$canViewToolbar = (isset($cp) && is_object($cp) && $cp->canViewToolbar());
if ($canViewToolbar) {
//do something...
}
Если вы делаете это в шаблоне темы или блочном представлении, вы можете пропустить много этого мусора и просто сделать это:
global $cp;
if ($cp->canViewToolbar()) {
//do something...
}
Но если вы делаете это в контроллере пакетов или во время системного события, вы захотите использовать мой первый пример (чтобы убедиться, что глобальный объект «Разрешения на сбор» существует).
Если вы используете версию Concrete5 старше 5.6, используйте этот код:
global $cp;
$canViewToolbar = (isset($cp) && ($cp->canWrite() || $cp->canAddSubContent() || $cp->canAdminPage() || $cp->canApproveCollection()));
if ($canViewToolbar) {
//do something...
}
Чтобы улучшить вышесказанное: хотя global
является допустимой конструкцией в PHP, ее использования действительно следует избегать. Это лениво и опасно. Правильный способ доступа к активной модели разрешений в архитектуре C5:
$cp = new Permissions(Page::getCurrentPage());
if ($cp->canViewToolbar()) {
...
}
Если вас просто интересует режим редактирования, это сработает:
<?php
if ($c->isEditMode()) { ?>
//do something
<?php } ?>
Это должно быть так
$u = new User();
if($u->IsLoggedIn()){
//logged in
}
если это не работает, вверху вам может понадобиться
global $u