[{"data":1,"prerenderedAt":795},["ShallowReactive",2],{"navigation_docs":3,"-modules-options":238,"-modules-options-surround":792},[4,45,60],{"title":5,"description":6,"icon":7,"path":8,"stem":9,"children":10},"Методология",null,"ruler","\u002Fmethodology","1.methodology",[11,15,20,25,30,35,40],{"title":12,"path":8,"stem":13,"description":14},"bxshef: методология и проверка навыков","1.methodology\u002Findex","Как писать навыки ИИ-агентов для Битрикса и как проверять, что им можно верить",{"title":16,"path":17,"stem":18,"description":19},"Стандарт навыка","\u002Fmethodology\u002Fstandard","1.methodology\u002F1.standard","11 правил, каждое из провала на стенде",{"title":21,"path":22,"stem":23,"description":24},"Методология проверки","\u002Fmethodology\u002Fmethod","1.methodology\u002F2.method","lint → eval → стенд; что измерено",{"title":26,"path":27,"stem":28,"description":29},"bxshef — CLI","\u002Fmethodology\u002Fbxshef","1.methodology\u002F3.bxshef","lint, eval, feedback",{"title":31,"path":32,"stem":33,"description":34},"GitHub Action","\u002Fmethodology\u002Faction","1.methodology\u002F4.action","тот же lint + eval в любом репозитории навыков",{"title":36,"path":37,"stem":38,"description":39},"Заготовка репозитория","\u002Fmethodology\u002Ftemplate","1.methodology\u002F5.template","с чего начать автору модуля",{"title":41,"path":42,"stem":43,"description":44},"Приёмник отзывов","\u002Fmethodology\u002Ffeedback","1.methodology\u002F6.feedback","куда уходят отзывы ИИ-агентов",{"title":46,"description":6,"icon":47,"path":48,"stem":49,"children":50},"Навыки","sparkles","\u002Fskills","2.skills",[51,55],{"title":52,"path":48,"stem":53,"description":54},"Навыки shef.*","2.skills\u002Findex","npx skills add bx-shef\u002Fskills",{"title":56,"path":57,"stem":58,"description":59},"shef-feedback","\u002Fskills\u002Fshef-feedback","2.skills\u002F1.shef-feedback","Отправить отзыв о навыке shef-* или навыке команды. Брать ВСЕГДА, когда просят оставить или отправить отзыв о навыке — даже если сам навык в диалоге не виден, —",{"title":61,"description":6,"icon":62,"path":63,"stem":64,"children":65},"Модули shef.*","package","\u002Fmodules","3.modules",[66,69,131,179],{"title":61,"path":63,"stem":67,"description":68},"3.modules\u002Findex","Что за чем ставить",{"title":70,"description":6,"path":71,"stem":72,"children":73},"shef.options","\u002Fmodules\u002Foptions","3.modules\u002F1.options\u002Findex",[74,76,81,86,91,96,101,106,110,114,119,123,127],{"title":70,"path":71,"stem":72,"description":75},"фундамент: настройки, трейты, компоненты",{"title":77,"path":78,"stem":79,"description":80},"[`\\Shef\\Options\\Installator`] Installer","\u002Fmodules\u002Foptions\u002Finstaller","3.modules\u002F1.options\u002F1.installer","Для облегчения установок.",{"title":82,"path":83,"stem":84,"description":85},"Сборка, CI и релиз","\u002Fmodules\u002Foptions\u002Fbuild-and-install","3.modules\u002F1.options\u002F10.build-and-install","Раскладка репозитория — в module-structure.md, процесс —\nв CONTRIBUTING.md, установка глазами пользователя —\nв README.md.",{"title":87,"path":88,"stem":89,"description":90},"Раскладка репозитория","\u002Fmodules\u002Foptions\u002Fmodule-structure","3.modules\u002F1.options\u002F11.module-structure","Файл про устройство репозитория. Опорные точки модуля — в CLAUDE.md,\nпроцесс — в CONTRIBUTING.md, сборка — в\nbuild-and-install.md.",{"title":92,"path":93,"stem":94,"description":95},"Проверка на портале","\u002Fmodules\u002Foptions\u002Fportal-check","3.modules\u002F1.options\u002F12.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, кеш,\nраскладка файлов, поведение при обновлении. Проверять это приходится руками —\nи лучше по списку, потому что забытый шаг находит не разработчик, а клиент.",{"title":97,"path":98,"stem":99,"description":100},"[`\\Shef\\Options\\Main\\Options`] Опции настроек модуля","\u002Fmodules\u002Foptions\u002Foptions","3.modules\u002F1.options\u002F2.options","Поддерживает следующие типы:",{"title":102,"path":103,"stem":104,"description":105},"Работа с пользователями","\u002Fmodules\u002Foptions\u002Fsecurity","3.modules\u002F1.options\u002F3.security","",{"title":107,"path":108,"stem":109,"description":105},"[`\\Shef\\Options\\Main\\Utils`] Утилиты","\u002Fmodules\u002Foptions\u002Futils","3.modules\u002F1.options\u002F4.utils",{"title":111,"path":112,"stem":113,"description":105},"[`\\Shef\\Options\\Components`] Работа с компонентами","\u002Fmodules\u002Foptions\u002Fcomponents","3.modules\u002F1.options\u002F5.components",{"title":115,"path":116,"stem":117,"description":118},"[`\\Shef\\Options\\Options`] Паттерны","\u002Fmodules\u002Foptions\u002Fpattern","3.modules\u002F1.options\u002F6.pattern","Запускаемые примеры: singleton.php,\nconfig.php, smartstd.php —\nкак их гонять, написано в examples\u002FREADME.md.",{"title":120,"path":121,"stem":122,"description":105},"[`\\Shef\\Options\\Tests`] Тестирование","\u002Fmodules\u002Foptions\u002Ftests","3.modules\u002F1.options\u002F7.tests",{"title":124,"path":125,"stem":126,"description":105},"[`\\Shef\\Options\\TraitList`] Набор трейтов","\u002Fmodules\u002Foptions\u002Ftraitlist","3.modules\u002F1.options\u002F8.traitlist",{"title":128,"path":129,"stem":130,"description":105},"Правила для ИИ-агентов в этом репозитории","\u002Fmodules\u002Foptions\u002Fagent-rules","3.modules\u002F1.options\u002F9.agent-rules",{"title":132,"description":6,"path":133,"stem":134,"children":135},"shef.problems","\u002Fmodules\u002Fproblems","3.modules\u002F2.problems\u002Findex",[136,138,143,147,152,157,161,166,169,172,175],{"title":132,"path":133,"stem":134,"description":137},"логи, журнал событий, учёт проблем",{"title":139,"path":140,"stem":141,"description":142},"[`\\Shef\\Problems\\Integration`] События и меню","\u002Fmodules\u002Fproblems\u002Fevents","3.modules\u002F2.problems\u002F1.events","Что модуль регистрирует в ядре при установке. Список — в .settings.php, ключ\ninstallEvents; что каждый обработчик существует, сверяет\ntests\u002Fsettings_test.php.",{"title":144,"path":145,"stem":146,"description":105},"Безопасность логов","\u002Fmodules\u002Fproblems\u002Fsecurity","3.modules\u002F2.problems\u002F10.security",{"title":148,"path":149,"stem":150,"description":151},"Быстрая отладка: `_pr`, `_log`, `_log1`","\u002Fmodules\u002Fproblems\u002Fdeffunctions","3.modules\u002F2.problems\u002F2.deffunctions","Функции объявляет def-functions.php, подключается он из include.php.",{"title":153,"path":154,"stem":155,"description":156},"Уровни логирования","\u002Fmodules\u002Fproblems\u002Floglevel","3.modules\u002F2.problems\u002F3.loglevel","Уровни — стандарт PSR-3, в Monolog это \\Monolog\\Level. Ниже — когда какой брать.",{"title":158,"path":159,"stem":160,"description":105},"[`\\Shef\\Problems\\Integration\\Monolog`] Monolog","\u002Fmodules\u002Fproblems\u002Fmonolog","3.modules\u002F2.problems\u002F4.monolog",{"title":162,"path":163,"stem":164,"description":165},"Ротация логов","\u002Fmodules\u002Fproblems\u002Flogrotate","3.modules\u002F2.problems\u002F5.logrotate","Логи модуля лежат в каталоге логов — по умолчанию на уровень выше корня сайта,\nдля BitrixVM \u002Fhome\u002Fbitrix\u002Fsh_log\u002F*.log, — и сами не чистятся. Ротацию делает\nlogrotate — системная утилита, а не Monolog: Monolog тоже умеет\n(RotatingFileHandler), но тогда за файлами следит каждый PHP-процесс, а не\nодна служба.",{"title":128,"path":167,"stem":168,"description":105},"\u002Fmodules\u002Fproblems\u002Fagent-rules","3.modules\u002F2.problems\u002F6.agent-rules",{"title":82,"path":170,"stem":171,"description":85},"\u002Fmodules\u002Fproblems\u002Fbuild-and-install","3.modules\u002F2.problems\u002F7.build-and-install",{"title":87,"path":173,"stem":174,"description":90},"\u002Fmodules\u002Fproblems\u002Fmodule-structure","3.modules\u002F2.problems\u002F8.module-structure",{"title":92,"path":176,"stem":177,"description":178},"\u002Fmodules\u002Fproblems\u002Fportal-check","3.modules\u002F2.problems\u002F9.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, меню,\nраскладка файлов, журнал событий, поведение при обновлении. Проверять это\nприходится руками — и лучше по списку, потому что забытый шаг находит не\nразработчик, а клиент.",{"title":180,"description":6,"path":181,"stem":182,"children":183},"shef.insync","\u002Fmodules\u002Finsync","3.modules\u002F3.insync\u002Findex",[184,186,191,194,198,203,208,213,218,222,227,232,235],{"title":180,"path":181,"stem":182,"description":185},"агенты, импорт, API-клиенты, модели",{"title":187,"path":188,"stem":189,"description":190},"[`\\Shef\\InSync\\Agents`] Агенты","\u002Fmodules\u002Finsync\u002Fagents","3.modules\u002F3.insync\u002F1.agents","Агент импорта — наследник \\Shef\\InSync\\Agents\\AAgent. Описание агента для\nb_agent — \\Shef\\InSync\\Agents\\Entity, установку и управление берёт на себя\n\\Shef\\InSync\\Agents\\Manager.",{"title":87,"path":192,"stem":193,"description":90},"\u002Fmodules\u002Finsync\u002Fmodule-structure","3.modules\u002F3.insync\u002F10.module-structure",{"title":92,"path":195,"stem":196,"description":197},"\u002Fmodules\u002Finsync\u002Fportal-check","3.modules\u002F3.insync\u002F11.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, левое\nменю, раскладка компонентов, агенты, таблица импорта, поведение при\nобновлении. Проверять это приходится руками — и лучше по списку, потому что\nзабытый шаг находит не разработчик, а клиент.",{"title":199,"path":200,"stem":201,"description":202},"Безопасность","\u002Fmodules\u002Finsync\u002Fsecurity","3.modules\u002F3.insync\u002F12.security","Модуль даёт другим модулям заготовки для синхронизаций, и самые опасные места\nу него общие с ними: кто может запускать агенты и импорт, что ложится в каталоги\nимпорта, что уходит в SQL и в лог. Ниже — что держит модуль и что остаётся\nпроекту.",{"title":204,"path":205,"stem":206,"description":207},"[`\\Shef\\InSync\\Sync`] Импорт","\u002Fmodules\u002Finsync\u002Fimport","3.modules\u002F3.insync\u002F2.import","Импорт идёт в два шага через таблицу импорта \\Shef\\InSync\\Sync\\Model\\SyncTable\n(shef_insync_model):",{"title":209,"path":210,"stem":211,"description":212},"[`\\Shef\\InSync\\Api`] API","\u002Fmodules\u002Finsync\u002Fapi","3.modules\u002F3.insync\u002F3.api","Обращение к внешнему API по HTTP — наследник \\Shef\\InSync\\Api\\AConnector.",{"title":214,"path":215,"stem":216,"description":217},"[`\\Shef\\InSync\\TraitList\\Xml`] Парсинг XML","\u002Fmodules\u002Finsync\u002Fxml","3.modules\u002F3.insync\u002F4.xml","Разбор XML сделан через SbWereWolf\u002Fxml-navigator\n(статья на Хабре): XMLReader идёт по\nдокументу потоком, а каждый элемент с нужным тегом HierarchyComposer\nпревращает в массив — n имя, v значение, a атрибуты, s вложенные\nэлементы.",{"title":219,"path":220,"stem":221,"description":105},"Компоненты","\u002Fmodules\u002Finsync\u002Fcomponents","3.modules\u002F3.insync\u002F5.components",{"title":223,"path":224,"stem":225,"description":226},"Страницы","\u002Fmodules\u002Finsync\u002Fpage","3.modules\u002F3.insync\u002F6.page","Страницы модуля — в левом меню, штатным разделом intranet\n(Bitrix\\Intranet\\CustomSection): раздел «SH Импорт», код shinsync.\nВерхней панели и shef.uiclear больше нет.",{"title":228,"path":229,"stem":230,"description":231},"[`\\Shef\\InSync\\Main\\Options`] Опции настроек модуля","\u002Fmodules\u002Finsync\u002Foptions","3.modules\u002F3.insync\u002F7.options","Опции для страницы настроек модуля импорта (на ShOptionsConfig из\nshef.options): добавьте их во вкладку своего options_conf.php.",{"title":128,"path":233,"stem":234,"description":105},"\u002Fmodules\u002Finsync\u002Fagent-rules","3.modules\u002F3.insync\u002F8.agent-rules",{"title":82,"path":236,"stem":237,"description":85},"\u002Fmodules\u002Finsync\u002Fbuild-and-install","3.modules\u002F3.insync\u002F9.build-and-install",{"id":239,"title":70,"body":240,"description":75,"extension":787,"meta":788,"navigation":607,"path":71,"rawbody":789,"seo":790,"stem":72,"__hash__":791},"docs\u002F3.modules\u002F1.options\u002Findex.md",{"type":241,"value":242,"toc":782},"minimark",[243,247,255,260,315,318,322,328,333,357,364,368,386,390,432,435,439,446,460,463,467,474,490,494,504,510,516,530,536,621,625,642,645,649,652,727,735,739,747,766,778],[244,245,246],"p",{},"Служебный модуль Битрикс24 «коробки». Пользовательских экранов не даёт и\nштатное поведение платформы не меняет — это фундамент, на который опираются\nостальные модули линейки: слой настроек, базовые классы, трейты, абстракции и\nинтерфейсы.",[244,248,249,250,254],{},"Ставится один раз и дальше не требует внимания. Если на портале стоит любой\nдругой модуль ",[251,252,253],"code",{},"shef.*",", этот уже нужен.",[256,257,259],"h1",{"id":258},"что-нужно-для-установки","Что нужно для установки",[261,262,263,274],"table",{},[264,265,266],"thead",{},[267,268,269,272],"tr",{},[270,271],"th",{},[270,273],{},[275,276,277,286,294,305],"tbody",{},[267,278,279,283],{},[280,281,282],"td",{},"PHP",[280,284,285],{},"8.2 и выше",[267,287,288,291],{},[280,289,290],{},"Главный модуль Битрикс",[280,292,293],{},"22.600.300 и выше",[267,295,296,299],{},[280,297,298],{},"Кодировка портала",[280,300,301],{},[302,303,304],"strong",{},"только UTF-8",[267,306,307,310],{},[280,308,309],{},"Расширение PHP",[280,311,312],{},[251,313,314],{},"mbstring",[244,316,317],{},"Портал в CP1251 модуль установить не даст и скажет об этом прямо. Это\nсознательное ограничение: поставиться и выдать вместо русского текста мусор\nхуже, чем не поставиться.",[256,319,321],{"id":320},"установка","Установка",[244,323,324,327],{},[302,325,326],{},"Порядок шагов важен."," Сначала файлы, потом установка в административном\nразделе, и только потом настройки. Обратный порядок даёт модуль, которого\nникто не видит, и причину идут искать в коде, где её нет.",[329,330,332],"h2",{"id":331},"через-composer","Через Composer",[334,335,339],"pre",{"className":336,"code":337,"language":338,"meta":105,"style":105},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","composer require bxshef\u002Foptions\n","bash",[251,340,341],{"__ignoreMap":105},[342,343,346,350,354],"span",{"class":344,"line":345},"line",1,[342,347,349],{"class":348},"sbgvK","composer",[342,351,353],{"class":352},"s_sjI"," require",[342,355,356],{"class":352}," bxshef\u002Foptions\n",[244,358,359,360,363],{},"Модуль развернётся в ",[251,361,362],{},"bitrix\u002Fmodules\u002Fshef.options\u002F"," сам — отдельно ничего\nнастраивать не нужно.",[329,365,367],{"id":366},"из-архива","Из архива",[244,369,370,371,374,375,378,379,382,383,385],{},"Скачайте ",[251,372,373],{},"shef.options.zip"," со страницы релиза и распакуйте в ",[251,376,377],{},"bitrix\u002Fmodules\u002F","\nвашего портала. Внутри архива лежит готовый каталог ",[251,380,381],{},"shef.options\u002F",", поэтому\nпосле распаковки должно получиться ",[251,384,362],{}," — именно\nчерез точку.",[329,387,389],{"id":388},"дальше-в-административном-разделе","Дальше — в административном разделе",[391,392,393,408,411,420,427],"ol",{},[394,395,396,399,400,403,404,407],"li",{},[302,397,398],{},"Настройки → Marketplace → Установленные решения"," → найти «",[342,401,402],{},"SH"," Настройки»\n→ ",[302,405,406],{},"Установить",".",[394,409,410],{},"Дождаться сообщения «Модуль успешно установлен».",[394,412,413,414,407],{},"Открыть настройки модуля: ",[302,415,416,417,419],{},"Настройки → Настройки продукта → Настройки\nмодулей → ",[342,418,402],{}," Настройки",[394,421,422,423,426],{},"Заполнить ",[302,424,425],{},"«Служебный пользователь»"," — это пользователь с правами\nадминистратора, которого не уволят. Другие модули линейки работают от его\nимени. Как минимум подойдёт пользователь с ID 1.",[394,428,429],{},[302,430,431],{},"Сохранить.",[244,433,434],{},"Без четвёртого шага модуль формально стоит, но смежные модули будут работать от\nпользователя по умолчанию — это почти всегда не то, что нужно.",[256,436,438],{"id":437},"кто-видит-модуль","Кто видит модуль",[244,440,441,442,445],{},"По умолчанию — ",[302,443,444],{},"только администраторы",". Поставочные права выбраны узко\nнамеренно, никакой группе доступ не выдаётся автоматически.",[244,447,448,449,452,453,456,457,459],{},"Чтобы открыть настройки кому-то ещё: ",[302,450,451],{},"Настройки → Пользователи → Группы\nпользователей"," → нужная группа → вкладка ",[302,454,455],{},"Доступ"," → уровень доступа к модулю\n«",[342,458,402],{}," Настройки».",[244,461,462],{},"Если сотрудник говорит, что не видит модуль в списке — начинать надо отсюда, а\nне с переустановки.",[256,464,466],{"id":465},"обновление","Обновление",[244,468,469,470,473],{},"Обновление — это повторная раскладка файлов: ",[251,471,472],{},"composer update"," или распаковка\nнового архива поверх. Настройки модуля живут в базе, поэтому обновление их не\nтрогает: «Служебный пользователь» останется на месте.",[475,476,477],"blockquote",{},[244,478,479,486,487,489],{},[302,480,481,482,485],{},"Не правьте ",[251,483,484],{},".settings.php"," на портале."," Это файл модуля, и раскладка\nперетирает его — и ",[251,488,472],{},", и распаковка архива одинаково. Всё, что\nвы там допишете, исчезнет при следующем обновлении без предупреждения.",[256,491,493],{"id":492},"если-что-то-пошло-не-так","Если что-то пошло не так",[244,495,496,499,500,503],{},[302,497,498],{},"Модуля нет в списке решений."," Проверьте, что каталог называется ровно\n",[251,501,502],{},"bitrix\u002Fmodules\u002Fshef.options"," — через точку, строчными. Через дефис или с\nзаглавными буквами Битрикс его не найдёт.",[244,505,506,509],{},[302,507,508],{},"Установка отказывается и пишет про UTF-8."," Портал работает в CP1251. Модуль\nтакие порталы не поддерживает.",[244,511,512,515],{},[302,513,514],{},"Сотрудник не видит модуль в настройках."," Права. См. раздел «Кто видит\nмодуль» выше.",[244,517,518,521,522,525,526,529],{},[302,519,520],{},"Настройки открылись, но без оформления."," Стили лежат в\n",[251,523,524],{},"\u002Fbitrix\u002Fcss\u002Fshef.options\u002Fadmin-options.css",". Откройте этот адрес в браузере:\nесли 404 — файлы не разложились, переустановите модуль; если отдаётся, а\nстраница всё равно «голая» — это кеш, нужен Ctrl+F5 или сброс автокеширования\nв настройках главного модуля. Путь вида ",[251,527,528],{},"\u002Fbitrix\u002Fcache\u002Fjs\u002Fs1\u002F..."," в консоли\nбраузера — верный признак, что вы смотрите на кеш.",[244,531,532,535],{},[302,533,534],{},"Модуль удалили, и смежные модули сломались."," Так и будет: они на него\nопираются. Поставьте обратно либо, если модуль отключён намеренно, сделайте\nзаглушку на вызов:",[334,537,541],{"className":538,"code":539,"language":540,"meta":105,"style":105},"language-php shiki shiki-themes material-theme-lighter github-light github-dark","\u003C?php\nif(!\\Bitrix\\Main\\ModuleManager::isModuleInstalled('shef.options'))\n{\n    class Events\n    {\n        public static function __callStatic(string $name, array $arguments): mixed\n        {\n            return null;\n        }\n    }\n\n    return;\n}\n","php",[251,542,543,548,554,560,566,572,578,584,590,596,602,609,615],{"__ignoreMap":105},[342,544,545],{"class":344,"line":345},[342,546,547],{},"\u003C?php\n",[342,549,551],{"class":344,"line":550},2,[342,552,553],{},"if(!\\Bitrix\\Main\\ModuleManager::isModuleInstalled('shef.options'))\n",[342,555,557],{"class":344,"line":556},3,[342,558,559],{},"{\n",[342,561,563],{"class":344,"line":562},4,[342,564,565],{},"    class Events\n",[342,567,569],{"class":344,"line":568},5,[342,570,571],{},"    {\n",[342,573,575],{"class":344,"line":574},6,[342,576,577],{},"        public static function __callStatic(string $name, array $arguments): mixed\n",[342,579,581],{"class":344,"line":580},7,[342,582,583],{},"        {\n",[342,585,587],{"class":344,"line":586},8,[342,588,589],{},"            return null;\n",[342,591,593],{"class":344,"line":592},9,[342,594,595],{},"        }\n",[342,597,599],{"class":344,"line":598},10,[342,600,601],{},"    }\n",[342,603,605],{"class":344,"line":604},11,[342,606,608],{"emptyLinePlaceholder":607},true,"\n",[342,610,612],{"class":344,"line":611},12,[342,613,614],{},"    return;\n",[342,616,618],{"class":344,"line":617},13,[342,619,620],{},"}\n",[256,622,624],{"id":623},"удаление","Удаление",[244,626,627,628,630,631,634,635,630,638,641],{},"Удаление из административного раздела убирает только свои файлы — подкаталоги\n",[251,629,70],{}," и ",[251,632,633],{},"shef-options"," в ",[251,636,637],{},"\u002Fbitrix\u002Fcss",[251,639,640],{},"\u002Fbitrix\u002Fjs",". Чужое не\nтрогается.",[244,643,644],{},"Удалить модуль не получится, пока на портале стоит другой модуль, который от\nнего зависит: установщик скажет, какой именно.",[256,646,648],{"id":647},"документация","Документация",[244,650,651],{},"Документация модуля живёт в репозитории — так она всегда свежая, а не той\nверсии, что когда-то поставили на портал. Ссылки открываются в новой вкладке.",[653,654,655,664,671,678,684,691,698,705,712,719],"ul",{},[394,656,657],{},[658,659,663],"a",{"href":660,"rel":661},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FCHANGELOG.md",[662],"nofollow","История изменений",[394,665,666],{},[658,667,670],{"href":668,"rel":669},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F2_installer.md",[662],"Installer",[394,672,673],{},[658,674,677],{"href":675,"rel":676},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F3_options.md",[662],"Опции настроек модуля",[394,679,680],{},[658,681,102],{"href":682,"rel":683},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F4_security.md",[662],[394,685,686],{},[658,687,690],{"href":688,"rel":689},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F5_utils.md",[662],"Утилиты",[394,692,693],{},[658,694,697],{"href":695,"rel":696},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F6_components.md",[662],"Работа с компонентами",[394,699,700],{},[658,701,704],{"href":702,"rel":703},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F7_pattern.md",[662],"Паттерны",[394,706,707],{},[658,708,711],{"href":709,"rel":710},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F8_tests.md",[662],"Тестирование",[394,713,714],{},[658,715,718],{"href":716,"rel":717},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F9_traitlist.md",[662],"Набор трейтов",[394,720,721,726],{},[658,722,725],{"href":723,"rel":724},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fexamples\u002FREADME.md",[662],"Примеры"," — запускаемые, в том числе на вашем портале",[244,728,729,730,407],{},"Весь репозиторий — ",[658,731,734],{"href":732,"rel":733},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions",[662],"bx-shef\u002Foptions",[256,736,738],{"id":737},"лицензия-и-поддержка","Лицензия и поддержка",[244,740,741,742,407],{},"MIT, см. ",[658,743,746],{"href":744,"rel":745},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FLICENSE",[662],"LICENSE",[244,748,749,750,755,756,760,761,407],{},"ИП Шевчик И.С., ",[658,751,754],{"href":752,"rel":753},"https:\u002F\u002Fbx-shef.by\u002F",[662],"bx-shef.by"," — вопросы и предложения на\n",[658,757,759],{"href":758},"mailto:offer@bx-shef.by","offer@bx-shef.by"," или в ",[658,762,765],{"href":763,"rel":764},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fissues",[662],"задачи репозитория",[767,768,769],"note",{},[244,770,771,772,777],{},"Источник: ",[658,773,776],{"href":774,"rel":775},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FREADME.md",[662],"options\u002FREADME.md"," — правки туда, сайт пересобирается сам.",[779,780,781],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":105,"searchDepth":556,"depth":556,"links":783},[784,785,786],{"id":331,"depth":550,"text":332},{"id":366,"depth":550,"text":367},{"id":388,"depth":550,"text":389},"md",{},"---\ntitle: \"shef.options\"\ndescription: \"фундамент: настройки, трейты, компоненты\"\n---\n\nСлужебный модуль Битрикс24 «коробки». Пользовательских экранов не даёт и\nштатное поведение платформы не меняет — это фундамент, на который опираются\nостальные модули линейки: слой настроек, базовые классы, трейты, абстракции и\nинтерфейсы.\n\nСтавится один раз и дальше не требует внимания. Если на портале стоит любой\nдругой модуль `shef.*`, этот уже нужен.\n\n# Что нужно для установки\n\n| | |\n|---|---|\n| PHP | 8.2 и выше |\n| Главный модуль Битрикс | 22.600.300 и выше |\n| Кодировка портала | **только UTF-8** |\n| Расширение PHP | `mbstring` |\n\nПортал в CP1251 модуль установить не даст и скажет об этом прямо. Это\nсознательное ограничение: поставиться и выдать вместо русского текста мусор\nхуже, чем не поставиться.\n\n# Установка\n\n**Порядок шагов важен.** Сначала файлы, потом установка в административном\nразделе, и только потом настройки. Обратный порядок даёт модуль, которого\nникто не видит, и причину идут искать в коде, где её нет.\n\n## Через Composer\n\n```bash\ncomposer require bxshef\u002Foptions\n```\n\nМодуль развернётся в `bitrix\u002Fmodules\u002Fshef.options\u002F` сам — отдельно ничего\nнастраивать не нужно.\n\n## Из архива\n\nСкачайте `shef.options.zip` со страницы релиза и распакуйте в `bitrix\u002Fmodules\u002F`\nвашего портала. Внутри архива лежит готовый каталог `shef.options\u002F`, поэтому\nпосле распаковки должно получиться `bitrix\u002Fmodules\u002Fshef.options\u002F` — именно\nчерез точку.\n\n## Дальше — в административном разделе\n\n1. **Настройки → Marketplace → Установленные решения** → найти «[SH] Настройки»\n   → **Установить**.\n2. Дождаться сообщения «Модуль успешно установлен».\n3. Открыть настройки модуля: **Настройки → Настройки продукта → Настройки\n   модулей → [SH] Настройки**.\n4. Заполнить **«Служебный пользователь»** — это пользователь с правами\n   администратора, которого не уволят. Другие модули линейки работают от его\n   имени. Как минимум подойдёт пользователь с ID 1.\n5. **Сохранить.**\n\nБез четвёртого шага модуль формально стоит, но смежные модули будут работать от\nпользователя по умолчанию — это почти всегда не то, что нужно.\n\n# Кто видит модуль\n\nПо умолчанию — **только администраторы**. Поставочные права выбраны узко\nнамеренно, никакой группе доступ не выдаётся автоматически.\n\nЧтобы открыть настройки кому-то ещё: **Настройки → Пользователи → Группы\nпользователей** → нужная группа → вкладка **Доступ** → уровень доступа к модулю\n«[SH] Настройки».\n\nЕсли сотрудник говорит, что не видит модуль в списке — начинать надо отсюда, а\nне с переустановки.\n\n# Обновление\n\nОбновление — это повторная раскладка файлов: `composer update` или распаковка\nнового архива поверх. Настройки модуля живут в базе, поэтому обновление их не\nтрогает: «Служебный пользователь» останется на месте.\n\n> **Не правьте `.settings.php` на портале.** Это файл модуля, и раскладка\n> перетирает его — и `composer update`, и распаковка архива одинаково. Всё, что\n> вы там допишете, исчезнет при следующем обновлении без предупреждения.\n\n# Если что-то пошло не так\n\n**Модуля нет в списке решений.** Проверьте, что каталог называется ровно\n`bitrix\u002Fmodules\u002Fshef.options` — через точку, строчными. Через дефис или с\nзаглавными буквами Битрикс его не найдёт.\n\n**Установка отказывается и пишет про UTF-8.** Портал работает в CP1251. Модуль\nтакие порталы не поддерживает.\n\n**Сотрудник не видит модуль в настройках.** Права. См. раздел «Кто видит\nмодуль» выше.\n\n**Настройки открылись, но без оформления.** Стили лежат в\n`\u002Fbitrix\u002Fcss\u002Fshef.options\u002Fadmin-options.css`. Откройте этот адрес в браузере:\nесли 404 — файлы не разложились, переустановите модуль; если отдаётся, а\nстраница всё равно «голая» — это кеш, нужен Ctrl+F5 или сброс автокеширования\nв настройках главного модуля. Путь вида `\u002Fbitrix\u002Fcache\u002Fjs\u002Fs1\u002F...` в консоли\nбраузера — верный признак, что вы смотрите на кеш.\n\n**Модуль удалили, и смежные модули сломались.** Так и будет: они на него\nопираются. Поставьте обратно либо, если модуль отключён намеренно, сделайте\nзаглушку на вызов:\n\n```php\n\u003C?php\nif(!\\Bitrix\\Main\\ModuleManager::isModuleInstalled('shef.options'))\n{\n\tclass Events\n\t{\n\t\tpublic static function __callStatic(string $name, array $arguments): mixed\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn;\n}\n```\n\n# Удаление\n\nУдаление из административного раздела убирает только свои файлы — подкаталоги\n`shef.options` и `shef-options` в `\u002Fbitrix\u002Fcss` и `\u002Fbitrix\u002Fjs`. Чужое не\nтрогается.\n\nУдалить модуль не получится, пока на портале стоит другой модуль, который от\nнего зависит: установщик скажет, какой именно.\n\n# Документация\n\nДокументация модуля живёт в репозитории — так она всегда свежая, а не той\nверсии, что когда-то поставили на портал. Ссылки открываются в новой вкладке.\n\n* [История изменений](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FCHANGELOG.md)\n* [Installer](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F2_installer.md)\n* [Опции настроек модуля](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F3_options.md)\n* [Работа с пользователями](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F4_security.md)\n* [Утилиты](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F5_utils.md)\n* [Работа с компонентами](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F6_components.md)\n* [Паттерны](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F7_pattern.md)\n* [Тестирование](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F8_tests.md)\n* [Набор трейтов](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fdocs\u002F9_traitlist.md)\n* [Примеры](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002Fexamples\u002FREADME.md) — запускаемые, в том числе на вашем портале\n\nВесь репозиторий — [bx-shef\u002Foptions](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions).\n\n# Лицензия и поддержка\n\nMIT, см. [LICENSE](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FLICENSE).\n\nИП Шевчик И.С., [bx-shef.by](https:\u002F\u002Fbx-shef.by\u002F) — вопросы и предложения на\noffer@bx-shef.by или в [задачи репозитория](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fissues).\n\n::note\nИсточник: [options\u002FREADME.md](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Foptions\u002Fblob\u002Fmain\u002FREADME.md) — правки туда, сайт пересобирается сам.\n::\n\n",{"title":70,"description":75},"19VPtb3xWqP6-D9PgSGhXU5FlZ7_uSFhx23CVULYE5g",[793,794],{"title":61,"path":63,"stem":67,"description":68,"children":-1},{"title":77,"path":78,"stem":79,"description":80,"children":-1},1790857269088]