Странно работает плагин.
Добрый вечер. Узнаю, изучаю MODX и решила сама попробовать написать плагин. Плагин простой.
На сайте есть два контекста web и weben. Я хочу: если я в административной панели залогинена, то показывать панельку во фронте(в web, weben). Но она показывается только в weben. Поискав на сайтах, поняла, что нужно чтоб авторизация происходила во всех контекстах и нашла код:
На сайте есть два контекста web и weben. Я хочу: если я в административной панели залогинена, то показывать панельку во фронте(в web, weben). Но она показывается только в weben. Поискав на сайтах, поняла, что нужно чтоб авторизация происходила во всех контекстах и нашла код:
if ($modx->event->name == 'OnWebPageInit') {
if (!$modx->user->hasSessionContext('web') && $modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator')) {
$modx->user->addSessionContext('web');
} elseif ($modx->user->hasSessionContext('web') && !$modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator')) {
$modx->user->removeSessionContext('web');
}
}
Но с сочетаем с другим плагином:<?php
if ($modx->event->name == 'OnWebPagePrerender') {
$users = trim($modx->getOption('panel_users'));
$users_arr = array_map('trim', explode(',', $users));
$register = ($users == '' && $modx->user->hasSessionContext('mgr')) ||
($modx->user->id > 0 && in_array($modx->user->id, $users_arr));
if ($register) {
$html = '
<div class="section edit-panel">
<div class="container">
<ul class="nav nav-inline">
<li><a href="/backend/index.php?a=resource/update&id=' . $modx->resource->id . '">Редактировать страницу</a></li>
<li><a href="/backend/?a=resource/create">Добавить страницу</a></li>
</div>
</div>';
if (strpos($modx->resource->_output, '<body>') !== false) {
$modx->resource->_output =
preg_replace("#(<body>)#i", $html . "\n\\1", $modx->resource->_output, true);
} else {
$modx->resource->_output .= $html;
}
}
}
Панелька начинает странно работать и выкидывает из административной части(бэкенде), если обновить страницу во фронте. Но панель начала показываться в двух контекстах. Подскажите пожалуйста, как нужно объеденить два плагина, чтоб панелька появлялась в двух контекстах, если я авторизована в бэкенде и при выходе из бэкенде исчезала. Комментарии: 3
Попробуйте проверять только на авторизацию в контексте mgr:
<?php
if(!$modx->user->hasSessionContext('mgr')) return;
if($modx->event->name = ...
Писала так:
<?php
if ($modx->event->name == 'OnWebPagePrerender') {
if (!$modx->user->isAuthenticated('mgr')) {return;}
$html = '
<div class="section edit-panel">
<div class="container">
<ul class="nav nav-inline">
<li><a href="/backend/index.php?a=resource/update&id='.$modx->resource->id.'">Редактировать страницу</a></li>
<li><a href="/backend/?a=resource/create">Добавить страницу</a></li>
</div>
</div>';
if (false !== strpos($modx->resource->_output, '<body>')) {
$modx->resource->_output = str_replace("<body>", "<body>" .$html, $modx->resource->_output);
}
else {
$modx->resource->_output = str_replace('<body class="blue">', '<body class="blue">' .$html, $modx->resource->_output);
}
}
Появляется только в одном контексте.(((
в вашем случае лучше/ проще добавить этот html в шаблон.
Не нужно ломать голову над плагином, не будет возможных проблем с кэшированием контента…
Если пользуете феном, всю логику можно поместить в чанк, если нет написать простой сниппет обертку.
Не нужно ломать голову над плагином, не будет возможных проблем с кэшированием контента…
Если пользуете феном, всю логику можно поместить в чанк, если нет написать простой сниппет обертку.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.