Мне трудно вывести некоторые данные массива в файл XML. Вот рабочий процесс:
- Получите все необходимые данные (в данном случае коллекцию видео и необходимую таксономию) из БД.
- Зацикливайте каждый возвращаемый объект, немного очищая его (комбинации полей и т. д.).
- Зациклить каждый возвращаемый объект, возвращая XML-узел с помощью файла шаблона (templates/module_name_xml_entity.tpl.php).
- Поместите все узлы XML в шаблон XML-оболочки (templates/имя_модуля_xml_wrapper.tpl.php).
- Сохраните оболочку (теперь включающую повторяющиеся узлы) в файл в файловой системе.
Я смог завершить этот рабочий процесс, если вручную написал встроенный XML (например: $xml .= ' ' . $data['field'] . ''; Однако это не оптимально, и меня попросили использовать массивы рендеринга вместо этого (и сохранить мои файлы шаблонов в модуле).
Итак, # 1, 2, 5 я могу понять (поскольку сохранение файла одно и то же). Это номер 3, который является настоящим жуком.
Мой код:
- Дамп из запроса к базе данных приводит к массиву видеообъектов (заголовок, миниатюра, теги и т. д.). Я конвертирую это в следующее:
Array ( [#template] => module_name_xml_entry, [#video] => stdClass Object ( [title], [thumbnail].... ), [#theme] => module_name_xml_entry, )...
Теперь вот кое-что интересное: если я dd() массив (их 990), я вижу, что «#children» и «#printed» были добавлены автоматически, поэтому я предполагаю, что работаю с реальным массивом рендеринга.
Затем я пытаюсь всеми возможными способами преобразовать этот массив в XML. Я пробовал $xmlOut .= render($theStuffAbove), drupal_render($youguessedit), please_lord_make_it_go($facepalm)... безрезультатно.
То, что я получаю, либо пусто (ничего нет в $xmlOut), либо сам массив.
Опять же, я могу зациклить свои результаты БД, преобразовать результат в XML вручную (беспорядок со строками) и сохранить все это просто отлично. Меня сбивает с толку использование массивов рендеринга. Чтение «TDGD7» не помогло (в массивах рендеринга всего несколько коротких страниц из 1047), и я просто не понимаю, как можно «рендерить» массивы рендеринга.
Обновление: я забыл упомянуть, что у меня есть настройка функции module_name_theme(...):
$items = array();
$items['module_name_admin_settings_form'] = array(...);
$items['module_name_xml_wrapper'] = array(
'variables' => array('videos' => NULL)),
'template' => 'templates/module_name_xml_wrapper',
);
$items['module_name_xml_entity'] = array(
'variables' => array('video' => array()),
'template' => 'templates/module_name_xml_entity',
);
return $items;