Содержание

Операции по загрузке объектов

Основы загрузки в системе Limb

Итак, Вы познакомились с основами Limb. Идея активных объектов сайта, помещенных в объектное дерево, занимает центральное место в Limb. Вполне обоснованным является вопрос: «Как можно запросить все эти объекты?». Этот маленький раздел документации предоставит некоторые ответы.

Загрузчик (Fetcher)

В Limb все запросы к объектам сайта выполняются через специальный механизм загрузчика.

Обычно выделяют 2 типа операций загрузки:

Есть несколько способов оьратиться к дереву объектов:

Загрузчик не только получает объекты сайта, но также применяет Систему прав и возвращает ТОЛЬКО доступные для текущего пользователя объекты сайта.

Для Вашего удобства все методы выборки (загрузки) могут быть вызваны через уникально именованные глобальные функции.

Подробности

Перед описанием доступных методов загрузки необходимо кратко описать сам механизм загрузки в Limb.

То, что выполняет загрузчик, может быть представлено последовательностью следующих шагов:

Жажда скорости

Медлительность объектов в PHP хорошо известна, объекты значительно увеличивают нагрузку. Именно по этой причине все операции загрузки возвращают массивы, а не объекты.

Такое поведение оказалость особенно полезным для шаблонов WACT. Массивы объектов попадают в компоненты шаблона и Вы можете естественным способом обращаться к атрибутам объекта.

Вы также можете легко превратить эти массивы в полноценные объекты, вызвав специальную функцию:

 wrap_with_site_object($fetched_data) 

В документации мы ссылаемся на загруженные объекты, а не на загруженные массивы - мы надеемся это ни кого сильно не запутает

Запрос к единичному объекту

В классе загрузчика (fetcher class) есть три метода, позволяющие загрузить единичный объект сайта:

загрузка объекта по идентификатору узла (node id)

  fetch_one_by_node_id($node_id)

возвращает загруженный объект, связанный с указанным в $node_id значением идентификатора узла

загрузка объекта по пути

 fetch_one_by_path($path)

возвращает загруженный объект, связанный с заданным путем (например, объект сайта, связанный с путем '/root/article/1' может быть загружен вызовом fetch_one_by_path('/root/article/1'))

Загрузка запрошенного объекта

 fetch_mapped_by_url()

возвращает объект связанный с URL запроса. Также можно получить объект через обычный URL к объекту

 http://domain.com/root?node_id=$id.

Загрузка множества объектов (набора)

Загрузка множества объектов отличается от загрузки единичного. С целью увеличения скорости, так как возвращаются однородные объекты и вызывать методы загрузки и подсчета для каждого слишком накладно, методы выборки и подсчета вызываются только для одного загрузчика - объект сайта.

Что это значит? На практике редко нужны все уникальные атрибуты всех объектов в загружаемом наборе (например, различные варианты изображений объекта изображения) Технически это возможно, однако… попробуйте представить, что произойдет, если загрузить все дерево объектов!

Есть 4 метода для одновременной загрузки группы объектов сайта:

Загрузка объектов одного класса

fetch($loader_class_name, &$counter, $params = array(), $fetch_method = 'fetch')

возвращает набор выбранных объектов, загруженных объектом $loader_class_name (обычно 'объект сайта'!) через вызов его метода загрузки ($fetch_method). В переменную $counter записывается общее число загруженных элементов. Переменная $params позволяет Вам определить предел, смещение и т.д.

Пример:

$params = array('limit' => 10, 'offset' => 1);
$counter = 0;
$users =& fetch('user_object', $counter, $params);

Загрузка ветви дерева

fetch_sub_branch($path, $loader_class_name, &$counter, $params = array(), $fetch_method = 'fetch_by_ids')

возвращает набор выбранных объектов, загруженных объектом класса $loader_class_name(обычно 'объект сайта') из дерева объектов начиная с размещения в $path, через его метод $fetch_method. В переменную $counter записывается общее число выбранных элементов. Переменная $params позволяет Вам определить предел, смещение и т.д.

Пример:

$params = array('limit' => 10, 'offset' => 1, 'depth' => 1);
$counter = 0;
$user_groups =& fetch_sub_branch('/root/user_groups', 'user_group', $counter, $params);

Загрузка по идентификаторам узлов (node_ids)

fetch_by_node_ids($node_ids, $loader_class_name, &$counter, $params = array(), $fetch_method = 'fetch_by_ids')

возвращает набор выбранных объектов, загруженных объектом класса $loader_class_name(обычно 'объект сайта'), указанных через массив идентификаторов узлов $node_ids через вызов метода $fetch_method. В переменную $counter записывается общее число выбранных элементов. Переменная $params позволяет Вам определить предел, смещение и т.д.

Пример:

$counter = 0;
$user_groups =& fetch_by_node_ids(array(10,11), 'user_group', $counter);

Загрузка по идентификаторам объектов

fetch_by_ids($object_ids, $loader_class_name, &$counter, $params = array(), $fetch_method = 'fetch_by_ids')

возвращает набор выбранных объектов, загруженных объектом класса $loader_class_name(обычно 'объект сайта') указанных через массив идентификаторов объектов $object_ids через вызов метода $fetch_method. В переменную $counter записывается общее число выбранных элементов. Переменная $params позволяет определить предел, смещение и т.д.

Пример:

 $counter = 0;
 $user_groups =& fetch_by_ids(array(100,81), 'user_group', $counter);