将drupal 7渲染数组转储到文件中

时间:2014-06-03 23:54:13

标签: arrays drupal drupal-7

我很难将一些数组数据输出到XML文件。这是工作流程:

  1. 从数据库中获取所有相关数据(在本例中为视频集和必要的分类)。
  2. 循环每个返回的对象,稍微清理一下(字段组合等)。
  3. 循环每个返回的对象,使用模板文件(templates / module_name_xml_entity.tpl.php)返回XML节点。
  4. 将所有XML节点放入包装器XML模板(templates / module_name_xml_wrapper.tpl.php)。
  5. 将包装器(现在包括重复的节点)保存到文件系统上的文件中。
  6. 如果我手动编写内联XML,我就能完成这个工作流程(例如:$ xml。=''。$ data [' field']。' &#39 ;; 但这并不是最佳选择,而且我已经被要求使用渲染数组(并将模板文件保留在模块中)。

    所以,#1,2,5我可以弄明白(因为保存文件是一样的)。它的#3是真正的错误。

    我的代码:

    1. 来自db查询的转储会生成一组视频对象(标题,缩略图,标签等)。我将其转换为以下内容:
    2. Array (
       [#template] => module_name_xml_entry,
       [#video] => stdClass Object (
         [title], [thumbnail]....
       ),
       [#theme] => module_name_xml_entry,
      )...
      

      现在这里有一些有趣的东西:如果我dd()数组(其中有990个),我会看到#34;#children"和" #printed"已经自动添加,因此我假设我正在使用真实的渲染数组。

      1. 然后我尝试将每个可以想到的将这个数组转换为XML的方法。我尝试过$ xmlOut。= render($ theStuffAbove),drupal_render($ youguessedit),please_lord_make_it_go($ facepalm)......无济于事。

      2. 我得到的是空白(没有任何内容在$ xmlOut中)或数组本身。

      3. 同样,我可以循环我的数据库结果,手动将结果转换为XML(字符串构建混乱)并保存所有这些就好了。使用渲染数组令我感到困惑。阅读&#34; TDGD7&#34;没有帮助(在渲染阵列上只有1047个短页面),而我只是不理解渲染数组是如何渲染的。&#34; < / p>

        更新 我忘了提及我有一个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;
        

1 个答案:

答案 0 :(得分:0)

<强>固定

好的,所以这很奇怪(发誓我以前做过这个)。

  1. 更改模板文件名以使用破折号而不是下划线(例如:&#39; templates / module_name_xml_entry.tpl.php - &gt; module-name-xml-entry.tpl.php)
  2. 更改了hook_theme()中的引用以使用虚线名称
  3. 在我的功能中,我使用了$ variables = array(&#39; video&#39; =&gt; $ video);
  4. 我调用了$ output [] = theme(&#39; module_name_xml_entry&#39;,$ variables);
  5. 我在我的包装器(module_name_xml_wrapper)中使用了$ output来保存到文件系统。
  6. 所以长短:它看起来像清理theme()函数,我的hook_theme()最终使输出工作。