惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
V
V2EX
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
A
About on SuperTechFans
博客园_首页
L
LangChain Blog
量子位
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
1С-Битрикс: кастомная страница настроек темы через Option...
Андрей Викулов (VProger) · 2026-06-26 · via DEV Community

Андрей Викулов (VProger)

1С-Битрикс: кастомная страница настроек темы через Option API

Задача: сделать свою страницу настроек темы и сохранить параметры так, чтобы они стабильно применялись в шаблоне сайта. В новой документации Битрикс для этой задачи есть все базовые элементы: работа с административной панелью, API опций модуля и стандартная защита формы от CSRF.

Официальные источники:

В чем проблема

Частая ситуация: параметры темы хранят в файлах или случайных таблицах, а затем сложно понять, где именно меняется цвет, телефон, логотип или поведение блока. В итоге:

  • нет единой точки хранения;
  • настройки меняются небезопасно;
  • после обновлений или миграций часть параметров теряется;
  • сложно проверить, что именно применилось на фронте.

Для устойчивой схемы в Битрикс достаточно:

  • хранить настройки в Option;
  • отправлять форму только с CSRF-токеном;
  • читать настройки в шаблоне сайта в одном месте.

Рабочее решение

Ниже минимальный рабочий сценарий без недокументированных зависимостей.

Шаг 1. Добавляем кнопку открытия страницы настройки

Документация по панели администрирования показывает, что можно добавить свою кнопку через AddPanelButton.

<?php
// Например, в шаблоне после подключения пролога
$APPLICATION->AddPanelButton([
"ID" => "theme_settings",
"TEXT" => "Настройки темы",
"TYPE" => "BIG",
"SORT" => 100,
"HREF" => "/local/admin/theme_settings.php",
]);

API:

Если хотите открыть страницу в popup, используйте GetPopupLink:

https://docs.1c-bitrix.ru/api/classes/CAllMain.html#method\_GetPopupLink

Шаг 2. Делаем форму с CSRF-токеном

В новой документации по безопасности явно указаны bitrixsessidpost() и checkbitrixsessid().

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");
use Bitrix\Main\Config\Option;
$moduleId = "main";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (!check_bitrix_sessid()) {
die("Invalid session");
}
$phone = trim((string)($_POST["theme_phone"] ?? ""));
$accent = trim((string)($_POST["theme_accent"] ?? ""));
Option::set($moduleId, "theme_phone", $phone);
Option::set($moduleId, "theme_accent", $accent);
}
$savedPhone = Option::get($moduleId, "theme_phone", "");
$savedAccent = Option::get($moduleId, "theme_accent", "#0a7c66");
?>
<form method="post">
<?= bitrix_sessid_post(); ?>
<label>Телефон в шапке</label><br>
<input type="text" name="theme_phone" value="<?= htmlspecialchars($savedPhone, ENT_QUOTES, "UTF-8"); ?>"><br><br>
<label>Акцентный цвет</label><br>
<input type="text" name="theme_accent" value="<?= htmlspecialchars($savedAccent, ENT_QUOTES, "UTF-8"); ?>"><br><br>
<button type="submit">Сохранить</button>
</form>

Документация:

Шаг 3. Читаем настройки в шаблоне темы

Дальше используем те же ключи Option в шаблоне:

<?php
use Bitrix\Main\Config\Option;
$moduleId = "main";
$themePhone = Option::get($moduleId, "theme_phone", "+7 (000) 000-00-00");
$themeAccent = Option::get($moduleId, "theme_accent", "#0a7c66");
?>
<style>
:root { --theme-accent: <?= htmlspecialchars($themeAccent, ENT_QUOTES, "UTF-8"); ?>; }
</style>
<a href="tel:<?= htmlspecialchars($themePhone, ENT_QUOTES, "UTF-8"); ?>">
<?= htmlspecialchars($themePhone, ENT_QUOTES, "UTF-8"); ?>
</a>

Идея простая: одна точка сохранения и одна точка чтения. Это упрощает поддержку и перенос.

Проверка результата

Проверяем по шагам:

  1. Открыть страницу настроек через кнопку панели.
  2. Сохранить значения.
  3. Обновить публичную страницу и убедиться, что новые данные применились.

Быстрая проверка из HTML:

curl -s https://example.ru/ | grep -E "theme-accent|tel:"

Ожидаемый признак: в ответе видны обновленные значения цвета и телефона.

Типичные ошибки

❌ Ошибка: сохраняют POST без проверки токена.

Причина: нет checkbitrixsessid().

Как исправить: добавить проверку и bitrixsessidpost() в форму.

❌ Ошибка: ключи в Option::set() и Option::get() не совпадают.

Причина: опечатки вроде themephone vs themetel.

Как исправить: вынести ключи в константы или использовать одинаковые литералы.

❌ Ошибка: выводят значение без экранирования.

Причина: прямой вывод пользовательского текста в HTML.

Как исправить: использовать htmlspecialchars(..., ENT_QUOTES, &quot;UTF-8&quot;).

❌ Ошибка: ожидают, что кнопка панели появится для всех пользователей.

Причина: права и настройки панели зависят от пользователя/группы.

Как исправить: проверить доступы и настройки панели администрирования:

https://docs.1c-bitrix.ru/pages/cms-basics/admin-panel.html

Где применять

  • В темах, где нужно управлять контактами, цветами и переключателями блоков.
  • В проектах с контент-редакторами, которым нужен простой интерфейс без правок кода.
  • В production, где важно централизованное хранение параметров.

Дополнительно по структуре проекта:

Read more on Viku-Lov Studio