phpcms文章如何筛选分类
phpcms文章筛选分类的方法:
首先,用下面这些代码替换掉phpcms/libs/functions/extention.func.php的内容
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<?php
/**
* extention.func.php 用户自定义函数库
*
* @copyright (C) 2005-2010 PHPCMS
* @license http://www.phpcms.cn/license/
* @lastmodify 2010-10-27
*/
/**
* 通过指定keyid形式显示所有联动菜单
* @param $keyid 菜单主id
* @param $linkageid 联动菜单id,0调用顶级
* @param $modelid 模型id
* @param $fieldname 字段名称
*/
function show_linkage($keyid, $linkageid = 0, $modelid = '', $fieldname='zone') {
$datas = $infos = $array = array();
$keyid = intval($keyid);
$linkageid = intval($linkageid);
//当前菜单id
$field_value = intval($_GET@[$fieldname]);
$urlrule = structure_filters_url($fieldname,$array,1,$modelid);
if($keyid == 0) return false;
$datas = getcache($keyid,'linkage');
$infos = $datas['data'];
foreach($infos as $k=>$v){
if($v[parentid]==$field_value){
$array[$k][name] = $v[name];
$array[$k][value] = $k;
$array[$k][url] = str_replace({.$fieldname.},$k,$urlrule);
$array[$k][menu] = $field_value == $k ? <em>.$v[name].</em> : <a>.$v[name].</a> ;
}
}
return $array;
}
/**
* 构造筛选URL
*/
function structure_filters_url($fieldname,$array=array(),$type = 1,$modelid) {
if(empty($array)) {
$array = $_GET;
} else {
$array = array_merge($_GET,$array);
}
//TODO
$fields = getcache(model_field_.$modelid,model);
if(is_array($fields) && !empty($fields)) {
ksort($fields);
foreach ($fields as $_v=>$_k) {
if($_k[filtertype] || $_k[rangetype]) {
if(strpos(URLRULE,.html) === FALSE) $urlpars .= &.$_v.={$.$_v.};
else $urlpars .= -{$.$_v.};
}
}
}
//后期增加伪静态等其他url规则管理,apache伪静态支持9个参数
if(strpos(URLRULE,.html) === FALSE) $urlrule =APP_PATH.index.php?m=content&c=index&a=lists&catid={$catid}.$urlpars.&page={$page} ;
else $urlrule =APP_PATH.list-{$catid}.$urlpars.-{$page}.html;
//根据get传值构造URL
if (is_array($array)) foreach ($array as $_k=>$_v) {
if($_k==page) $_v=1;
if($type == 1) if($_k==$fieldname) continue;
$_findme[] = /{$.$_k.}/;
$_replaceme[] = $_v;
}
//type 模式的时候,构造排除该字段名称的正则
if($type==1) $filter = (?!.$fieldname..);
$_findme[] = /{$.$filter.([a-z0-9_]+)}/;
$_replaceme[] = ;
$urlrule = preg_replace($_findme, $_replaceme, $urlrule);
return $urlrule;
}
/**
* 生成分类信息中的筛选菜单
* @param $field 字段名称
* @param $modelid 模型ID
*/
function filters($field,$modelid,$diyarr = array()) {
$fields = getcache(model_field_.$modelid,model);
$options = empty($diyarr) ? explode("
",$fields[$field][options]) : $diyarr;
$field_value = intval($_GET@[$field]);
foreach($options as $_k) {
$v = explode("|",$_k);
$k = trim($v[1]);
$option[$k][name] = $v[0];
$option[$k][value] = $k;
$option[$k][url] = structure_filters_url($field,array($field=>$k),2,$modelid);
$option[$k][menu] = $field_value == $k ? <em>.$v[0].</em> : <a>.$v[0].</a> ;
}
$all[name] = 全部;
$all[url] = structure_filters_url($field,array($field=>),2,$modelid);
$all[menu] = $field_value == ? <em>.$all[name].</em> : <a>.$all[name].</a>;
array_unshift($option,$all);
return $option;
}
/**
* 获取联动菜单层级
* @param $keyid 联动菜单分类id
* @param $linkageid 菜单id
* @param $leveltype 获取类型 parentid 获取父级id child 获取时候有子栏目 arrchildid 获取子栏目数组
*/
function get_linkage_level($keyid,$linkageid,$leveltype = parentid) {
$child_arr = $childs = array();
$leveltypes = array(parentid,child,arrchildid,arrchildinfo);
$datas = getcache($keyid,linkage);
$infos = $datas[data];
if (in_array($leveltype, $leveltypes)) {
if($leveltype == arrchildinfo) {
$child_arr = explode(,,$infos[$linkageid][arrchildid]);
foreach ($child_arr as $r) {
$childs[] = $infos[$r];
}
return $childs;
} else {
return $infos[$linkageid][$leveltype];
}
}
}
// 根据linkageid递归到父级
function get_parent_url($modelid,$field,$linkageid=0,$array = array()){
$modelid = intval($modelid);
if(!$modelid || empty($field)) return false;
$fields = getcache(model_field_.$modelid,model);
$keyid = $fields[$field][linkageid];
$datas = getcache($keyid,linkage);
$infos = $datas[data];
if(empty($linkageid)){
$linkageid = intval($_GET@[$field]);
if(!$linkageid) return false;
}
$urlrule = structure_filters_url($field,array(),1,$modelid);
$urlrule = str_replace({$.$field.},$infos[$linkageid][parentid],$urlrule);
array_unshift($array,array(name=> $infos[$linkageid][name],url=>$urlrule));
if($infos[$linkageid][parentid]){
return get_parent_url($modelid,$field,$infos[$linkageid][parentid],$array);
}
return $array;
}
/**
* 构造筛选时候的sql语句
*/
function structure_filters_sql($modelid) {
$sql = $fieldname = $min = $max = ;
$fieldvalue = array();
$modelid = intval($modelid);
$model = getcache(model,commons);
$fields = getcache(model_field_.$modelid,model);
$fields_key = array_keys($fields);
//TODO
$sql = `status` = 99;
foreach ($_GET as $k=>$r) {
if(in_array($k,$fields_key) && intval($r)!=0 && ($fields[$k][filtertype] || $fields[$k][rangetype])) {
if($fields[$k][formtype] == linkage) {
$datas = getcache($fields[$k][linkageid],linkage);
$infos = $datas[data];
if($infos[$r][arrchildid]) {
$sql .= AND `.$k.` in(.$infos[$r][arrchildid].);
}
} elseif($fields[$k][rangetype]) {
if(is_numeric($r)) {
$sql .=" AND `$k` = $r";
} else {
$fieldvalue = explode(_,$r);
$min = intval($fieldvalue[0]);
$max = $fieldvalue[1] ? intval($fieldvalue[1]) : 999999;
$sql .=" AND `$k` >= $min AND `$k`
然后,内容——模型管理——选择一个模型添加新字段,如图。
立即学习“PHP免费学习笔记(深入)”;
最后,在要调用产品筛选的栏目模板页添加标签 ,如下。
1
2
3
4
<span>性别:</span>
{loop filters(xingbie,$modelid) $r}
{$r[menu]}
{/loop}
1
2
3
4
5
{php $sql = structure_filters_sql($modelid)}
{php $urlrule = makeurlrule()}
{pc:content action="lists" where="$sql" catid="$catid" num="10" order="id DESC" page="$page" urlrule="$urlrule"}
推荐教程:《phpcms》
以上就是phpcms文章如何筛选分类?的详细内容,更多请关注php中文网其它相关文章!