步骤1,添加模块,名称叫mytaxonomy,建立5个文件,分别是
- mytaxonomy.module --- 模块hook
- mytaxonomy.info --- 模块信息
- mytaxonomy.pages.inc --- 函数
- product.tpl.php --- 产品模版
- catetory_block.tpl.php --- 分类block 模版
步骤2,mytaxonomy.info 文件:
1
2
3
4
5
|
name = Drupalla
description = 猪跑啦.
core = 7.x
package = Drupalla
files[] = mytaxonomy.module
|
步骤3,mytaxonomy.module 文件,增加5个hook,分别是
- hook_menu:定义一个变量路径叫 category/%
- hook_theme:指向列表名为mytaxonomy,就能自动用product.tpl.php跟catetory_block.tpl.php模版文件
- hook_permission:指定这个category/% 路径的访问权限
- hook_block_info:建立一个左侧的sidebar block 的信息
- hook_block_view:建立一个左侧的sidebar block 的内容
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/**
* Implements hook_menu().
*/
function
mytaxonomy_menu() {
// Admin settings for the site.
$items
[
'category/%'
] =
array
(
'title'
=>
'分类'
,
'description'
=>
'分类'
,
'page callback'
=>
'show_product'
,
//指定函数
'page arguments'
=>
array
(1),
'file'
=>
'mytaxonomy.pages.inc'
,
//指定函数的所在文件
'access arguments'
=>
array
(
'view product'
),
'access callback'
=> TRUE,
'type'
=> MENU_NORMAL_ITEM,
);
return
$items
;
}
function
mytaxonomy_theme(){
return
array
(
'product'
=>
array
(
'template'
=>
'product'
,
'variables'
=>
array
()
),
'catetory_block'
=>
array
(
'template'
=>
'catetory_block'
,
'variables'
=>
array
()
),
);
}
function
mytaxonomy_permission() {
return
array
(
'view product'
=>
array
(
'title'
=> t(
'View product'
),
),
);
}
/**
* Implements hook_block_info().
*/
function
mytaxonomy_block_info() {
$blocks
[
'catetory_block'
] =
array
(
'info'
=> t(
'Category'
),
'cache'
=> DRUPAL_NO_CACHE,
);
//如有多个分类,就写多个block,复制多份
return
$blocks
;
}
/**
* Implements hook_block_view().
*/
function
mytaxonomy_block_view(
$block_name
=
''
) {
if
(
$block_name
==
'catetory_block'
) {
$content
= show_catetory();
// 定义block的函数
$block
=
array
(
'subject'
=> t(
'Category'
),
'content'
=>
$content
,
);
}
//如有多个分类,就写多个block,复制多份
return
$block
;
}
function
show_catetory()
//只提供大概db_select 写法。根据自己改写
{
$output
=
''
;
$query
= db_select(
'taxonomy_term_data'
,
'td'
);
$query
->leftJoin(
'taxonomy_term_hierarchy'
,
'th'
,
'td.tid = th.tid'
);
$query
->fields(
'td'
)->fields(
'th'
,
array
(
'parent'
))
->condition(
'td.vid'
,
'2'
)->condition(
'th.parent'
, 0)->orderBy(
'weight'
,
'ASC'
)->orderBy(
'tid'
,
'DESC'
);
$query
=
$query
->execute()->fetchAll();
$rows
=
array
();
foreach
(
$query
as
$ob
)
{
$row
=
array
();
$row
[
'tid'
] =
$ob
-> tid;
$row
[
'name'
] = l(
$ob
-> name,
'category/'
.
$ob
-> tid);
//指定路径到 hook_menu 中的$items['category/%']
$p
= db_select(
'taxonomy_term_hierarchy'
,
't'
)->fields(
't'
)->condition(
't.parent'
,
$ob
-> tid)->execute();
$row
[
'num_of_results'
] =
' ('
.
$p
->rowCount().
')'
;
//分类下有多少个文章;
$rows
[] =
$row
;
}
$output
.= theme(
'catetory_block'
,
array
(
'rows'
=>
$rows
));
//用catetory_block.tpl.php 模版
return
$output
;
}
|
步骤4,mytaxonomy.pages.inc
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
|
<?php
function
show_product(
$tid
){
//通过获取过来的tid写sql,写法如步骤三的function show_catetory()
//注意 $output .= theme('product', array('rows' => $rows));//用product.tpl.php 模版
$output
=
''
;
$query
= db_select(
'field_data_field_manufacturers'
,
'f'
)->extend(
'PagerDefault'
)->limit(50);
//注意这行field_data_field_manufacturers是你的表
$query
->fields(
'f'
,
array
(
'entity_id'
))
->condition(
'f.field_manufacturers_tid'
,
$tid
)->orderBy(
'field_manufacturers_tid'
,
'DESC'
);
$query
=
$query
->execute()->fetchAll();
$rows
=
array
();
foreach
(
$query
as
$ob
)
{
$row
=
array
();
$node
= node_load(
$ob
->entity_id);
//print_r($node);
$row
[
'title'
] = l(
$node
->title,
'node/'
.
$node
->nid);
$image
=
""
;
if
(!
empty
(
$node
->field_thumb)){
$image
=
'<img src="'
.file_create_url(
$node
->field_thumb[
'und'
][0][
'uri'
]).
'">'
;}
$row
[
'image'
] =
$image
;
$row
[
'author'
] =
$node
->name;
$row
[
'created'
] =
$node
->created;
$rows
[] =
$row
;
}
$output
.= theme(
'pager'
);
$output
.= theme(
'product'
,
array
(
'rows'
=>
$rows
));
//用product.tpl.php 模版
$output
.= theme(
'pager'
);
return
$output
;
}
|
步骤5,product.tpl.php跟catetory_block.tpl.php
只给出大概写法,参数得自己根据传过来的data变
product.tpl.php
1
2
3
4
5
|
<?php
foreach
(
$rows
as
$data
){?>
<div
class
=
"productlist"
>
<?php
print
$data
[
'image'
] ?><div style=
"height:50px;width:260px;"
><?php
print
$data
[
'title'
] ?></div>
</div>
<?php }?>
|
catetory_block.tpl.php
1
2
3
4
5
|
<ul>
<?php
foreach
(
$rows
as
$data
){?>
<li><?php
print
$data
[
'name'
] ?></li>
<?php }?>
</ul>
|
步骤6,安装模块,在block页,把模块所生成的block拉到想显示的区域里面。这里假使拖拉到左侧sidebar。