MODX. Метод: getOption()

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). Настройки в котором хранятся в следующем порядке:

  1. настройки системы;
  2. настройки контекста;
  3. настройки пользовательских групп;
  4. настройки пользователя.

Метод getOption() проверяет настройки проходя по этому списку сверху вниз, проверяя совпадения. Если имеются одинаковые настройки, то он  перезаписывает значения, соответственно приоритет для метода getOption() получается в обратном порядке: настройки пользователя, настройки групп, настройки контекста и настройки системы.

Если пользователь состоит в нескольких группах, настройки основной группы имеют больший приоритет. Если настройка у основной группы отсутствует, но присутствует в остальных группах, то будет выбрана настройка группы с наименьшим порядковым номером (rank).