韩顺平dedecms讲解上课记录

感谢韩顺平:

如何打开php的gd库,通过php设置-》php扩展--》phpdb库;打上勾就行;

dede存在四张十分重要的表,channeltype,模型表最原始的发源
arctype:每条记录是一个栏目是发源表2

archives:内容主表是:是发源表3属于一个文章或者电影的主要内容信息

addonarticle:这是附加表,就是每篇文章,或者电影都有自己特色信息在这里填写

模型的具体体现就是主表和附加表,主表是不能动的,所以在内容模型中增加一个字段
实际上是在附加表中增加一个字段,这里是调用aler更改表这个命令,其实arctype就是模型到主表和附加表的过度表

增加字段在底层实际上这样运行的:

<?php
$conn=mysql_connect("localhost","root","");
mysql_select_db("dedecmsv57utf8sp1");

$sql="alter table dede_addonshop add post_mode default ...";

增加一个模型,其实就是在最原始的模型表中增加一个记录
并且增加一张与之对应的附加表

a目录下面都是所有的静态页面:data:用于存放临时文件和缓存文件
images用于存放dede自己的图片
dedecms/include目录 核心类库(标签库,操作图像的库)
里面有一个taglib文件夹,里面有很多标签需要自己学习,这是公司自己定义
dedecms/install目录:存放安装信息,删除install_lock.txt删除就可以重新安装
dedecms/manage:就是后台的文件,每天啃一点
dedecms/members:会员管理程序,将来的重点,权限,级别,可读可写,
dedecms/plus:插件,或者自己写,模块
dedecms/templates:存放dede前台的所有模板文件
dedecms/uploads:存放上传的文件,按照时间存放

查找标签的用法:
后台-》模板-》默认模板管理-》点击修改

可以看到参考的标签
去掉广告的办法:在模板首页面中查找myad标签和head.htm中查找myad将所在div全部删掉然后生成首页的静态文件就行!

列表页是针对栏目而言的,而不是针对模型而言的。每个栏目对应一个列表页

{商品有自己的列表页面}这个在后台的栏目管理中可以查询得到
index_shop.htm:封面模板
list_shop.htm:列表模板不只是文章列表还是商品列表
article_shop.htm:文章模板不只是文章内容还是商品详情
所以单独的栏目的广告没有去掉需要在这里面删除!

每个栏目属于一个模型,那么他们对应的栏目列表模板是同一个
这个可以后台栏目管理可以看出,然后看高级选项,里面可以看出
对应列表模板!

后台里面的生成中可以看主页的html模板是index.htm
所以我们将index.htm备份,然后自己设置一个test.htm来测试自己学习
标签!

怎么样将模板文件转化成静态,这是哪个程序控制的
我们可以通过抓包来确定那个文件来处理的,就是看
它是向哪个文件发出请求!
结果发现:manage/makehtml_homepage.php

我们在这个文件中可以通过这个命令进行调试:
else if($dopost=="make")
{
die("信息=".$templet);
这里就可以可以输出信息,花上半天的时间就可以调试的差不多了!
也可以通过这种方式进行调试
file_put_contents("d:/mylog.txt",$dopost);

用法:
{dede:标签名 属性="值" ../}
举例说明:
{dede:include filename="head.htm" /}
下面的双标签!:
{dede:channel type="top" row="8"}..{/dede:channel}
{dede:channel type="top" row="8"}..{/dede}有时候可以这样封闭!

channel标签实际上是取得栏目这个表中的记录!

可以查看dede源码就可以对dede进行二次开发了
知识点:如何查看channel标签的源码:/dedecms/include/taglib/channel.lib.php

#@_arctype表示#@表示dede系统的前缀!

这里就是调试php的标签的内部代码:

if($type=='top')
{
$sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `#@__arctype` WHERE reid=0 And ishidden<>1 order by sortrank asc limit 0, $line ";
die("sql=".$sql);
}
下面的die是可以进行调试的
可以看出上面就是sql语句,那么我们可以通过拼接点sql语句进行有条件的查询
或者我们自定义属性,然后拼接到sql语句中进行查询!

安全性:需要把dede这个目录更改成manage,这样会更加安全,别人不知道我使用的开源是dedecms;

全局变量定义在include/common.inc.php文件中,而且都是现算出来的!

dede的标签是不能够嵌套的
但是如果需要在dede标签中取得全局变量该怎么办?
应该将原始的取法:{dede:global.cfg_soft_lang/}
更改成[field:global.cfg_soft_lang/]等价[field:global name='全局变量'/]

在更新栏目的时候生成栏目的html的时候需要将隐藏的文章都删除,以为之前将模板
都删除了,如果不删除没有模板的栏目就会报错的!

栏目管理中的--》增加栏目--》高级选项中可以看到模板!
在标签库中可以看到taglib/channel.lib.php中看到
typelink=typeurl是在程序中计算得到的!

<!-- flag参数表示是否设置头条,或者是否置顶-->
{dede:arclist flag='h,p'}
{/dede:arclist}
h和p可以以分号隔开!

channelid='18' addfields='language'

select t1.litpic,t2.language,t2.pfz,t1.title from dede_archives t1,dede_addonmovie t2 where t1.typeid=7 AND t1.id=t2.aid

<!--{dede:arclist flag='h' channelid='18' addfields='language,pfz' typeid='7' limit='0,5'}-->

<!--{/dede:arclist}-->

select t1.litpic t2.language,t2.pfz,t1.title from dede_archives t1,dede_addonmovie t2 where t1.typeid=7 AND t1.id=t2.aid AND t1.arcrank=0

<!-- flag参数表示是否设置头条,或者是否置顶-->

{dede:sql sql='select t1.litpic,t2.language,t2.pfz,t1.title from dede_archives t1,dede_addonmovie t2 where t1.typeid=7 AND t1.id=t2.aid AND t1.arcrank=0 order by t1.click asc'}
<li class="c[field:global.autoindex/]"><a href="http://www.a67.com/movie/7989" target="_blank"><img src="[field:litpic/]" alt="爱情维修站 3GP MP4高清下载" /></a><p>
[field:language/]
</p><b><a href="http://www.a67.com/movie/7989" target="_blank">
[field:title/]
</a><img src="[field:global name='cfg_templets_skin'/]/images/1.jpg"><em>[field:pfz/]分</em></b></li>
{/dede:sql}
注意:查询字段之间需要用逗号隔开!

349 西北工业

下面的就是:
SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath ,addf.language,addf.pfz FROM `#@__archives` arc
LEFT JOIN `#@__arctype` tp on arc.typeid=tp.id LEFT JOIN `dede_addonmovie` addf ON addf.aid = arc.id WHERE
arc.typeid IN (7) And arc.channel = '18' And arc.arcrank > -1 ORDER BY arc.sortrank desc LIMIT 0,5

需要拼接where条件就想办法在orderby的前面进行拼接一点where条件!
addf.language='国语'

下面的可以拼接多个条件:

<div class="movie_list">
<!--dede:arclist对于这个标签,如果你不写typeid,在栏目模板文件中会自动根据点击的栏目就会带一个typeid-->
{dede:arclist hspwhere=" addf.language='国语' AND addf.area="channelid='18' addfields='language,pfz'limit='0,5'}
<li class="d[field:global.autoindex/]"><a href="http://www.a67.com/movie/7989" target="_blank"><img src="[field:litpic/]" alt="爱情维修站 3GP MP4高清下载" /></a><p>[field:language/]</p><b><a href="http://www.a67.com/movie/7989" target="_blank">[field:title/]</a><img src="[field:global name='cfg_templets_skin'/]/images/1.jpg"><em>[field:pfz/]分</em></b></li>
{/dede:arclist}
</div>
可以拼接多个条件按照大陆,等等条件进行排序!

面包屑:
<div class="weizhi">当前位置:{dede:field.position/}{dede:field.title/}</div>

<script src="{dede:field name='phpurl'/}/mysql.php?aid={dede:field name='id'/}&type=update&$num=10"type='text/javascript'
language="javascript"></script>

<?php
//这里我们require_once common.inc.php目的是为了使用该文件中定义好的全局变量
require_once(dirname(__FILE__)."/../include/common.inc.php");

$type=$_GET['type'];
$nums=$_GET['num'];
$aid=$_GET['aid'];

if($type=='update'){

$sql="UPDATE dede_archives SET click=click+50 WHERE id=7";
file_put_contents("d:\\aab.log",$sql);
$dsql->ExecuteNoneQuery($sql);
echo "document.write('hello');\r\n";

}

include\datalistcp.class.php里面有一个pageSize可以设置,而且这个文件对应的所有页面dede标签是可以嵌套的!

建立数据库的时候增加一个表,由于设置了存储引擎导致创建失败
解决办法是:去掉引擎设置和编码设置,建立成功后再在操作中设置引起和编码格式的设置就会成功:

create table comments(

id int unsigned primary key auto_increment,

userid mediumint(8) unsigned not null default 0,

title varchar(128) not null default '',

content longtext not null default '',

addtime int unsigned not null default 0,

movieid mediumint(8) unsigned not null default 0

)type=MyISAM default charset=utf8;

评论的网址:
http://dedecms.com/pinglun/index.php?c=pinglun&a=listpl&aid=13

如果是评分值就可以设置deciml,这样不会像float造成精度丢失,也不会像varchar一样一位位的比较,导致判断大小的失误!

SELECT * FROM dede_archives WHERE 1;
函数FROM_UNIXTIME(pubdate,'%Y-%m-%d')就是将时间戳转化成指定的格式;

select * from FROM_UNIXTIME(pubdate,'%Y-%m-%d') from dede_archives

下面集中解决昨日更新功能:
1.返回现在的年月日:
select curdate() from dede_archives;
2.当前日期减去一天的时间即返回前一天的年月日:
select date_sub(curdate(),interval 1 day) from dede_archives;
3.查询更新日期等于前一天的所有的记录就是跟第二条的时间相等就列出所有的记录:
select * from dede_archives where FROM_UNIXTIME(pubdate,'%Y-%m-%d')=date_sub(curdate(),interval 7 day);

1456488910
查询前一天的记录:
select date_sub(curdate(),interval 1 day) from dede_archives;
上面全部查的昨天的记录!

select * from dede_archives where FROM_UNITIME(pubdate,'%Y-%m-%d')=date_sub(curdate(),interval 3 day) from dede_archives

昨日更新的最终代码:
<li><span><a href="#" target="_blank">昨天更新</a> |</span>
{dede:arclist hspwhere="FROM_UNIXTIME(pubdate,'%Y-%m-%d')=date_sub(curdate(),interval 7 day)" limit='0,10'}
<a href="#" target="_blank">[field:title/]</a>
{/dede:arclist}

---------------
http://www.a67.com/movie/p.2
http://www.a67.com/movie/434548

{dede:trim replace=''}<a([^>]*)>{/dede:trim}
{dede:trim replace=''}</a>{/dede:trim}
就是将超链接的符号去掉:trim就是修剪的意思,将能够匹配的都去掉
其中[^>]*表示超链接非介绍标签所有匹配,dede标签{/dede:trim}就是去掉超链接

上一篇:深入浅出Symfony2 - 如何提高网站响应速度 [转]


下一篇:爬虫之Scrapy详解