Drupal 7 开发内部培训资料, 分头诗人

如何在node.tpl.php 页面进行增加上一篇 下一篇关联?

赞成!
0
否决!

在node.tpl.php 中如何关联自己的查询数据。

比如,我要在node.tpl.php 中显示该文章的上一篇 和下一篇(不用book),我要在哪里写sql语句,然后如何在node.tpl.php 写代码输出?

我现在感觉node的数据都是内部获取的,如何自己附加操纵,不然定的太死了。

2 个回答

赞成!
0
否决!

1,http://www.drupalla.com/project/custom_pagers 能实现文章关联

2,http://www.drupalla.com/project/prev_next api也能实现

3,自己写关联,获得id邻近的上下文。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//上一篇
//下一篇
//style: img : 图片形式 text:文字形式
//pn 1:prev    2:next
function yourmodulename_get_pn_node($nid, $type, $style = 'img', $pn = 1)
{
$output = "";
$sql = "SELECT node.nid AS nid, node.title AS node_title, node.created AS node_created, 
files.uri AS uri FROM {node} node left join (SELECT image.entity_id, 
f.uri FROM {field_data_field_image} image LEFT JOIN {file_managed} f 
ON image.field_image_fid=f.fid) files ON node.nid=files.entity_id 
WHERE node.status = '1' AND node.type='".$type."'";
switch ($pn) {
    case 1:
        $sql .= " AND node.nid <" .$nid;
  $title = "上一图集";
        break;
    case 2:
        $sql .= " AND node.nid >" .$nid;
  $title = "下一图集";
        break;
} 
$sql .= " ORDER BY node_created desc LIMIT 1 OFFSET 0";
$result = db_query($sql); //也可以db_select 方式, 写法类似。
$output .= "<div class=\"pn pn".$pn."\">";
while ($row = $result->fetchObject()) {
$output .= "<div class=\"img\">";
if($row->uri)
{$output .= l("<img src=\"".file_create_url($row->uri)."\" 
alt=\"".$row->node_title."\" height=\"75\">", "node/".$row->nid, array('html'=>true));}
else
{$output .= l("<img src=\"/sites/default/files/default_images/no-img.gif\" 
alt=\"".$row->node_title."\" height=\"75\">", "node/".$row->nid, array('html'=>true));}
$output .= "</div>";
$output .= l($title, "node/".$row->nid);
}
$output .= "</div>";
return $output;
}

然后打开node.tpl.php 

1
2
3
4
5
6
<?php 
print module_invoke('yourmodulename', 'get_pn_node', $nid, $type, 'img', 1); //上一篇
?>
<?php 
print module_invoke('yourmodulename', 'get_pn_node', $nid, $type, 'img', 2); //下一篇
?>

 

注:这函数仅说明问题的解决方式,函数内部的语法好坏,不在本问题范围,如觉得函数写得不好,可以改写。

赞成!
0
否决!

诗人大大辛苦了