Arhn - архитектура программирования

Сброс массива рендеринга drupal 7 в файл

Мне трудно вывести некоторые данные массива в файл XML. Вот рабочий процесс:

  1. Получите все необходимые данные (в данном случае коллекцию видео и необходимую таксономию) из БД.
  2. Зацикливайте каждый возвращаемый объект, немного очищая его (комбинации полей и т. д.).
  3. Зациклить каждый возвращаемый объект, возвращая XML-узел с помощью файла шаблона (templates/module_name_xml_entity.tpl.php).
  4. Поместите все узлы XML в шаблон XML-оболочки (templates/имя_модуля_xml_wrapper.tpl.php).
  5. Сохраните оболочку (теперь включающую повторяющиеся узлы) в файл в файловой системе.

Я смог завершить этот рабочий процесс, если вручную написал встроенный XML (например: $xml .= ' ' . $data['field'] . ''; Однако это не оптимально, и меня попросили использовать массивы рендеринга вместо этого (и сохранить мои файлы шаблонов в модуле).

Итак, # 1, 2, 5 я могу понять (поскольку сохранение файла одно и то же). Это номер 3, который является настоящим жуком.

Мой код:

  1. Дамп из запроса к базе данных приводит к массиву видеообъектов (заголовок, миниатюра, теги и т. д.). Я конвертирую это в следующее:
Array (
 [#template] => module_name_xml_entry,
 [#video] => stdClass Object (
   [title], [thumbnail]....
 ),
 [#theme] => module_name_xml_entry,
)...

Теперь вот кое-что интересное: если я dd() массив (их 990), я вижу, что «#children» и «#printed» были добавлены автоматически, поэтому я предполагаю, что работаю с реальным массивом рендеринга.

  1. Затем я пытаюсь всеми возможными способами преобразовать этот массив в XML. Я пробовал $xmlOut .= render($theStuffAbove), drupal_render($youguessedit), please_lord_make_it_go($facepalm)... безрезультатно.

  2. То, что я получаю, либо пусто (ничего нет в $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;
03.06.2014

  • Чтобы отобразить массив, вы не можете передать его drupal_render(array): api.drupal.org/api/drupal/includes%21common.inc/function/. 04.06.2014
  • Независимо от того, куда я передаю массив в drupal_render (или даже в render()), я ничего не получаю в ответ. Например, если я перебираю массив $videos[] и пытаюсь создать большой XML ($xmlOut[] .= drupal_render($videoItemArray) ), все, что я получаю, это пустой массив значений. 04.06.2014
  • Я вижу ваш ответ на обновление. чтобы отобразить массив, вы передали что-то вроде drupal_render(array[x]) в основном, правильно передав допустимый массив с элементами? 05.06.2014

Ответы:


1

Исправлено

Итак, это странно (клянусь, я делал это раньше).

  1. Изменены имена файлов шаблонов, чтобы использовать дефисы вместо подчеркивания (например: 'templates/module_name_xml_entry.tpl.php -> module-name-xml-entry.tpl.php)
  2. Изменена ссылка в hook_theme(), чтобы вместо этого использовались пунктирные имена.
  3. Внутри моих функций я использовал $variables = array('video' => $video);
  4. Я назвал $output[] = theme('module_name_xml_entry', $variables);
  5. Я использовал $output в своей оболочке (module_name_xml_wrapper) для сохранения в файловой системе.

Итак, длинное и короткое: это похоже на очистку функции theme(), и мой hook_theme() наконец-то заставил вывод работать.

04.06.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..