Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Дело в том, что все настройки в начале исполнения каждой страницы ложатся в GLOBALS, и если там лежат, то берутся оттуда при вызове . Вот на этом мы и сыграем. Да, кстати, по этой причине в настройках нельзя хранить сколько-нибудь большие данные.
Давайте рассмотрим конкретную задачу: в многосайтовой конфигурации на втором сайте сделаем e-mail НЕ уникальным при регистрации.
Итак, идем от общего к частному, как договорились. Поэтому, глобальную настройку ставим вкл.:

Естественно, на втором сайте получаем отлуп:

Сейчас нам надо понять, в какой внедриться. Небольшое пояснение - в GLOBALS нужная настройка ложится только когда сделан любой вызов COption::GetOptionString, даже если не ваша настройка. Но тут успокою - COption дергается в первых строчках кода (когда ядро выставляет error_reporting), так что вы можете использовать любое удобное событие по ссылке выше. Лучше, если позволяет задача, самый верхний. Возьмем .
Но для начала узнаем имя ключа массива, где хранится нужная настройка. Излюбленный и проверенный метод - через инспектор:

Теперь о том, как хранятся опции в GLOBALS. Хранятся они в ключе MAIN_OPTIONS, разгруппированные по сайтам. Общие настройки для любого сайта лежат в группе [-]. Ну а далее идет дробление по модулям. То есть картина какая-то такая:

(массив ключа [-] на деле огромен, для скрина я его вырезал)
Ну и теперь находим нашу опцию в этом ключе. Конечный путь будет: $GLOBALS['MAIN_OPTIONS']['-']['main']['new_user_email_uniq_check']. И будет содержаться значение Y. Нам надо поменять на N. Код получается предельно простым:
Зачем isset и вызов GetOption? Это хак, чтобы наполнить GLOBALS, если он вдруг оказался пустым.
Готово!
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Переопределяем значение GetOptionString для определенного посетителя
Практически каждый модуль имеет настройки. И иногда встает задача, что какую-то настройку для частного конкретного случая надо переопределить (для конкретной группы пользователей, или раздела сайта, или ID сайта). Но меняя в модуле, настройка меняется для всех случаев. Вот как это можно переопределить в частном случае.Дело в том, что все настройки в начале исполнения каждой страницы ложатся в GLOBALS, и если там лежат, то берутся оттуда при вызове . Вот на этом мы и сыграем. Да, кстати, по этой причине в настройках нельзя хранить сколько-нибудь большие данные.
Давайте рассмотрим конкретную задачу: в многосайтовой конфигурации на втором сайте сделаем e-mail НЕ уникальным при регистрации.
Итак, идем от общего к частному, как договорились. Поэтому, глобальную настройку ставим вкл.:

Естественно, на втором сайте получаем отлуп:

Сейчас нам надо понять, в какой внедриться. Небольшое пояснение - в GLOBALS нужная настройка ложится только когда сделан любой вызов COption::GetOptionString, даже если не ваша настройка. Но тут успокою - COption дергается в первых строчках кода (когда ядро выставляет error_reporting), так что вы можете использовать любое удобное событие по ссылке выше. Лучше, если позволяет задача, самый верхний. Возьмем .
Но для начала узнаем имя ключа массива, где хранится нужная настройка. Излюбленный и проверенный метод - через инспектор:

Теперь о том, как хранятся опции в GLOBALS. Хранятся они в ключе MAIN_OPTIONS, разгруппированные по сайтам. Общие настройки для любого сайта лежат в группе [-]. Ну а далее идет дробление по модулям. То есть картина какая-то такая:

(массив ключа [-] на деле огромен, для скрина я его вырезал)
Ну и теперь находим нашу опцию в этом ключе. Конечный путь будет: $GLOBALS['MAIN_OPTIONS']['-']['main']['new_user_email_uniq_check']. И будет содержаться значение Y. Нам надо поменять на N. Код получается предельно простым:
public static function OnPageStart() {
if (SITE_ID == 'vw') {
if (!isset($GLOBALS['MAIN_OPTIONS']['-']['main'])) {
COption::GetOptionString('main', 'foo');
}
$GLOBALS['MAIN_OPTIONS']['-']['main']['new_user_email_uniq_check'] = 'N';
}
} |
Зачем isset и вызов GetOption? Это хак, чтобы наполнить GLOBALS, если он вдруг оказался пустым.
Готово!
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх