分类筛选功能在网站中是一种常见的应用,比如房地产里根据区域、价格、户型等条件实现的多条件筛选,网站案例里根据行业类型、端口类型等条件实现的多条件筛选,或者类似58赶集网那样的本地生活信息服务类网站,都用到了分类筛选的功能。
用好分类筛选,不仅可以提升网站的用户体验,在SEO方面,更是可以起到很大的帮助。举个例子,假如一个网站的分类筛选里分类1有5项、分类2有10项、分类3有10项,那么网站一共会生成500( 5 X 10 X 10 )条的组合,实际的网站应用中往往会比这个更多,这样的话,你如果原来发布了1条数据信息,在搜索引擎里面就只会有1条搜录,如果加了分类筛选的话,就至少是500+的搜录了,如果能利用好分类筛选,在做SEO网站优化的时候往往能做到事半功倍的效果。
这听起来确实是一件很酷的事情,但是如果要从0开发这个功能,工作量和技术难度还是比较大的。好在PHPCMS官方在2011年就实现了这个功能,做一些适当的改造,就能实现上面期望的效果,下面作者总结下具体的实现方法。
1、将官方的分类信息函数库info.func.php放到\phpcms\libs\functions\autoload里面,增加了https支持、英文格式伪静态的支持
2、在网站后台“扩展”“联动菜单” “ 添加联动菜单”
3、在 “模型管理” “字段管理” 添加“联动菜单” 字段,然后添加栏目,选择添加了联动菜单字段的那个模型,然后添加几条测试数据
注意:添加 “联动菜单” 的时候, “是否作为筛选字段” 请一定要选中,筛选才会生效
注意:添加完 “联动菜单” 后,如果在后台添加数据时,下拉菜单没有显示内容,记得更新下缓存就可以了
4、前台使用之生成利于SEO的标题, 以所属行业分类webhy为例说明
<?php $webhy =""; //定义当前正在访问的分类名 $linkage_webhy = isset($_GET['webhy'])?intval($_GET['webhy']):'0'; $info_linkageid_webhy = 3360;//一级分类ID $linkages_webhy = show_linkage($info_linkageid_webhy,3361,3361,$modelid,"webhy");//3361为对应子菜单第一个分类ID ?> {loop $linkages_webhy $r} {if $linkage_webhy == $r['linkageid'] || get_linkage_level($info_linkageid_webhy, $linkage_webhy)== $r['linkageid']} {php $webhy = $r['name']} {php break;} {/if} {/loop} <?php $webtype ="" ; $linkage_webtype = isset($_GET['webtype'])?intval($_GET['webtype']):'0'; $info_linkageid_webtype = 3372; $linkages_webtype = show_linkage($info_linkageid_webtype,3373,3373,$modelid,"webtype"); ?> {loop $linkages_webtype $r} {if $linkage_webtype == $r['linkageid'] || get_linkage_level($info_linkageid_webtype, $linkage_webtype)== $r['linkageid']} {php $webtype = $r['name']} {php break;} {/if} {/loop}
{if $webhy == "全部"} {php $webhy = "所属行业"} {/if} {if $webtype == "全部"} {php $webtype = "全部网站类型"} {/if}
TDK这样写即可
<title>{if $page != 1}第{$page}页_{/if}{if $webhy != ""}{$webhy}_{/if}{if $catid == 18}{$webtype}_{/if} {$catname}_太友帮</title> <meta name="keywords" content="{$SEO['keyword']}" /> <meta name="description" content="关于成都网站建设和成都网站制作的{$catname}:{$webhy}{if $catid == 18}_{$webtype} {/if};太友帮成立于2015年,专业从事网站建设、小程序开发、微信公众号开发等服务。" />
5、联动菜单的数据调用
{loop $linkages_webhy $r} {if $linkage_webhy == $r['linkageid'] || get_linkage_level($info_linkageid_webhy,$linkage_webhy)== $r['linkageid']} <li class="active"> <a href="{$r['url']}">{$r['name']}</a> </li> {else} <li> <a href="{$r['url']}">{$r['name']}</a> </li> {/if} {/loop}
{loop $linkages_webtype $r} {if $linkage_webtype == $r['linkageid'] || get_linkage_level($info_linkageid_webtype,$linkage_webtype)== $r['linkageid']} <li class="active"> <a href="{$r['url']}">{$r['name']}</a> </li> {else} <li> <a href="{$r['url']}">{$r['name']}</a> </li> {/if} {/loop}
6、lists标签的数据调用要这样写了
<?php // PHPCMS在{pc:content action="lists"}里加入查询条件where="$sql"后,查询语句条件部分没有and部分,需手动加上 ?> {php $sql = structure_filters_sql($modelid); } {php $sql = " and " . $sql;} {php $urlrule = makeurlrule();//这句用来生产自定义的urlrule,不能去掉 } {pc:content action="lists" catid="$catid" where="$sql" num="12" order="listorder desc,inputtime desc" page="$page"} {loop $data $r} <div class="item"><a href="{$r[url]}" target="_blank" style="background-image:url({$r[thumb]});"></a></div> {/loop} {/pc}
7、添加伪静态支持
RewriteRule ^list-([0-9]+)-([0-9]*)-([0-9]*)-([0-9]+).html index.php?m=content&c=index&a=lists&catid=$1&webhy=$2&webtype=$3&page=$4
至此,利于SEO的分类筛选功能就全部实现了,如图: