• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/user_options.php
  • Класс: CUserOptions
  • Вызов: CUserOptions::GetOption
static function GetOption($category, $name, $default_value = false, $user_id = false)
{
	global $DB, $USER, $CACHE_MANAGER;

	if ($user_id === false && $USER instanceof CUser)
	{
		$user_id = $USER->GetID();
	}

	$user_id = intval($user_id);
	$category = strtolower($category);

	if (!isset(self::$cache[$user_id][$category]))
	{
		$mcache_id = "user_option:{$user_id}:{$category}";

		// options for user '0' are always from DB (there are much more options for user '0' than for specific one)
		if ($user_id > 0 && $CACHE_MANAGER->read(3600, $mcache_id, "user_option"))
		{
			// options for specified user from managed cache
			self::$cache[$user_id][$category] = $CACHE_MANAGER->get($mcache_id);
		}
		else
		{
			//read from DB
			$sql = "
				SELECT NAME, VALUE, COMMON
				FROM b_user_option
				WHERE (USER_ID = {$user_id} OR (USER_ID = 0 AND COMMON = 'Y'))
					AND CATEGORY = '{$DB->ForSql($category)}'
			";

			$res = $DB->Query($sql);
			while ($option = $res->Fetch())
			{
				if (!isset(self::$cache[$user_id][$category][$option["NAME"]]) || $option["COMMON"] <> 'Y')
				{
					self::$cache[$user_id][$category][$option["NAME"]] = unserialize($option["VALUE"], ['allowed_classes' => false]);
				}
			}

			if (!isset(self::$cache[$user_id][$category]))
			{
				self::$cache[$user_id][$category] = [];
			}

			if ($user_id > 0)
			{
				$CACHE_MANAGER->Set($mcache_id, self::$cache[$user_id][$category]);
			}
		}

		if (!isset(self::$cache[$user_id][$category][$name]))
		{
			self::$cache[$user_id][$category][$name] = null;
		}
	}

	if (!isset(self::$cache[$user_id][$category][$name]))
	{
		return $default_value;
	}

	return self::$cache[$user_id][$category][$name];
}