织梦dedecms栏目添加自定义字段,用{dede:channel}标签调用显示,照葫芦画瓢咋还这么难呢?

照葫芦画瓢

需求是这样的。就是网站栏目中文导航下面有英文。如下:

织梦dedecms中英文导航

当然,最好的方式是基于dedecms后台栏目来添加,这样便于管理维护与修改。那华哥手上有个网站(拿别人的模板)刚好有此功能,打开后台一看,原来是网站栏目处多了一个东西。

dedecms栏目自定义字段

那原理是知道了,就是对栏目有添加了一个自定义字段,这个字段的作用是显示栏目英文名称。而在前台模板,则是调用这个字段显示其内容。

可是织梦dedecms后台没有可视化的功能,可以对栏目添加字段,要想添加,就必须去操作mysql数据库。网上查得方法并实践成功。如下:


第一部分:给数据库表添加自定义字段。

提别说明:我用的是phpMyAdmin数据库管理软件,虚拟空间商后台数据库管理一般都提供的有高级管理功能,一般都是phpMyAdmin。

1、我们要进去mysql数据库里添加字段,自己命名好!比如我下面添加了一个栏目搜索关键字字段,当然你字段可以自己新建。

2、找到表 dede_arctype (这个是栏目模型的数据库表,前面是你安装的表名,新手要注意,不要问我,我找不到这个表)

3、进入dede_arctype表然后选择结构

 

进入dede_arctype表然后选择结构
进入dede_arctype表然后选择结构
4、在结构页下方,注意查看有一栏字段添加的栏目,如下图:

 

字段添加栏目
字段添加栏目

(这里华哥针对网站的需求,选择的是于“typename”之后,就不截图了,typename即是指默认的网站栏目名称字段)

5、选择添加在某个字段结尾或之前点,击添加字段,出现字段属性设置界面,根据自己需要做相应的设置,点击保存即可。如下图:

字段属性设置界面
字段属性设置界面

 (华哥添加的是这样的)

phpmyadmin添加字段

6、到这里数据库 dede_arctype 字段添加就完成了。

(华哥提示,那么这里一定要检查下,一个方法就是对比typename字段,因为新添加的enname字段,和typename的各项属性是一模一样的,相当于enname是typename的一个复本,这样安全不易出错)

dede_arctype 字段添加


第二部分:就是要修改后台的模板,在后台添加或修改栏目时,有一个文本框,可以输入英文名称。

接下来我们开始做后台。大家先找到 后台栏目 管理模版!

要更改的 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
issend='$issend',
sortrank='$sortrank',
typename='$typename',
typedir='$typedir',
isdefault='$isdefault',
defaultname='$defaultname',
issend='$issend',
ishidden='$ishidden',
channeltype='$channeltype',
tempindex='$tempindex',
templist='$templist',
temparticle='$temparticle',
namerule='$namerule',
namerule2='$namerule2',
ispart='$ispart',
corank='$corank',
description='$description',
keywords='$keywords',
moresite='$moresite',
`cross`='$cross',
`content`='$content',
`crossid`='$crossid',
`smalltypes`='$smalltypes'
$uptopsql
where id='$id' ";

 

sql语句里面添加我们刚才的 字段进去。也就是下面这个代码

$upquery = "Update `dede_arctype` set
issend='$issend',
sortrank='$sortrank',
typename='$typename',
typedir='$typedir',
isdefault='$isdefault',
defaultname='$defaultname',
issend='$issend',
ishidden='$ishidden',
channeltype='$channeltype',
tempindex='$tempindex',
templist='$templist',
temparticle='$temparticle',
namerule='$namerule',
namerule2='$namerule2',
ispart='$ispart',
corank='$corank',
description='$description',
keywords='$keywords',
moresite='$moresite',
`cross`='$cross',
`content`='$content',
`crossid`='$crossid',
`smalltypes`='$smalltypes',
`lanmukeywrod`='$lanmukeywrod'
$uptopsql
where id='$id' ";

看到了 这个是添加的:`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数据库,确定真的进入了数据库。

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。)

最终,效果出来了。

dedecms导航菜单

至于css的话,请自行查看处理。演示站是:www.ibabrand.com

别看上去似乎华哥实现很容易,可不是这样的呢。因为十多年前学习过编程和数据库,所以对于实现原理、步骤和流程是很清楚明白的。但是在代码层级,出现问题可不好办,毕竟华哥是做营销的而不是搞编程和建站的。特别是最后一步,当这个自定义字段,栏目英文名称的调用代码显示为文本,花了个把小时,不停的测试实践才算搞定。

照葫芦画瓢咋还这么难呢?希望你下次碰到这个问题时,能够一帆风顺!

参考教程如下:

https://www.genban.org/news/dedecms-6828.html

https://www.genban.org/news/dedecms-7561.html

http://www.dede58.com/a/dedejq/8509.html

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注