需求是这样的。就是网站栏目中文导航下面有英文。如下:
当然,最好的方式是基于dedecms后台栏目来添加,这样便于管理维护与修改。那华哥手上有个网站(拿别人的模板)刚好有此功能,打开后台一看,原来是网站栏目处多了一个东西。
那原理是知道了,就是对栏目有添加了一个自定义字段,这个字段的作用是显示栏目英文名称。而在前台模板,则是调用这个字段显示其内容。
可是织梦dedecms后台没有可视化的功能,可以对栏目添加字段,要想添加,就必须去操作mysql数据库。网上查得方法并实践成功。如下:
第一部分:给数据库表添加自定义字段。
提别说明:我用的是phpMyAdmin数据库管理软件,虚拟空间商后台数据库管理一般都提供的有高级管理功能,一般都是phpMyAdmin。
1、我们要进去mysql数据库里添加字段,自己命名好!比如我下面添加了一个栏目搜索关键字字段,当然你字段可以自己新建。
2、找到表 dede_arctype (这个是栏目模型的数据库表,前面是你安装的表名,新手要注意,不要问我,我找不到这个表)
3、进入dede_arctype表然后选择结构

进入dede_arctype表然后选择结构

字段添加栏目
(这里华哥针对网站的需求,选择的是于“typename”之后,就不截图了,typename即是指默认的网站栏目名称字段)
5、选择添加在某个字段结尾或之前点,击添加字段,出现字段属性设置界面,根据自己需要做相应的设置,点击保存即可。如下图:

字段属性设置界面
(华哥添加的是这样的)
6、到这里数据库 dede_arctype 字段添加就完成了。
(华哥提示,那么这里一定要检查下,一个方法就是对比typename字段,因为新添加的enname字段,和typename的各项属性是一模一样的,相当于enname是typename的一个复本,这样安全不易出错)
第二部分:就是要修改后台的模板,在后台添加或修改栏目时,有一个文本框,可以输入英文名称。
接下来我们开始做后台。大家先找到 后台栏目 管理模版!
要更改的 2个找到dede\templets目录下的 模版文件:catalog_add.htm、catalog_edit.htm
然后添加表单之文本框字段,这个学过点编程的都会的。
我添加的代码是:
<tr> <td height="65">栏目搜索关键字:</td> <td> <textarea name="lanmukeywrod" cols="70" rows="4" id="lanmukeywrod" class="alltxt" ><?php echo $myrow['lanmukeywrod']?></textarea> </td> </tr> |
(那么针对自己的网站,华哥添加的代码是:
<tr>
<td class='bline' height="26" style="padding-left:10px;"><font color='red'>栏目名称:</font></td>
<td class='bline'><input name="typename" type="text" id="typename" size="30" class="iptxt" /></td>
</tr>
<tr>
<td class='bline' height="26" style="padding-left:10px;">英文栏目:</td>
<td class='bline'><input name="enname" type="text" id="enname" size="30" class="iptxt" /></td>
</tr>
要注意name及id的命名,此外,你这个新添加的栏目自义字字段,在数据库中在哪个字段位置后,代码也就复制到哪个后,
catalog_add.htm、catalog_edit.htm两个模板文件,所做的操作是一样的,但不能少做了一个。
)
这里大家注意了。表单的name 和id 要和添加的 mysql表字段一样,不应的话。还要多写个取值代码。一样的话。默认dedecms会自动取的。
第三部分,就是实现程序功能,把数据添加进去或能在后台修改。
大家找到: \dede\catalog_edit.php,catalog_add.php
目录可能和大家不一样 也就是管理后台目录里面的 catalog_edit.php,catalog_add.php
catalog_edit.php要改的地方有:
38行 $upquery = "Update `dede_arctype` set
sql语句里面添加我们刚才的 字段进去。也就是下面这个代码 $upquery = "Update `dede_arctype` set 看到了 这个是添加的:`lanmukeywrod`='$lanmukeywrod' |
(照葫芦画瓢,华哥添加的是在typename='$typename',这行后,增加了一行enname='$enname',)
这个是更新栏目的。catalog_add.php添加。也是同样的办法:
更改地址有:63行和196行。也是同样办法。添加字段信息 到sql里去 更改后的代码: 63行: $queryTemplate = "insert into `dede_arctype`(reid,topid,sortrank,typename,typedir,isdefault,defaultname,issend,channeltype,tempindex,templist,temparticle,modname,namerule,namerule2,ispart,corank,description,keywords,moresite,siteurl,sitepath,ishidden,`cross`,`crossid`,`content`,`smalltypes`,`lanmukeywrod`) Values('~reid~','~topid~','~rank~','~typename~','~typedir~','$isdefault','$defaultname','$issend','$channeltype','$tempindex','$templist','$temparticle','default','$namerule','$namerule2','0','0','','','0','','','0','0','0','','','$lanmukeywrod')"; 添加了 lanmukeywrod 196行: $in_query = "insert into `dede_arctype`(reid,topid,sortrank,typename,typedir,isdefault,defaultname,issend,channeltype,tempindex,templist,temparticle,modname,namerule,namerule2,ispart,corank,description,keywords,moresite,siteurl,sitepath,ishidden,`cross`,`crossid`,`content`,`smalltypes`,`lanmukeywrod`) Values('$reid','$topid','$sortrank','$typename','$typedir','$isdefault','$defaultname','$issend','$channeltype','$tempindex','$templist','$temparticle','default','$namerule','$namerule2','$ispart','$corank','$description','$keywords','$moresite','$siteurl','$sitepath','$ishidden','$cross','$crossid','$content','$smalltypes','$lanmukeywrod')"; |
(照葫芦画瓢,上面这么长的代码看不完整并不要紧,重要的找到位置添加。华哥在typename后添加ename,要注意上面的写法很多样化,最好就是复制typename,在它的后面粘贴后改名)
(在这过程中发现一件让人无语的事,使用mac版的dreamweaver打开gbk编码的dedecms文件,显示全是乱码,没法在本地改,只有在织梦后台战战兢兢地小改。)
通过上面三步操作,完成了如下工作:
1.在后台mysql数据库添加自定义字段;
2.修改后台模板文件,可以在后台栏目管理处可视化添加或修改字段的表单文本框;
3.修改后台程序文件,实现在后台添加与修改自定义字段的功能。
这个ok后,进入网站后台测试,添加栏目的英文名称,尝试修改英文名称,确保无误。
最后检查下mysql数据库,确定真的进入了数据库。
那到了第四步,第四步的需求就是要在导航菜单中,将这个对应的栏目英文名称显示出来。
哎哟,发现要显示这个栏目自定义字段,很不容易,要修改系统文件。这是调用代码,用的是dede:channel 标签。
<div class="nav">
<ul>
<li><a href="/" class="home">首页<br><span>Home</span></a></li>
{dede:channel type='top' row='10' currentstyle="
<li><a href='~typelink~' ~rel~ class='on'>~typename~</a></li>
"}
<li><a href='[field:typeurl/]' [field:rel/]>[field:typename/]<br><span>[field:enname/]</span></a></li>
{/dede:channel}
<li><a href="/help/1486.html">加入联盟<br><span>Join IBA</span></a></li>
</ul>
</div>
如果没有修改系统文件的话,织梦cms系统不能识别enname,那么就会把[field:enname/]直接当作文本显示出来。这肯定是不行的啦。
以下是网络上的解决方法:
打开代码的include/channel.lib.php 这个界面,然后大概找到78行,可以看到有3条sql
把上面的title2改为你自己的自定义字段名称就好了.同理大概111行也需要这样改.那么这个时候[field:title2/]你就可以调出自定义字段了。
(ok,照葫芦画瓢,华哥找到这三处位置,在typename后加了一个enname。)
最终,效果出来了。
至于css的话,请自行查看处理。演示站是:www.ibabrand.com。
别看上去似乎华哥实现很容易,可不是这样的呢。因为十多年前学习过编程和数据库,所以对于实现原理、步骤和流程是很清楚明白的。但是在代码层级,出现问题可不好办,毕竟华哥是做营销的而不是搞编程和建站的。特别是最后一步,当这个自定义字段,栏目英文名称的调用代码显示为文本,花了个把小时,不停的测试实践才算搞定。
照葫芦画瓢咋还这么难呢?希望你下次碰到这个问题时,能够一帆风顺!
参考教程如下:
https://www.genban.org/news/dedecms-6828.html