Плагин EnvBadge: визуальный индикатор окружения в админке MODX3
Если вы работаете с несколькими копиями одного сайта — боевой (прод), разработка (dev) и тестовый (staging) — то наверняка сталкивались с ситуацией, когда в куче открытых вкладок легко перепутать, где именно вы находитесь. Правки, сделанные «не на том» домене, в лучшем случае теряются, а в худшем ломают живой сайт.
Этот небольшой плагин решает проблему просто и наглядно: он выводит в админке цветной бейдж с названием текущего окружения. Открыли боевой сайт — сверху красная полоса «ПРОД», зашли на разработку — зелёная «РАЗРАБОТКА», на тесте — оранжевая «СТЕЙДЖИНГ». Ошибиться уже не получится: статус виден с первого взгляда, ещё до того как вы начали что-то менять.



Плагин определяет окружение автоматически по домену, с которого открыта админка — ничего вручную переключать не нужно. Для каждого окружения настраивается своя подпись, свой цвет и прозрачность фона. Бейдж можно вывести в двух вариантах: полосой во всю ширину сверху или компактным блоком по центру — на выбор.
Мелочь, но такие мелочи заметно снижают риск дорогих ошибок, особенно в командах, где над проектом работает несколько человек.
Название плагина, например EnvBadge
Событие: OnManagerPageBeforeRender
Этот небольшой плагин решает проблему просто и наглядно: он выводит в админке цветной бейдж с названием текущего окружения. Открыли боевой сайт — сверху красная полоса «ПРОД», зашли на разработку — зелёная «РАЗРАБОТКА», на тесте — оранжевая «СТЕЙДЖИНГ». Ошибиться уже не получится: статус виден с первого взгляда, ещё до того как вы начали что-то менять.



Плагин определяет окружение автоматически по домену, с которого открыта админка — ничего вручную переключать не нужно. Для каждого окружения настраивается своя подпись, свой цвет и прозрачность фона. Бейдж можно вывести в двух вариантах: полосой во всю ширину сверху или компактным блоком по центру — на выбор.
Мелочь, но такие мелочи заметно снижают риск дорогих ошибок, особенно в командах, где над проектом работает несколько человек.
Название плагина, например EnvBadge
Событие: OnManagerPageBeforeRender
<?php
/**
* Plugin: EnvBadge
* Event: OnManagerPageBeforeRender
*/
// Карта: домен => [подпись, цвет RGB, прозрачность 0..1]
$environments = [
'mysite.com' => ['label' => 'ПРОД', 'rgb' => '192, 57, 43', 'opacity' => 0.9],
'dev.mysite.com' => ['label' => 'РАЗРАБОТКА', 'rgb' => '39, 174, 96', 'opacity' => 0.9],
'staging.mysite.com' => ['label' => 'СТЕЙДЖИНГ', 'rgb' => '230, 126, 34', 'opacity' => 0.9],
];
// Размер бейджа: 'full' — полоса во всю ширину, 'small' — компактный по центру
$badgeSize = 'full';
$host = $_SERVER['HTTP_HOST'] ?? '';
if (!isset($environments[$host])) {
return;
}
$label = $environments[$host]['label'];
$rgb = $environments[$host]['rgb'];
$opacity = $environments[$host]['opacity'];
// Стили под выбранный размер
if ($badgeSize === 'small') {
$sizeCss = <<<CSS
left: 50%;
transform: translateX(-50%);
padding: 8px 24px;
font-size: 16px;
border-radius: 5px;
CSS;
} else {
$sizeCss = <<<CSS
left: 0;
right: 0;
padding: 8px 0;
font-size: 15px;
text-align: center;
border-radius: 0;
CSS;
}
$html = <<<HTML
<style>
#env-badge {
position: fixed;
top: 0;
color: #fff;
font-family: Arial, sans-serif;
font-weight: 700;
letter-spacing: 2px;
line-height: 1;
background: rgba({$rgb}, {$opacity});
box-shadow: 0 1px 5px rgba(0,0,0,0.3);
z-index: 100000;
pointer-events: none;
{$sizeCss}
}
</style>
<div id="env-badge">{$label}</div>
HTML;
$modx->controller->addHtml($html); Комментарии: 1
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлайн, заказы постоянно капают.
Как вы синхронизируете базу? Как вы решаете проблему обновлений пакетов на dev\stage — чтобы перенести на prod? Вы используете docker или что-то такое чтобы делать окружение как на prod хостинге?
А если обучающую статью напишете — думаю многие будут вам благодарны.