Drupal 7 如何以编程方式从视图3中删除字段?

Drupal 7 如何以编程方式从视图3中删除字段?,drupal-7,drupal-views,Drupal 7,Drupal Views,嗨,我正在使用Drupal7和Views3。我有一个视图(名为“导出”),用于生成选定节点实体的csv导出。但是,我在其中添加了一些自定义代码,用于显示所选节点实体中包含的所有字段,并允许用户选择不希望包含在导出中的字段(通过复选框) 我已尝试在hook\u views\u query\u alter中取消设置所选字段,如下所示: function mymodule_views_query_alter (&$view, &$query) { if ($view->nam

嗨,我正在使用Drupal7和Views3。我有一个视图(名为“导出”),用于生成选定节点实体的csv导出。但是,我在其中添加了一些自定义代码,用于显示所选节点实体中包含的所有字段,并允许用户选择不希望包含在导出中的字段(通过复选框)

我已尝试在hook\u views\u query\u alter中取消设置所选字段,如下所示:

function mymodule_views_query_alter (&$view, &$query) {
  if ($view->name == "export") {
    unset($query->fields['field_data_field_description_node_entity_type']);
  }
}
虽然这不会取消字段数组的该部分,但我仍然会在csv导出中填充描述字段。我只是对视图对象结构不够熟悉,无法完全理解如何从视图中删除给定字段。我在网上搜索了几个小时,试图找到一篇文章来阐明这一点。虽然我发现了大量使用hook\u views\u query\u alter添加过滤器或更改查询对象的WHERE语句的示例,但我没有发现任何与删除视图查询返回的列有关的内容。如果您对此有任何建议,我们将不胜感激

谢谢,
axl

尝试从
$view
对象中删除列

unset($view->field['field_name'];

通过在自定义模块中取消设置字段,我可以删除CSV导出的视图字段:

函数mymodule\u视图\u预构建(&$view){
如果($view->name==“活动报告”
&&$view->current_display=='views_data_export_1'){
//您将拥有自己的字段列表,以删除您以某种方式创建的字段。。。
$fields_to_remove=array('field_name_to_remove_1','field_name_to_remove_2');
foreach($fields\u to\u作为$field\u name删除){
取消设置($view->field[$field_name]);
取消设置($view->display_handler->handlers['field'][$field_name]);
}
}
}

这对我来说似乎非常有效,并且在视图生命周期的早期执行,甚至在构建查询之前。事实上,我开始在我的表显示视图和CSV导出中使用它,因为它似乎比在视图表设置中使用“hide if empty”列复选框更有效(它必须迭代结果集中的每一行,以查看它是否为空,以便隐藏列标题)。如果您也希望这样做,则需要更改顶部的If()语句,以便它只检查$view->name。然后,这些字段将从该视图中的所有显示中删除(不仅仅是视图\u数据\u导出\u 1显示)。

这种方法在hook\u视图\u pre\u build()中适用。您是从hook\u views\u query\u alter()使用它吗?