phpcmsv9如何设置分类筛选伪静态

heiyu4585 2015-09-30 10:21:04
1.网站筛选功能已经实现.

2.但是url静态化,总是出现问题.xxx/test/list-26---3--1.html ,点击后提示404,

3.有没有做过phpcms筛选伪静态的,帮下忙.

代码如下:


/********************实现筛选功能************************/
/**
* 通过指定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 href='.$array[$k]['url'].'>'.$v['name'].'</a>' ;
}
}
return $array;
}
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("\n",$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 href='.$option[$k]['url'].'>'.$v[0].'</a>' ;
}
$all['name'] = '全部';
$all['url'] = structure_filters_url($field,array($field=>''),2,$modelid);
$all['menu'] = $field_value == '' ? '<em>'.$all['name'].'</em>' : '<a href='.$all['url'].'>'.$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` < '$max'";
}
} else {
$sql .=" AND `$k` = '$r'";
}
}
}
return $sql;
}

/**
* 分页,如去掉则分页会有问题
*/
function makeurlrule() {
if(strpos(URLRULE,'.html') === FALSE) {
return url_par('page={$'.'page}');
}
else {
$url = preg_replace('/-[0-9]+.html$/','-{$page}.html',get_url());
return $url;
}
}


/********************实现前台输出“选项名称”功能************************/
/**
* 根据box类型字段获取显示名称
* @param $field 字段名称
* @param $value 字段值
* @param $modelid 字段所在模型id
*/
function box($field, $value, $modelid='') {
$fields = getcache('model_field_'.$modelid,'model');
extract(string2array($fields[$field]['setting']));
$options = explode("\n",$fields[$field]['options']);
foreach($options as $_k) {
$v = explode("|",$_k);
$k = trim($v[1]);
$option[$k] = $v[0];
}
$string = '';
switch($fields[$field]['boxtype']) {
case 'radio':
$string = $option[$value];
break;
case 'checkbox':
$value_arr = explode(',',$value);
foreach($value_arr as $_v) {
if($_v) $string .= $option[$_v].' 、';
}
break;

case 'select':
$string = $option[$value];
break;

case 'multiple':
$value_arr = explode(',',$value);
foreach($value_arr as $_v) {
if($_v) $string .= $option[$_v].' 、';
}
break;
}
return $string;
}
//end 新的筛选功能

...全文
627 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpmysql521 2019-05-07
  • 打赏
  • 举报
回复
@heiyu4585 phpcmsv9如何设置分类筛选伪静态 求解
phpmysql521 2019-05-05
  • 打赏
  • 举报
回复
您好在不想咨询下phpcms伪静态
weixin_38318958 2017-09-05
  • 打赏
  • 举报
回复
rewrite ^(.*)/list-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*).html$ $1/index.php?m=content&c=index&a=lists&catid=$2&cydx=$3&jmdy=$4&mdzs=$5&rzxm=$6&tscy=$7&tzje=$8&tzshr=$9&page=$10 last;
c113sc 2017-06-27
  • 打赏
  • 举报
回复
引用 1 楼 meilidebabi 的回复:
我也是这样的问题。求代码
搞定了吗?我也遇到了这个问题
LNG小妖精 2016-11-11
  • 打赏
  • 举报
回复
我也是这样的问题。求代码
五指CMS本次系统主要更新一下内容(20150519) 1、php5.4以上环境,部分程序不能安装的问题。 五指CMS本次系统主要更新一下内容(20150518): − 支持php5.2、php5.3、php5.4、php5.5、php5.6!(推荐使用5.4或更高版本!) − 新增图片模型及前台模板展示 − 新增下载模型及前台模板展示 − 全新会员中心 − 新增短信手机验证 − 新增会员公司模型,机构模型注册 − 新增积分管理、积分配置、积分消费记录 − 新增订单管理 − 新增优惠券管理 − 新增百度地图字段 − 新增下载字段 − 新增管理模型内容字段 − 新增全新门户版PC模板1套 − 新增全新门户版手机模板1套 − 新增云端区块ID添加,后台菜单云端ID,开发者可轻松打包发布! − 新增微信公众号自动回复功能 − 新增微信公众号菜单设置 − 新增已关注微信公众号通过公众号进入Html5页面自动登录 − 修复php5.2上传附件问题 − 修复php5.3页面部分页面白屏问题 − 修复多处字段输出格式错误问题 − 其它修复项多达50项 五指cms更新说明: 新增内容手动分页 新增百度地图 新增订单管理模块 新增订单地址管理 增加Microsoft YaHei字体 新增推广邀请模块 新增私密下载,下载函数 新增百度地图 新增筛选功能 修正全局开始时间bug 栏目缓存增加 ismenu缓存字段。 修改密码同步UC 删除会员同步删除第三方登录信息 修复图片预览 修复基本设置,统计代码无法设置js问题。 修正排行榜标题为空bug 修复区块字段。 修复伪静态列表时,分页问题 修复联动菜单添加子选项,上级分类显示问题 修复后台用户名,在前台登录其他用户,出现的用户名错乱。 修复栏目列表SEO 标题设置不生效bug 删除 ueditor 中的 php文件夹。 修复:变量不存在bug。 优化栏目分页 优化自动更新会员配置 优化订单地址显示方式 优化90分钟之内为人性化提示 优化首页菜单 优化多选字段名称改为:单选|多选 使用合作网站登录页面优化 批量移动栏目排版修改 删除无用img资源   五指cms由原phpcms V9 负责人王参加主导开发,前后台界面采用html5 css3技术,可以进行跨屏、跨设备管理内容,极大的提升了用户体验。五指CMS主要包含以下功能点:   一、模型化设计: 1、全站统一模型,方便二次开发; 2、独创共享模型,独立模型,大小数据全部按需存储; 3、支持10多种不同类型的字段添加:如,文本字段,超级字段,地图字段,滑动条字段,组图字段,下载字段,URL加密字段等。   二、数据读写分离: 1、默认支持数据读写分离; 2、支持1台主数据,多台从数据库; 3、支持按照权重分配数据资源。   三、安全性设计: 1、支持缓存文件目录独立设置; 2、支持www目录与核心代码分离部署; 3、支持cookie加密存储; 4、支持后台程序文件与前台文件分离; 5、支持全局Mysql注入过滤; 6、支持上传目录自定义,禁用php执行; 7、后台登录采用session+session验证码,记录所有登录历史; 8、后台管理日志记录; 9、是否允许修改模版需要有服务器文件管理权限; 10、所有菜单都需要进行权限验证;   四、性能设计: 1、缓存支持内存缓存,如:memcache 缓存; 2、不重复生成和检查模版缓存,提升性能;   五、移动优先设计: 1、默认支持移动端访问自适应; 2、无需重复发文章,文章一键推送。         相关阅读 同类推荐:CMS系统

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧