MODX. Метод: getOption()
Отредактировано: 23 Декабря 2018
getOption()
Чаще всего метод используется для получения настроек системы:
// значение настройки, если она не задана то null
$value = $modx->getOption('имя настройки');
// значение настройки, если она не задана то значение по умолчанию
$value = $modx->getOption('имя настройки', null, 'значение по умолчанию');
// значение настройки, если она не задана или пуста, то значение по умолчанию
$value = $modx->getOption('название настройки', null, 'значение по умолчанию', true);
getOption интерпретирует значение 0 как 0, а не как null.
Помимо получения настроек getOption может быть использован для поиска значений в любом массиве. Второй параметр вызова отвечает за место поиска:
- null — настройки MODX.
- имя массива — массив для поиска, например, $scriptProperties (массив с настройками какого-либо сниппета).
Подробнее о том, как интерпретируются параметры массива $ScriptProperties с разными стилями записи сниппета, можно почитать у Боба.
// поиск по простому массиву $scriptProperties
$count = $modx->getOption('number', $scriptProperties, 5, true);
// поиск по ассоциативному массиву
$a = array(
'color1' => 'Белый',
'color2' => 'Синий',
'color3' => 'Красный',
);
$color1 = $modx->getOption('color1', $a, 'Серый'); // выведет Белый
$color5 = $modx->getOption('color5', $a, 'Серый'); // выведет Серый
// поиск по массиву с числовым ключем
$a = array(
1 => 'Белый',
2 => 'Синий',
4 => 'Красный',
);
$color1 = $modx->getOption('1', $a, 'Серый'); // выведет Белый
$color5 = $modx->getOption('5', $a, 'Серый'); // выведет Серый
// проверка глобальных массивов $_GET, $_POST, $_SERVER, $_SESSION и пр.
$option = $modx->getOption('secret_key', $_SESSION, null);
$option = $modx->getOption('product_id', $_GET, 0);
$option = $modx->getOption('user_email', $_POST, '', true);
Если getOption() не нашел ключ, он не сдаётся и не возвращает значение по умолчанию сразу, вместо этого он выполняет поиск по настройкам MODX. Тоесть, если вы ищете свойство сниппета, $_POST или $_GET переменную с именем «emailSender» и свойство не будет установлено, вы получите значение emailSender из настройки системы MODX (пользовательскую настройку, настройку группы или контекстную настройку, если есть один из них). Это может играть как в пользу разработчика, так и наоборот, поэтому, если не хотите чтобы вместо отсутствующего параметра массива, getOption() подставлял настройки системы — не используйте свойства с тем же именем, что и в настройках.
С помощью метода getOption() можно не только проверять, но и передавать массив:
$a = array(
1 => 'Red',
2 => 'Blue',
4 => 'Green',
);
$colors = $modx->getOption(array('1','2','5', $a, 'Gray'));
// вернет
Array (
[1] => Red
[2] => Blue
[5] => Gray
)
Если первым аргументом является массив, то метод getOption будет рекурсивно вызываться для каждого элемента и составлять результирующий массив. Ключи оригинального массива сохранены не будут.
Механизм работы и приоритет настроек
При запуске MODX, создаётся один комплексный массив настроек ($modx->config). Настройки в котором хранятся в следующем порядке:
- настройки системы;
- настройки контекста;
- настройки пользовательских групп;
- настройки пользователя.
Метод getOption() проверяет настройки проходя по этому списку сверху вниз, проверяя совпадения. Если имеются одинаковые настройки, то он перезаписывает значения, соответственно приоритет для метода getOption() получается в обратном порядке: настройки пользователя, настройки групп, настройки контекста и настройки системы.
Если пользователь состоит в нескольких группах, настройки основной группы имеют больший приоритет. Если настройка у основной группы отсутствует, но присутствует в остальных группах, то будет выбрана настройка группы с наименьшим порядковым номером (rank).
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.