Странно работает плагин.
        Добрый вечер. Узнаю, изучаю 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 в шаблон.
Не нужно ломать голову над плагином, не будет возможных проблем с кэшированием контента…
Если пользуете феном, всю логику можно поместить в чанк, если нет написать простой сниппет обертку.
                    Не нужно ломать голову над плагином, не будет возможных проблем с кэшированием контента…
Если пользуете феном, всю логику можно поместить в чанк, если нет написать простой сниппет обертку.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.