gpt4 book ai didi

drupal-7 - 如何以编程方式从 Views 3 中删除字段?

转载 作者:行者123 更新时间:2023-12-04 23:28:10 24 4
gpt4 key购买 nike

您好,我正在使用 Drupal 7 和 Views 3。我有一个 View (名为“导出”),可以生成选定节点实体的 csv 导出。但是,我在其中添加了一些自定义代码,以显示该选定节点实体中包含的所有字段,并允许用户选择他们不想包含在导出中的字段(通过复选框)。

我试过取消设置 hook_views_query_alter 中的选定字段,如下所示:

function mymodule_views_query_alter (&$view, &$query) {
if ($view->name == "export") {
unset($query->fields['field_data_field_description_node_entity_type']);
}
}

虽然这确实取消了字段数组的那部分,但我仍然在 csv 导出中填充了描述字段。我只是对 View 对象结构不够熟悉,无法完全理解如何从 View 中删除给定字段。我已经在网上搜索了几个小时,试图找到一篇文章来阐明这一点。虽然我找到了大量使用 hook_views_query_alter 添加过滤器或更改查询对象的 WHERE 语句的示例,但我没有发现与删除 View 查询返回的列有关的任何事情。对此的任何建议将不胜感激!

谢谢,
车轴

最佳答案

通过取消设置 hook_views_pre_build() 中的字段,我能够删除 CSV 导出的 View 字段。在我的自定义模块中:

function mymodule_views_pre_build(&$view) {
if ($view->name == 'campaign_report'
&& $view->current_display == 'views_data_export_1') {

// You'll have your own list of fields to remove that you create somehow...
$fields_to_remove = array('field_name_to_remove_1','field_name_to_remove_2');

foreach ($fields_to_remove as $field_name) {
unset($view->field[$field_name]);
unset($view->display_handler->handlers['field'][$field_name]);
}
}
}

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

关于drupal-7 - 如何以编程方式从 Views 3 中删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com