dedecms学习笔记.docx
- 文档编号:12228813
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:90
- 大小:2.39MB
dedecms学习笔记.docx
《dedecms学习笔记.docx》由会员分享,可在线阅读,更多相关《dedecms学习笔记.docx(90页珍藏版)》请在冰豆网上搜索。
dedecms学习笔记
1.wamp的安装,简略
2.dedecms的安装,注意uploads文件往www文件的拷贝,注意修改dede文件夹的名字为manage,注意在phpextensions中打开phpgd2,注意数据库名字的修改以及,连接用户名,密码的更改
3.dede_channeltype内容模型表头含义
4.dede的栏目信息存储于dede_arctype表中
channeltype表示此栏目对应哪个模型,其中的数字代表dede_channeltype表中的id号
topid表示为上一级栏目的id,等于0表示为顶级栏目
typedir表示栏目所在的文件目录
当我们手动创建一个栏目的时候,dede会自动在根目录下的a文件夹中创建一个对应名字的文件夹
a目录存放我们所有自动生成的静态页面
5.dede_archives栏目中记录的主表头含义
typeid表示此记录对应于哪个栏目,其中的数字对应于dede_arctype表中的id号
channel表示此记录对应于哪个模型,其中的数字对应于dede_channeltype表中的id号
6.dede_addonarticle栏目中记录的从表头含义
typeid表示此记录对应于哪个栏目,其中的数字对应于dede_arctype表中的id号
aid表示此记录对应于哪个记录主表,其中的数字对应于dede_archives表中的id号
7.在一个栏目下创建一个记录的时候,dede会自动在dede_archives和其对应从表中添加相关记录,同时会在a目录下的对应栏目文件夹中生成对应静态页面
8.dede认为无论是什么样的信息,比如新闻,文章,电影,音乐等等,他们都有相同的字段信息,把这些相同的字段信息放入dede_archives主表中,同时把那些不同的字段信息,放入相对应的从表当中,例如如果是文章会放入到dede_addonarticle表中
9.一个内容模型可以对应很多个栏目,例如文章模型中可以对应武侠小说,音乐小说等等
10.每个栏目必须对应一个模型
11.每一个内容模型都对应一个栏目中的记录从表,例如文章模型,对应于dede_addonarticle表,图片模型,对应于dede_addonimages表
12.dede认为每一个栏目下的具体记录都有自己的共性和异性,比如电影,文章,图片,他们都有名称日期,dede会把这些记录的共性放入到dede_archives表中,把每一个模型的异性内容放入到其对应的从表中,比如文章对应的从表为dede_addonarticle,因为模型可以自定义,所以当用户创建一个自定义的模型,dede就会自动为用户创建一个相对应的dede_addonXXX从表
13.数据库四张表的对应关系
14.dede规定,如果自定义添加一个内容模型,但是内容模型下没有一个栏目的话,那就不能添加相关内容和记录
15.dede规定,网站首页面和栏目页面都需要在后台手动点击生成静态页面,否则直接访问的是php页面
16.dede页面的静态化,其实质是在调取模板文件后,运用manage目录下的makehtml_XX.php文件来实现的,生成静态页面后存放于a目录下
17.dede后台允许用户自定义内容字段,即修改内容管理下的任意内容中的添加信息表单项
例如给商品内容的添加信息表单增加一个付费类型,就只需要在频道模型中点击内容模型管理,同时在商品下点击更改
进入如下页面
再点击字段管理,即可给任意内容模型添加字段
18.dede提供了许多常用的联动类型,例如陕西省西安市未央区的下拉框选择
19.在使用dede提供的联动类型时,新建的联动类型缓存组名称,也就是这个
必须与dede提供的联动类别管理中的这个
相同,这样dede才能自动使用联动类别字段
20.当我们在手动更新栏目页面的时候,会自动在a/栏目文件夹/目录下更新两个html文件,一个是index.html,一个是XX_list.html文件,其中生成原理如图
21.每个栏目对应的模板文件在这里寻找
22.创建一个自己的内容模型,在内容模型管理下的新增模型中增加
频道ID不改动,名字标识为英文或数字,chXXX,频道名称为汉字,附加表为dede_addonXXX,在点击保存后产生了如下变化,在dede_channeltype表中增加了一个对应的内容模型,在整个数据库中增加了一个dede_addonXXX表,同时在添加完内容模型后还需要在内容模型管理中的对应内容模型下,添加字段,这点以前有记录。
接下来需要创建一个具体的栏目,这点以前有记录,在增加玩栏目后要刷新一下后台页面,才能在这里看到刚添加的信息
同时我们需要生成栏目html静态页面
23.每一个栏目都对应两个模板文件
即栏目模板,也就是列表模板和内容模板也就是文章模板
24.在我们新创建一个内容模型后,在其下创建一个栏目后,如果我们没有设定对应的模板文件,则默认使用templets/default/目录下的默认模板文件,dede会报错
25.dede中的模板是需要美工来提供的,我们在dede中添加dede的标签
26.dede目录具体说明
a/ 存放栏目和内容静态页面,除了首页静态页面,同时dede把每天产生的静态页面放到不同的文件中年/月日/来分类,比较明确化
dede在创建静态页面的时候就已经把生成静态页的地址放到了静态页面代码中,并没有放到数据库中
data/存放缓存文件,临时文件和重要的配置文件
images/存放dede系统自己的图片文件
include/存放核心类库文件,图片处理类,数据库处理类,字符串处理类,标签库处理类,小工具类,支付接口类
manage/存放后台管理页面的文件,原名叫dede
member/存放会员管理模块目录
plus/存放插件开发文件,我们可以自己开发模块放入dede
templets/default存放所有的模板文件,我们自己的模板文件也放到这个目录下
uploads/存放上传后的文件目录
27.dede标签的学习使用
在这里可以查看修改所有的模板
28.dede首页面广告的取消
也就是把首页面的模板文件中关于广告的代码去掉就可以了
具体位置在:
templets/default/head.htm
templets/default/index.htm
也就是去掉所有的(dede:
myad)标签
注意:
在去掉index页面中的广告标签后,还需要去掉首页面引入页面中的广告标签
29.dede栏目页面广告取消
栏目模板位置在这里寻找:
30.dede内容页面广告取消
位置同29条中的图片,即为文章模板,记住注意查询包含模板文件
31.dede标签学习
首先将首页模板改为自己定义的mytest.htm模板文件
1).单标签
2).双标签
type=”top”表示取出顶级导航条
row=”数字”表示取出多少条
3).字段标签
[field:
字段名/]
(1)无条件
中间的[field:
typename/]是指取出arctype表中的typename值,[field:
id/]表示取出表中id值,但不能随便取只能看sql语句是怎么写的
(2)带function属性
例如给某字段名用md5函数加密,则可以写成
[field:
字段名function=”md5(@me)”/]
(3)带runphp属性
例如我们判断取出的值是空还是非空
dede标签工作原理:
代码:
php
//到数据库去取出结果
$sql="select*fromdede_arctypewhereishidden=0";
$con=mysql_connect("localhost","root","");
mysql_select_db("dedecmsv57utf8sp1");
mysql_query('setnamesutf8');
$res=mysql_query($sql);
//替换.
$str=file_get_contents('mytest.htm');
$reg1='/^dede:
channel[.*]dede:
channel\}$/i'
preg_match_all($reg1,$str,$resarr2)
$reg='/field:
([a-zA-Z]+)\//i';
preg_match_all($reg,$resarr2[0],$resarr);
echo"
";";print_r($resarr);
echo"
$str2="";
//遍历$res
while($row=mysql_fetch_assoc($res)){
//echo"
";";//print_r($row);
//echo"
for($j=0;$j $str2.=$row[$resarr[1][$j]]; } } file_put_contents('index.htm',$str2); //根据$res和$str来实现输出index.htm静态 //到数据库去查询 //$res=array(array('1','电器'),array('2','方太电器')); 在字段标签中使用自定义函数: [field: 字段名function=’函数(@me)’/] 案例: 使用自定义函数在字段信息后添加一个hello,并返回 [field: typenamefunction='myfun1(@me)'/] 注意: myfun1这个函数要写到dedecms/include/extend.func.php中,同时dede标签不能嵌套使用 在字段标签中使用全局变量: 在dedecms/include/common.inc.php文件中定义了很多重要的全局变量的,我们可以使用dede标签进行引用 基本使用方法: {dede: global.全局变量名/} 如果需要在{dede}标签内部使用 [field: global.全局变量名/] 案例: ****如何在字段上使用自定义函数*********** [field: typenamefunction='myfun1(@me)'/] [field: global.cfg_softname/]-[field: global.my_global_val/] {/dede: channel} {dede: global.cfg_soft_lang/}--{dede: global.cfg_softname/} 32.网站首页面制作 删除default文件中dede自带所有文件,放入美工所有代码,包含CSS/JS/images文件。 此时在后台更新首页后,进入发现没有CSS样式,图片也没有,下一步就要用dede标签来替换首页路径 修改页面头关键代码 即在每一句css和js引入代码中添加dede标签,实质是在这里添加了一个dede全局变量,此变量在dedecms/include/common.inc.php中,就是自动生成了一下链接地址 接下里用编程工具中的替换把“images/改成"{dede: global.cfg_templets_skin/}/images/,注意前边“号,此为精准搜索,防止替换错误,在这样替换完成后,重新生成主页,就会完美显示主页 注意: 如果页面编码出现问题,修改页面meta信息为对应dede版本,如果还有问题则可以用记事本打开首页模板文件然后重新另存为,编码方式改为对应编码方式即可 33.网站栏目制作 目的是要将dede的栏目变为美工页面中的栏目 以下是顶级栏目不含有下拉子栏目的情况: 先规划一下类别,看那些栏目可以使用同一个类型也就是同一个内容模板,归类好后,创建一个内容模型,例如电影和电视剧都可归类为影视,然后再这一内容模型里创建对应栏目,在给这个栏目添加信息前考虑这个栏目下的内容模型页面都需要哪些字段,添加相应的字段,然后在为了配合使用先根据 建两个空的列表和文章模板文件,文件名用系统自动生成的 接下来修改首页模板文件使用channel标签,取出所有栏目 channel标签具体使用方法请参考手册 以下是顶级栏目含有下拉子栏目的情况: 注意: 顶级栏目含有子栏目的情况处理方法 先在dede后台给具体顶级栏目添加子栏目,同时设置相应模板文件,类似于顶级栏目的设置方法 注意在这里设置栏目排序 然后使用channelartlist标签来取出子栏目 这里在channelartlist标签中嵌套使用了channel标签,此处typeid表示顶级栏目的id号,一定要写成这种格式,type=’son’表示,此栏目为子栏目,具体channelartlist标签使用方法参考手册 注意: 不是一个网站中所有栏目都有下拉子栏目,在没有下拉子栏目的栏目下,我们就不需要再使用{dede: channeltype=’son’}这个标签了。 34.网站头文件的制作 在建站过程中,我们发现所有页面的logo,网站头以及导航条都是相同的,我们可以把功能相同那一段代码单独拿出来,放到head.html模板文件中来,同时在被拿掉的地方加入{dede: includefilename=’head.html’/}代码,这样我们只需要修改头文件,就可以改变所有页面的导航条。 同时我们会在
*********
field.seotitle/}标签,每个页面的标题我们会在对应栏目中这块地方填写,这样有助于seo优化
注意:
首页的头文件我们一般独立出来,设置成head0模板,首页不支持{dede:
field.seotitle/}标签使用,只能在head0中独立写入首页标题
include标签的具体使用方法请参考手册
35.导航条首页链接标签
在所有的导航条中都有一个首页链接,dede为我们提供了一个全局变量标签{dede:
global.cfg_cmsurl/}/我们只需要把这段链接加入到首页的标签中即可
36.首页面文章或新闻最新更新功能
取出信息功能用{dede:
arclist}标签,具体用法可参考手册,基本用法如下
{dede:
arclistflag='h'typeid=''row=''col=''titlelen=''infolen=''imgwidth=''imgheight=''listtype=''orderby=''keyword=''limit='0,1'}
arcurl/]'>[field: title/] {/dede: arclist} 一般情况下是在首页模板固定div块进行修改 其中示例网页中用
global,autoindex/]来实现数值的递增
在默认情况下,{dede:
arclist}标签内部不能取出对应附加表的信息,如果你希望取出附件表的信息,则{dede:
arclistchannelid=’x’addfields=”字段1,字段2”}
以上例子中,只有title可以在主表中也就是archives表中能找到,pfz和language信息都不能在主表中找到,只能在其对应附加表中找到,typeid=''栏目ID,在列表模板和档案模板中一般不需要指定,在首页模板中允许用","分开表示多个栏目,channelid指频道ID,limit='起始ID,记录数'(起始ID从0开始)表示限定的记录范围(如:
limit='1,2'表示从ID为1的记录开始,取2条记录)
{dede:
arclist}标签的底层原理就是执行了标签库中的arclist_lib.php文件,此文件根据标签信息读取了对应的数据库表并输出了结果
37.在{dede:
arclist}标签中嵌套{dede:
global.cfg_templets_skin/}标签时,会使其失去作用,只需要将其改为[field:
global.cfg_templets_skin/]即可
见第42条
38.dede:
arclist标签中limit=’0,8’不管实际文档中的ID号是多少,都是表示从最新发布的文档取出8条文档信息
注意:
在列表页我们一般使用row来确定显示多少行,而不使用limit,这两个标签冲突,会优先使用limit
39.取出文章中的头条信息
我们想在列表中取出文章中有头条标记的信息,则我们先需要在想要上头条的文章中做标记,如图
在勾选成功后,我们只需要在dede:
arclist标签中加上flag=’h’这个标记,即可让此列表中只显示头条信息,这实质就是在select语句中的where条件上加了一句flag=’h’而已,因为在dede_archieves表中就有一个flag信息
40.如何取出set字段信息
例如:
用户表
users
idnamefriendList
1aaa110,1123,2345,134115
需求:
请查询出好友有11号的人
select*fromuserswherefriendListlike‘%11%’;
不能用上边这句话,但可以使用mysql的find_in_set语句,此语句表示选出在表中的flag标记中有h的条目
select*fromdede_archiveswherefind_in_set('11',friendList)
find_in_set
select*fromdede_archiveswherefind_in_set('h',flag)
41.dede有{dede:
sql}标签同样可以实现{dede:
arclist}标签的功能,具体使用方法参见手册
{dede:
sqlsql=''}
[field:
title/]
{/dede}
具体案例:
此案例中的sql语句的含义为,给表dede_archives起名t1,给表dede_addonmovie起名t2,同时用左连接的方式相连接,连接条件为t1的id号等于t2的aid号,选择条件为t1表中flag字段为h,同时选择结果按字段pfz降序排列,选择内容为t1表中的title,litpic字段,t2表中的language,pfz字段
只要明白sql语句就可以用sql语句找出想要的东西,然后用[field:
字段名]来实现我们想要的功能
说明:
sql标签很灵活,如果有现成的标签可以解决问题,我们首先考虑使用现有的标签
42.
43.多种常用全局变量标签
44.注意:
在栏目列表模板中使用{dede:
arclist}标签的时候,就不要使用typeid,他会默认的使用对应的typeid
如果我们填上typeid号,则反而会固化程序,例如点电视剧页面和电影页面显示同一个东西
但是在首页,我们必须填写typeid号来确定所调用的栏目内容
45.让arclist取出具体的某个字段内容的方法。
在arclist标签中我们只能确定到取出某个栏目下的值,比如电影页面取出电影内容,电视剧页面取出电视剧内容,那么如果我们想在电影也面取出国语或者粤语电影,或者按地区取出电影内容,则我们就需要自定义一个在arclist中使用的标签,此标签可以给实质操作sql语句的arclist_lib.php文件中的select语句where属性添加条件
例如:
注意:
我们为了防止主表中和从表中都出现language字段,这样如果使用mywhere会报错,那么我们就需要将上述代码中的,language=‘’,改为addf.language=’’,这样就不会出现问题,参见实际处理的sql语句即可理解,因为其同时查阅了三张表,为了防止重复,就要加上这样的前缀
这个例子中我们自定义了一个mywhere属性,值为language=’国语’,要实现这个功能我们只需要在arclist_lib.php文件中的这块地方
添加下列语句
即可实现上述功能
此语句的含义为获取mywhere的值,并判断如果mywhere属性不为空则才将mywhere属性添加到select语句中的where条件后,这样可以做到兼容性,否则会彻底改变标签功能,导致不懂自定义mywhere属性的人使用arclist标签产生错误
46.序列化和反序列化的含义
serializeunserialize
php
classDog{
public$age;
public$name;
}
/*$dog1=newDog;
$dog1->age=4;
$dog1->name='小东';*/
//把对象保存到文件
//file_put_contents('d:
/dog.log',serialize($dog1));
//如何把文件中保存的对象,恢复回来.
//作用是可以把一个对象,保存到文件中,或者在网络上传输
//你可以在反序列化来取出数据
$dog1=unserialize(file_get_contents('d:
/dog.log'));
var_dump($dog1);
47.字段类型:
dedecms"多行文本"和"文本保存HTML数据"的区别
dedecms"多行文本"的字段直接存储在表里,而dedecms"文本保存HTML数据"的字段内容,则是以txt文件的格式存在data目录下。
所以在平时的文章内容页使用时我们应当使用“文本保存HTML数据”字段,以减轻数据库压力
48.文章列表页的实现
具体代码:
{dede:
arclistchannelid='16'row='6'infolen='100'}
30px;"> arcurl/]"> litpic/]"width="86"height="56"/> arcurl/]'>[field: title/] arcurl/]">[field: infos/] 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1