这个问题是关于 Drupal 管道的。我知道如何使用视图查询构建器来呈现与单个内容相关联的多个分类术语。我无法弄清楚的是 Views 如何实际查询数据库以完成工作。
例如,很容易让视图显示具有一个或多个标签的博客文章列表:
Title: "Brett Favre is Hurt"
Body: "blah blah blah"
Tags: Football, Injury
Title: "Cliff Lee Signs Contract"
Body: "blah, blah, blah"
Tags: Baseball, Free Agency, Philadelphia
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚 Views 如何拉取多个标签并使用每个内容项呈现它们。视图预览查询不显示任何涉及分类法的此类 SQL。
我的猜测是分类法“字段”正在进行各种子查询,或者查询提取多条记录并以某种方式将标题和正文中的字段分组(这看起来效率很低)。
我正在尽最大努力遵循自定义模块的 Drupal 标准实践,我想知道 Drupal 视图人员如何运行这些查询,因为它们运行得非常快。
我正在尝试修改 Drupal 中的视图查询(视图版本 3,Drupal 版本 7)。
我想要做的是在运行之前更改查询,使其 LEFT JOINs 一个表,其中我已分配给节点的权重。
如果我要在 SQL 中编写我想要的查询,它看起来像这样:
SELECT a.nid, a.title, a.description
FROM node a
LEFT OUTER JOIN node_weights b
ON a.nid = b.nid
WHERE b.uid = $uid
ORDER BY b.weight DESC
Run Code Online (Sandbox Code Playgroud)
当我在查询分析器中运行这个查询时,它就像一个冠军。所以,现在我需要让它在我的模块中工作。
我已经在各种博客上看到多种方法详细介绍了修改视图查询的不同方法,但它们似乎是针对不同版本的视图。因此,试图确定我正在查看的任何内容是否可能适用于我的应用程序是非常令人困惑的。
看来我需要使用一个 MODULE_NAME_views_tables() 函数来告诉 Views 我要加入的表和节点表之间的关系。
我在 MODULE_NAME.views.inc 中添加了以下函数:
function MODULE_NAME_views_tables() {
$tables['node_weights'] = array(
"name" => "node_weights",
"join" => array(
"left" => array(
"table" => "node",
"field" => "nid"
),
"right" => array(
"field" => "nid"
),
),
);
return $table; …Run Code Online (Sandbox Code Playgroud) 我在drupal中设置了一个列出这样的项目的视图:
IMAGE 1 | IMAGE 2 | IMAGE 3 | IMAGE 4
desc | desc | desc | desc
Run Code Online (Sandbox Code Playgroud)
你猜对了"desc",节点的描述.我需要的是最终得到这样的东西:
IMAGE 1 | IMAGE 2 | IMAGE 3 | IMAGE 4
desc | desc | desc | desc
EDIT | EDIT | EDIT | EDIT
ACTION | ACTION | ACTION | ACTION
Run Code Online (Sandbox Code Playgroud)
EDIT进入各个节点的编辑页面.此外,ACTION表示我想要显示在导航到页面的项目下方的按钮,我们称之为http://www.mysite.com/action并将id作为参数,最终得到如下内容:http://www.mysite.com/action/1.
我希望这一切都有道理.
解决这个问题的方法很痛苦,就是创建一个主题文件views-view-NAME.tpl.php并操作$ rows变量.我只是认为必须有一个更好的方法,我显然只是缺少一些东西.
那么,有人知道怎么做吗?
我有一个Drupal 6站点,我在其中创建了一个显示节点列表的视图.没有什么复杂的 - 除了当我选择"使用寻呼机" - >"是"(并选择"完整寻呼机"选项)时,寻呼机不会显示在页面上.节点的第一页显示,但没有办法到达其他页面.
通过谷歌搜索,我看到有些人对"寻呼机元素"项有问题,所以我将其从0更改为1 - 没有运气.
这应该不是很复杂,但我已经有一段时间了!
救命!?
ETA:我已将其跟踪到/modules/views/theme/theme.inc中的以下几行:
$pager_theme = views_theme_functions($pager_type, $view, $view->display_handler->display);
$vars['pager'] = theme($pager_theme, $exposed_input, $view->pager['items_per_page'], $view->pager['element']);
Run Code Online (Sandbox Code Playgroud)
第一行返回一个数组; 第二行什么都不返回.
我怀疑现在这是我正在使用的自定义主题的主题问题,可能没有为Drupal 6完全正确更新 - 就像,也许我错过了一个寻呼机模板? - 但是,我对Drupal很新,并不真正了解如何进一步追踪并解决问题.任何建议将不胜感激!
ETA又一次:
使用Garland时,寻呼机也不会出现,所以它毕竟不是主题问题.另外:我也在开发服务器上设置了这个站点的副本,并且该副本具有工作分页!我已经检查了我认为可能不同的东西 - 主题中的文件,启用了哪些模块 - 而且看起来几乎所有东西都是一样的.然而,我知道的一件事是不同的是,生产服务器的MySQL版本较低(低于Drupal 6的推荐值 - 我们正在等待托管公司能够稍后更改).旧版本的MySQL无法在Drupal 6中正确进行分页是否有意义?如果是这样,有没有人知道我可以做的解决方法,直到我们能够更新MySQL?
如何在Drupal View上避免重复?
我应该添加一个指定特定字段(即userID)不应出现两次的过滤器吗?我找不到这样的选择
查看 http://dl.dropbox.com/u/72686/view1.png 查看编辑 http://dl.dropbox.com/u/72686/view2.png
谢谢
我想在视图中添加一个Jquery插件.但是,我不想通过.info文件添加,因为我不想在每个页面上添加它.我也不想将它添加到视图的标题或创建view.tpl.php文件.
此页面显示如何通过template.php将Java脚本添加到节点.反正有没有做类似的事情通过template.php文件将Java脚本添加到视图?
我需要在页面的侧边栏中显示部分暴露的表单,以及该区域中表单和内容的其余部分$content.我找不到这样做的好方法.我想让它以某种方式出现,通过"暴露形式"设置制作"块"视图,然后尝试仅通过.tpl文件显示我需要的部分.问题是,当单击提交按钮(提交按钮在$content区域中)时,不考虑侧栏中的过滤器.
嗨我正在使用Drupal 7和Views 3.我有一个视图(名为'export'),它生成所选节点实体的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']);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这确实取消了字段数组的那部分,但我仍然在csv导出中填充了描述字段.我对视图对象结构不够熟悉,无法完全理解如何从视图中删除给定的字段.我在网上搜索了几个小时试图找到一个帖子来阐明这一点.虽然我发现了大量使用hook_views_query_alter添加过滤器或更改查询对象的WHERE语句的示例,但我没有发现任何与删除视图查询返回的列有关的内容.对此有任何建议将非常感谢!
谢谢,axl
我有一个View列出了类型的内容Bio(人物的传记).但是,我想格式化它,以便将它们分组在不同的标题下.
我添加了一个新的字段Bios是一个下拉列表中有三个不同的选项内容类型- Foo,Bar和Baz.我想要做的是在各自小组的标题下展示人员.
目前:
- John Doe
- Jane Doe
- Jack Doe
- Juanita Doe
- Jim Doe
Run Code Online (Sandbox Code Playgroud)
我想要的是:
#Foo
- John Doe
- Jane Doe
#Bar
- Jack Doe
- Juanita Doe
#Baz
- Jim Doe
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来获取视图的PATH并在href中使用它.对于我的.tpl文件中的其余链接,我使用simillar来:
print url('node/36');
Run Code Online (Sandbox Code Playgroud)
我如何模仿视图模块的这种行为?我希望能够从管理界面编辑视图的路径,而无需修改主题.
谢谢.