我使用Drupal 7编写了一个与Views 3接口的模块,但是当我使用自定义表作为数据源创建视图时,没有数据显示出来.这是MySQL的架构:
+-------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | mediumtext | NO | | NULL | |
| Department | text | NO | | NULL | |
| credits | int(10) | NO | | NULL | |
| description | longtext | NO | | NULL | |
+-------------+------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
这是my_module.views.inc中的钩子覆盖:
function my_module_views_data() { …Run Code Online (Sandbox Code Playgroud) 我在Drupal 6站点上安装了Profile,CCK和Views2模块.我在用户配置文件中添加了一个字符串字段.我可以通过Views GUI构建器轻松过滤预设值,非常好.但是,我希望根据其他环境变量(即$_SERVER['SERVER_NAME'])来动态设置过滤条件.
某处有一个基本的"如何编写自定义drupal-views-filter"?我一直在寻找通过文档,但我的简单思想并不明显如何做到这一点.
我需要在Drupal View中的某些过滤器之间实现OR运算符.默认情况下,Drupal AND的每个过滤器都在一起.
通过使用
hook_views_query_alter(&$view, &$query)
Run Code Online (Sandbox Code Playgroud)
我可以访问查询(var $ query),我可以更改:
$query->where[0]['type']
Run Code Online (Sandbox Code Playgroud)
'或',或
$query->group_operator
Run Code Online (Sandbox Code Playgroud)
'OR'
但问题是,我到处都不需要OR.我已经尝试将它们分别更改为OR,并且它不会产生所需的结果.
它似乎改变了这些值,把OR放在任何地方,而我需要=>(滤波器1和滤波器2)或(滤波器3),所以只需1或.
我可以检查View的查询,复制它,修改它,然后通过db_query运行它,但那只是脏的..
有什么建议 ?
Thx提前.
我正在尝试获取视图的结果 - 使用函数views_get_view_result()- 并以一种我在Views界面中无法做到的方式对数组进行排序.到现在为止还挺好.我有一个$ rows变量,包含我需要的所有东西.
现在......我怎么把它放回去?:)在我需要这种之前,我曾经使用过views_embed_view(),但我不能再那样做了.
感谢你对此有任何帮助,感觉我已经接近破解了!
$important_var = important_function();
$result = views_get_view_result($view, $display, $args);
$result = sorting_function($result, $important_var);
//TODO: Put the result back into the view
Run Code Online (Sandbox Code Playgroud) 我有两个要渲染的字段,但我只想在第一个字段为空时显示第二个字段.如果没有覆盖模板文件中的字段,我可以使用内置视图功能中的功能吗?
如何将视图导入Drupal.我有一个导出的视图,我需要在不同的Drupal安装中导入.我在admin/structure/views中没有导入选项?
谢谢!
编辑:
我找到了解决方案.我必须以用户1登录才能获得此选项.
这是一个Views 6.x-2.x问题:在一个有很多不同视图的网站上(其中很多都是面板中包含的块传递给块的参数)我想根据域的分类术语过滤视图网站是通过访问.此过滤应该是第一个参数(分类术语)的补充.
该站点配置为使用不同的域,例如example1.com和example2.com.我想将这些域"连接"到分类法术语45和115.
例如:
example1.com/my_view/1应显示具有术语1和术语45的所有节点.
example2.com/my_view/1应显示具有术语1和术语115的所有节点.
我的方法是添加第二个参数(第一个是默认的分类术语ID参数).作为默认参数,我在参数处理代码中使用以下剪切:
<?php
// Get domain.
$host = preg_match('/[^.]+\.[^.]+$/', $_SERVER['HTTP_HOST'], $hit);
$host = $hit[0];
// Select taxonomy term.
if ($host == 'example1.com'){
$taxonomy = '45';
} elseif ($host == 'example2.com'){
$taxonomy = '115';
}
return $taxonomy;
?>
Run Code Online (Sandbox Code Playgroud)
当我使用路径my_view /%(仅强制第一个参数)的页面显示时,这种方法有效.但是当我在面板中使用它时,我只得到一个空视图(如果选择"无上下文")或第二个参数没有任何效果(如果选择"第一个/所有术语的术语ID").
什么想法可能是错的?我真的尝试了很多.
我有一个带有一个暴露过滤器的视图(一个选择).当用户单击"应用"时,它使用ajax重新填充.我希望他们不必点击它,只需在更改选择时重新填充.我假设我需要一些或多或少像这样的JS(尽管这似乎不太合适):
$('#edit-tid').change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
Run Code Online (Sandbox Code Playgroud)
首先,我认为会这样做,但它没有被提交.谁知道为什么?
第二,注入该代码的最佳方法是什么?我正在考虑使用View页脚,因为它很简单,但还有其他更好的想法吗?
UPDATE:上述代码是工作(通过视图页脚注射),但仅在第一次.我猜选择被ajax调用覆盖了,但是行为没有被重新连接(或其他东西).嗯...
更新#2:为简单起见,我要放弃ajax.
我想显示在drupal视图中执行的查询.目前在视图编辑器中它显示了查询但是我需要在我的代码中使用该查询来下载视图的excel版本.
有没有办法以与在视图菜单的"编辑器"窗口中显示相同的方式获取执行的查询?我希望在显示视图时这样做.
我打算在这里做的是在页脚中捕获查询,并将该查询发布到将发回XLS结果集的进程.所以我想查看视图用于显示结果的确切查询.
我有什么基本问题了解何时使用pathauto规则,以及何时使用视图页面路径.我有几种自定义内容类型,我使用块来显示某些路径上的某些节点部分.然后我使用视图页面来显示路径上的主节点.
当我这样做时,我不能使用pathauto,因为它覆盖了我在视图中设置的路径.例如..如果我设置了"location /%"的视图页面路径,并为"location/[title-raw]"的位置内容类型设置了pathauto规则,当我浏览到mysite.com/location/mylocation pathauto时获胜,只显示完整节点.如果我不能使用pathauto,我不能在我的块上添加参数,因为Drupal不理解它正在看什么!Arrrg!
我已经尝试安装Util,并改变模块的重量,但这不起作用.但我不应该做任何像改变模块权重那样疯狂的事情,对吗?我的想法中肯定存在一些基本缺陷.
你如何保持自己的路径和内容有条理?
帮助我像水一样流动,帮助我成为杯子.