帝国CMS后台,在添加栏目时,有栏目名称和栏目别名两个选项,默认情况下,这二者填的内容是一样的。
但站在SEO的角度来看,很想让它们不一样。
如上所示,栏目名称叫作:儿童房,华哥希望在网页的内容显示中,就是儿童房三字,因为它简短、清晰,浏览者第一眼看到,就能明白这是个什么主题的栏目。
那要是站在SEO的角度来看,儿童房三个字有些短了,特别是对基于PC的SEO来说,关键词能长尾就尽量长尾一些,因为,华哥弄的是一个新网站,像儿童房这样的词,要等做上排名获得流量,恐怕要到下辈子才行。
但同时,考虑到移动的SEO,栏目别名也不要弄得太长。因为华哥这个网站是响应式,PC和移动是同一套后台。见:移动seo关键词长点好还是短点好?
如上所示:栏目别名叫作:儿童房装修效果图,这个名称是放置在网页标题<title>中,主要是给搜索引擎参考和识别。
(其他情况:如果移动站和PC站不是同一套后台,则另当别论,或者移动站可以调整模板,只提取栏目名称作为网页的标题,忽略掉别名不用。)
后台栏目名称和别名添加好后,接下来要做的,就是模板代码了。
如果只是调用栏目名称,那很简单。把[!–class.name–]放到模板中要放置的位置即可。
如果要调用栏目别名作为标题,那要麻烦一些,不过,好在网上有答案。
帝国CMS调用栏目别名的两种方法!
第一种:在最终栏目调用
<?=$class_r[$GLOBALS[navclassid]][bname]?>
第二种:万能的,哪里都行,应为是直接查询数据库输出的!
<?php $cr=$empire->fetch1(“select bname from phome_enewsclass where classid='”.$GLOBALS[navclassid].”‘ limit 1″); echo $cr[‘bname’]; ?>
如法炮制,在终极栏目对应的栏目列表模板中,华哥用<?=$class_r[$GLOBALS[navclassid]][bname]?>去试验,成功!参考代码如下:
<title><?=$class_r[$GLOBALS[navclassid]][bname]?>-<?=$public_r[sitename]?></title>
即:栏目别名-网站名称 这样的格式。
但终极栏目以外属性的栏目页或频道页列表模板中,华哥发现套入这个代码没有结果。
那就用第二种,万能的。
不过第一遍实践下来,发现没有生效,不起作用,不过也没有提示什么错误。
还是出现了小问题:在更新栏目生成HTML操作后,帝国CMS没有什么提示更新成功的信息,页面变为空白。
把这行代码去掉,再去更新,又回到正确的轨道。
难道是这行代码格式不对,又在网上寻找答案,发现这“万能代码”大体是一致的,看来这代码没有什么错误,是自己用得不正确吧。
再一检查,好好仔细地看了一下代码。好歹华哥还是懂点程序的。发现了玄机。
原来问题出在这:select bname from phome_enewsclass
网上提供的代码,大部分都是用默认的帝国CMS后端MySQL数据库表前缀(即phome_)来做实例的。可是我网站用的数据库前缀,在安装帝国CMS时已经修改过了。
提示:帝国安装成功后,可打开e/config/config.php来查看数据库的前缀是什么。
于是我修改代码,将phome_enewsclass的phome换为有过修改的前缀名称。上传模板代码至后台,再生成栏目页,发现OK。参考代码如下:
<title><?php $cr=$empire->fetch1(“select bname from ww2345678_enewsclass where classid='”.$GLOBALS[navclassid].”‘ limit 1″);echo $cr[‘bname’];?>-<?=$public_r[sitename]?></title>
像我这种操作,业界称之为硬编码,一板一眼,通用性不强。经搜索,发现还有更好的。
代码中用{$dbtbpre}这个变量来替换任何数据库表前缀,如上述代码中,可改为:select bname from {$dbtbpre}enewsclass……于是,我把上面的代码换成:
<title><?php $cr=$empire->fetch1(“select bname from {$dbtbpre}enewsclass where classid='”.$GLOBALS[navclassid].”‘ limit 1″);echo $cr[‘bname’];?>-<?=$public_r[sitename]?></title>
很完美,这才算得上是万能的通用代码:不管你网站的数据库前缀是什么,此代码都将自动匹配对应的前缀名称,这才是万能的,灵活的实现方式。最终,实现了想要达成的结果。如图所示(不过图示中的栏目名称已由儿童房换成了贺卡制作)。