Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将drupal 7渲染数组转储到文件_Arrays_Drupal_Drupal 7 - Fatal编程技术网

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

Arrays 将drupal 7渲染数组转储到文件,arrays,drupal,drupal-7,Arrays,Drupal,Drupal 7,我很难将一些数组数据输出到XML文件。以下是工作流程: 从数据库中获取所有相关数据(在本例中为视频集合和必要的分类) 循环每个返回的对象,稍微清理一下(字段组合等) 循环每个返回的对象,使用模板文件(templates/module\u name\u XML\u entity.tpl.php)返回一个XML节点 将所有XML节点放入包装器XML模板(templates/module\u name\u XML\u wrapper.tpl.php) 将包装器(现在包括重复的节点)保存到文件系统上的文

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

  • 从数据库中获取所有相关数据(在本例中为视频集合和必要的分类)
  • 循环每个返回的对象,稍微清理一下(字段组合等)
  • 循环每个返回的对象,使用模板文件(templates/module\u name\u XML\u entity.tpl.php)返回一个XML节点
  • 将所有XML节点放入包装器XML模板(templates/module\u name\u XML\u wrapper.tpl.php)
  • 将包装器(现在包括重复的节点)保存到文件系统上的文件中
  • 如果我手动内联编写XML(例如:$XML.=''.$data['field'].],我就能够完成此工作流; 然而,这并不是最优的,我被要求使用渲染数组(并将模板文件保存在模块中)

    所以,#的1,2,5我可以计算出来(因为保存文件是一样的)。真正的问题是#3

    我的代码:

  • db查询的转储将产生一系列视频对象(标题、缩略图、标记等)。我将其转换为以下内容:
  • 现在有一件有趣的事情:如果我dd()数组(有990个),我看到“#children”和“#printed”是自动添加的,因此我假设我使用的是真实的渲染数组

  • 然后我尝试了所有我能想到的方法将这个数组转换成XML。我尝试了$xmlOut.=render($thestaffabove),drupal_render($youguessedit),please_lord_make_go($facepalm)…没有用

  • 我得到的要么是空白的($xmlOut中没有任何内容),要么是数组本身

  • 同样,我可以循环我的DB结果,手动将结果转换为XML(字符串构建混乱),并将所有这些都很好地保存下来。使用渲染数组让我感到困惑。阅读“TDGD7”没有任何帮助(在渲染数组上1047中只有几个短页面),我只是不理解如何“渲染”渲染数组

    更新: 我忘了提到我有一个模块名称主题(…)函数设置:

    $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;
    
    固定的

    好吧,这很奇怪(我发誓我以前做过)

  • 将模板文件名更改为使用破折号而不是下划线(例如:“templates/module\u name\u xml\u entry.tpl.php->module name xml entry.tpl.php)
  • 将hook_theme()中的引用更改为使用虚线名称
  • 在我的函数中,我使用了$variables=array('video'=>$video)
  • 我调用$output[]=theme('module\u name\u xml\u entry',$variables)
  • 我在包装器(module_name_xml_包装器)中使用$output保存到文件系统

  • 因此,长短不一:看起来像是清理了theme()函数,我的hook_theme()最终使输出工作。

    要渲染数组,你不能将它交给drupal_render(数组):。无论我在哪里将数组传递到drupal_render(甚至是render()),我都不会得到任何回报。例如,如果我循环使用$videos[]数组并尝试构建我的大XML($xmlOut[].=drupal_render($videoItemArray)),我得到的只是一个空值数组。我看到了您的更新答案。要呈现数组,您基本上传递了类似drupal_render(array[x])的内容,传递了一个包含正确元素的有效数组?
    $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;