phpcms v9 联动菜单筛选插件

作者: 分类: 默认分类 时间: 2014-10-25 评论: 暂无评论

extention.func.php 文件

<?php

/**

  • extention.func.php 用户自定义函数库
    *
  • @copyright (C) 2005-2010 PHPCMS
  • @license [url]http://www.phpcms.cn/license/[/url]
  • @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', $array=array()) {

$datas = $infos = array();
$keyid = intval($keyid);
$linkageid = intval($linkageid);
//print_r ($datas);
//当前菜单id
/*以下一行引起其它类别不显示*/
//$field_value = intval($_GET[$fieldname]);
 
$field_value = 0;
 
//print_r ($field_valu`e );
$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]['linkageid'] = $v['linkageid'];
        $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'].' class='.$array[$k]['linkageid'] .'>'.$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=9'.$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[] = '';     
    // print_r('/{\$'.$filter.'([a-z0-9_]+)}/');
    //print_r('|'.$urlrule);    
$urlrule = preg_replace($_findme, $_replaceme, $urlrule);
    //print_r('|'.$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 = '`catid`=\'' . $_GET[catid] . '\' and `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;

}
?>
使用方法:

覆盖到phpcmslibsfunctions这个目录下

后台添加字段(类型只能是联动菜单,和下拉列表)、然后选择作为筛选字段。

模板使用

    <strong>您已选择:</strong>
    {loop get_parent_url($modelid,'diqu') $r}
            <a href="{$r['url']}">{$r['name']}</a>
    {/loop}

==============================
联动菜单使用:

{php $zones = show_linkage(1,0,$modelid,'diqu')}
{if !empty($zones)}
<dl class="clearfix">

<dt>地区:</dt>
<dd class="more">全部展开</dd>
<dd class="item_list">
            {loop $zones $r}
                    {$r['menu']}
            {/loop}
    </dd>

</dl>
{/if}


{php $zones = show_linkage(3360,0,3,'bzfl', array('catid'=>9))}

                {if !empty($zones)}
                                {loop $zones $r}
                            {$r['menu']}
                        {/loop}
                {/if}        

==========================
下拉列表使用

    {loop filters('xz',$modelid) $r}
            {$r[menu]}
    {/loop}

==========================
配合列表标签使用:

    {php $sql = structure_filters_sql($modelid);}
    {pc:content action="lists" where="$sql" catid="$catid" modelid="$modelid" num="10" page="$page"}

伪静态:
.ht : RewriteRule ^.list-(d)-(d)-(d)-(d)-(d)-(d)-(d).html$ /index.php?m=content&c=index&a=lists&catid=$1&bzcolor=$2&bzfl=$3&pbsize=$4&pcsize=$5&sjsize=$6&page=$7

.is : <rule name="rD">
<match url="^.list-(d)-(d)-(d)-(d)-(d)-(d)-(d).html$" />
<action type="Rewrite" url="/index.php?m=content&c=index&amp;a=lists&catid={R:1}&bzcolor={R:2}&bzfl={R:3}&pbsize={R:4}&pcsize={R:5}&sjsize={R:6}&page={R:7}" />
</rule>

PHPCMS v9最实用的23个调用代码

作者: 分类: 默认分类 时间: 2014-10-16 评论: 暂无评论

今天给大家分享的是phpcms的一些最实用的调用代码。这也是我用phpcms以来觉得,这一套几乎能够解决到我很多问题,喜欢就做个评论,或者直接转走吧!
1、调用最新文章,带所在版块;
{pc:get sql="SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM v9_news a, v9_category b WHERE a.catid = b.catid ORDER BY a.id DESC "num="15" cache="300"}
{loop $data $r}
[{$r[catname]}] {str_cut($r['title'],26)}
{/loop}
{/pc}
2、截取调用标题长度;
{str_cut($v['title'],34)} -----超出用 ... 代替
{str_cut($v['title'],34, '???')}-----超出用 ???代替
{str_cut($v['title'],34,'')}-----超出不用任何字符代替
3、格式化时间调用;
{date('Y-m-d H:i:s',$r[inputtime])}-----2013-07-25:11:22:33
{date('m-d',$v['inputtime'])}------07-25
4、多栏目调用&多推荐位调用调用需求:文章范围为59 60 61三个栏目,并且推送到了27 和28两个推荐位;从第三条开始,连续调用7篇文章。
{pc:get sql="SELECT * FROM v9_news WHERE id IN (SELECT id FROM v9_position_data WHERE posidin(27,28) and catid in(59,60,61)) order by listorder DESC" cache="3600" start="3" num="7"return="data" }
{loop $data $n $r}
·{str_cut($r[title],22,'')}
{/loop}
{/pc}
5、显示栏目名称;
{$catname}-----只显示名称不带链接
{$CATEGORYS[$r['catid']]['catname']}-----显示栏目名称和链接
6、获取父栏目id/获取父栏目名称;
{$CATEGORY[$catid][parentid]}-----父栏目ID
{$CATEGORYS[$CAT[parentid]][catname]}-----父栏目名称
7、外部数据源调用dedecmsdb 在后台数据源处添加;
{pc:get sql="SELECT * FROM cq_member where mtype='企业' " cache="3600" dbsource="dedecmsdb"num="7" return="data"}
{loop $data $r}
{str_cut($r[uname],28,'')}
{/loop}
{/pc}
8、调用子栏目(在栏目首页模板需要用到);
{pc:content action="category" catid="$catid" num="25" siteid="$siteid" order="listorderASC"}
{loop $data $r}
{$r[catname]} |{/loop}
{/pc}
9、显示指定id的栏目名称;
{$CATEGORYS22}
10、在文章面前显示文章类别;
{pc:content action="lists" catid="79" order="listorder DESC" num="14" }
{loop $data $n $r}
{if $TYPE[$r[typeid]][name]}[ {$TYPE[$r[typeid]][name]}]
{/if}{str_cut($r[title],33,'')}
{/loop}
{/pc}
11、指定变量循环增长(幻灯片经常用到);
{pc:content action="lists" catid="66" order="listorder DESC" thumb="1" num="5" }
{php $num = 0}
{loop $data $r}
linkarr[{$num}] = "{$r[url]}";picarr[{$num}] = "{$r[thumb]}";textarr[{$num}] = "{str_cut($r[title],36,'')}";
{php $num++}
{/loop}
{/pc}
12、文章调用使用limit;
{pc:content action="position" posid="31" order="listorder DESC" limit='1,8--'}
{loop $data $r}
{str_cut($r[title],36,'')}
{/loop}
{/pc}
13、文章从指定位置开始调用起始位置为5,调用3条;
{pc:content action="position" posid="27" order="listorder DESC" num="3" start="5"}
{loop $data $r}
{str_cut($r[description],115)}...
{/loop}
{/pc}
[page]
14、文章列表页调用关键字,或者首页调用关键字注意:explode(‘,’,$r[keywords]);是将文章关键词通过英文逗号分离,也就是说每一篇文章都要以逗号间隔关键字,否则调用出来会 是全部作为一个关键字。如果是空格间隔关键字,将explode(‘,’,$r[keywords]);改成explode(‘ ‘,$r[keywords]);
{pc:content action="lists" catid="$catid" num="10" order="id DESC" page="$page"}
{loop $data $r}
{$r[title]}
{php $keywords = explode(',',$r[keywords]);}
文章标签:
{loop $keywords $keyword}
{$keyword}
{/loop}
{/pc}
15、每当列表几行的时候出现一次某些符号(比如首页里面的文章推荐,一行显示两条,在这两条中间想加一条竖线 | 就用到这个代码了)数量大的话就容易出错,因为模运算嘛~~呵呵 不过一般也就4个标题以下;
{pc:content action="position" posid="8" order="listorder DESC" num="2"}
{loop $data $r}
{str_cut($r[title],26,'')}{if $n%2==1} |{/if}
{/loop}
{/pc}
16、v9 列表页完美支持自定义段调用;
{pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"moreinfo="1"}
{loop $data $r}
[{$r['字段名']}]> {$r[title]}
{/loop}
{$pages}
{/pc}
[page]
17、当前栏目调用父级及以下栏目信息方法其他代码;
{php $arrchildid = $CATEGORYS[$CAT[parentid]][arrchildid]}
{pc:get sql="SELECT * FROM v9_news where catid in($arrchildid) cache="3600" page="$page"num="12" return="data"}
18、V9表单功能 提交之后如何返回当前页面,而不是默认的首页文件地址;
找到 phpcmsmodulesformguideindex.php文件第73行

showmessage(L('thanks'), APP_PATH);

修改成 如下代码即可实现自动返回前一页

showmessage(L('thanks'), HTTP_REFERER);
19、v9 首页或分页自定义字段调用和15差不多第一普通列表或栏目调用自定义字段在{pc:content action=”lists” 后加上副表moreinfo=1 (等于1时显示,0时不显示)例子:
{pc:content action="lists" moreinfo=1 catid="2" order="id DESC" num="4"}
{loop $data $key $val}
{$val['title']}
价格:{str_cut($v['自定义段'],100)} //100 是字数
{/loop}
{/pc}
20、第二种推荐位调用自定义字段在模型里加好自定义字段后,必须把“在推荐位标签中调用”点击“是“然后用同一样的方法去调节数据就OK了,记住,如果你加了文章,必须去更新文章才会显示,自定义段在推荐中只显示你选择后,选择前加的加文章不显示,更新一下文章就显示了例子:
{pc:content action="position" posid="推荐位id" num="30" thumb="1" moreinfo="1"order="listorder DESC"}
{loop $data $key $val}
{str_cut($val['title'],20)}
{/loop}
{/pc}
21、编辑器上传图片自动使用标题作为alt参数;
一: 修改 statics/js/ckeditor/plugins/image/dialogs/image.js找到accessKey:'T','default':''
替换成accessKey:'T','default'('#title').val()
二: 清除浏览器缓存
22、增加文章的随机点击数;
找到100行的$views = $r['views'] +1修改为:
$rand_nums=rand(79,186);
$views = $r['views'] + $rand_nums;
表示点击一次,增加79到186次不等
23、PHPCMS V9的get标签调用;
1、调用本系统单条数据,示例(调用ID为1的信息,标题长度不超过25个汉字,显示更新日期):

{get sql="select * from phpcms_content where contentid=1" /}
标题:{str_cut($r[title], 50)}
URL:{$r[url]}
更新日期:{date('Y-m-d', $r[updatetime])}

2、调用本系统多条数据,示例(调用栏目ID为1通过审核的10条信息,标题长度不超过25个汉字,显示更新日期):

{get sql="select * from phpcms_content where catid=1 and status=99 order by updatetime desc"rows="10"}
标题:{str_cut($r[title], 50)}
URL:{$r[url]}
更新日期:{date('Y-m-d', $r[updatetime])}
{/get}

3、带分页,示例(调用栏目ID为1通过审核的10条信息,标题长度不超过25个汉字,显示更新日期,带分页):

{get sql="select * from phpcms_content where catid=1 and status=99 order by updatetime desc"rows="10" page="$page"}
标题:{str_cut($r[title], 50)}
URL:{$r[url]}
更新日期:{date('Y-m-d', $r[updatetime])}
{/get}
分页:{$pages}