dedecms笔记一

说明:使用集成开发环境WAMP; 完成 a67 手机电影网的 70% 功能(静态页面全部仿照该网站);学习过程中会涉及到系统源码及数据库设计思想等
一、织梦CMS介绍
cms的基本概念:cms(content management system) 内容管理系统 ,主要是管理内容变化不大的数据(新闻,软件,商品,文章, 电影,视频....)。

主流的cms
dedecms [中小型网站,使用在企业级的网站不少见.]
phpcms [中型网站,对大型网站也很好.]
cmstop [据说对大型网站支持最好]

dedecms的特点
1.简单、实用,开源(源码.)
2.专门用于个人,中小型门户网站, 企业也可以支持
3.架构PHP+mysql
4.前台是静态页面(访问速度快) ->页面静态化技术


二、织梦CMS使用
1.dede的安装
1)先卸载apache和 mysql, 成功卸载(如果之前有安装过)
2)安装Wamp (该软件包括 apche+mysql+php+phpmyadminj),如果安装后,小的半圆式白色,说明成功!
3)把uploads 文件夹拷贝到 www目录
4)把uploads 改成 dedecms名字
5)浏览器中输入 http://localhost/dedecms/index.php
6)进入安装界面,记住吧 gd库打开,否则后面登录管理员界面不能成功!
7)指定admin的密码,然后看到如下界面
8)登录到dedecms的后台管理,先把 dedecms/dede  改成manage,然后http://localhost/dedecms/manage
9)当进入到管理页面后,需要做一个安全修改,强烈建议data/common.inc.php文件属性设置为644(Linux/Unix)或只读(NT)

2.快速入门:
需求:做一个文章管理系统,栏目(即类别)包括(武侠,爱情,音乐...),每个栏目有对应的文章,文章已经准备好,要求快速成型网站,就可以用到这种CMS来建立

2.织梦cms的初步了解

dedecms笔记一_第1张图片
织梦cms的设计者认为所有的数据(电影、商品、文章等)都属于一个模型【文章模型,商品模型,自定义模型等】
dedecms 设计使用垂直分割的技巧,支持前台页面静态化( 后台 -> 生成 -> 更新主页/栏目/文档 HTML)

现在我们添加一个顶级栏目,当我们增加一个栏目时,实际上在 dede数据库中有一张表 dede_arctype表中增加了一个记录
当你添加一篇文章后,其实就在 在 dede_archives  表中添加了记录,同时 在另外一张附加表 dede_addonarticle 中记录额外信息,
dede_archives被称为主表存储的是通用信息, dede_addonarticle(附加表)是文章模型特有的信息存储表,同样如果们增加其他模型,就需要增加其他的附加表。由于织梦支持全站的静态化,所以再有新内容添加的时候一定更新相关的页面和栏目,否则不会显示

可以使用phpMyAdmin来查看数据库中的数据表

在dede开发过程中,目前有四类表关系一览图
dedecms笔记一_第2张图片
 
思考题一下: 如果现在我们要做的是电子商务网站,卖我们的商品,这时用文章这样的形式来管理还合适吗?—> 每个栏目都可以指定一个内容模型
操作步骤:先看看dede是否已经提供了商品的模型,如果提供了,你直接使用,否则自己创建后台->核心->内容模型管理看看是否有,有就使用,步骤上面一样。

思考: 如果默认给的某个模型字段信息不够,怎么办?->自定义模型.
需求: 在添加某个商品的时候,我们希望多一个信息,就是付费方式,还希望多一个邮资信息,我们又该怎样处理?->引出修改内容模型的问题
操作步骤:
点击 核心->内容模型管理->商品修改->字段管理->添加新字段.
说明: 当你操作完毕后,就会在对应的 附件表中增加了一个对应的字段.

这里我们有一个问题,就是当你点击武侠,爱情,电器的时候,会找不到对应的页面,这是为什么呢?
这个就是直接点击 更新栏目HTML
说明: 我们设计网站前台的时候,可以参考这样一个思路: 网站分三级目录
首页面->栏目页->内容页

思考题:1. 栏目(类别)是保存在哪个表中的. 2. 一篇文章,一个商品它们最
终是存放在数据库中的哪些表中?
答: 栏目(类别)是保存在哪个表中的. dede_arctype;一篇文章,一个商品它们最终是存放在数据库中的哪些表中?
内容是分别放在两张表 ,一张是他的主表,该主表是通用 dede_archives , 附件表 dede_addonXXX.

在DEDE中增加内容的基本步骤是怎样?
(1)    找模型,如果有的话,你可以使用,但是你也可以自定义一些字段,你也全新的创建一个模型,比如: 我现在要搞一个电影网站.增加一个模型的步骤是:
a.点击核心->内容模型管理->增加新模型 , 进入页面后,自己看看就知道怎样添加了
说明: 当你增加一个模型后,就会在数据库中增加一个对应的 附件表 dede_addonXXX
(2)    添加一个栏目,根据你的实际情况来定, 刷新一把才看到
(3)    增加内容 ,根据实际情况输入即可

说明一下DEDE 的目录结构
dedecms/a 目录 用于存放生成的静态页面
dedecms/da ta 目录 用于存放临时文件和缓存文件
dedecms/images 目录 用于存放dede自己的图片
dedecms/include 目录 核心类库(标签库,操作图像的类,操作数据库的类)
dedecms/install  目录,安装信息
dedecms/manage 目录,存放后台管理程序
dedecms/member 目录,存放会员管理程序
dedecms/plus  目录,存放插件程序,和将来你开发的程序模块
dedecms/templates 目录,存放dede前台的所有模板文件
dedecms/uploads 目录,存放你上传的图片、视频。。

知识点: 如何去找某个栏目的列表页
后台->网站栏目管理->找到对应的栏目->更新->高级选项->
dedecms笔记一_第3张图片
修改相应的模版文件页面样式就会有所变化, 每个栏目属于一个模型,那么他们对应的栏目列表模板是同一个,修改后,就同时收到影响

dede的标签问题如何去查阅标签手册  后台->模板->默认模板管理->点一个修改(可以看到参考标签

dedecms笔记一_第4张图片


dede标签的讲解(dede 的标签是在 模板中使用,我们可以建立自己的模板文件,来学习各个标签的使用)
1)单标签
用法
{dede:标签名 属性=“值” .../}
举例说明:
{dede:include filename=”head.htm”/}

2)双标签
用法
{dede:标签名 属性=”值”....}内容{/dede:标签名}
{dede:标签名 属性=”值”....}内容{/dede}
举例说明:
channel标签的用法.
<!--channel标签类似 select * from dede_arctype  where ishidden<>1 limit 0,8-->
{dede:channel  type='top'  row='8'}
[field:typename/]
{/dede:channel}
知识点: 如何去查看channel标签的源码. /dedecms/include/taglib/channel.lib.php

3)字段标签的用法
举例
<!--channel标签类似 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, 8 -->
{dede:channel  type='top'  row='8'}
<!--field:typename就是说,把查询的字段typename信息放在这个位置  -->
[field:id/]=[field:typename/]
{/dede:channel}

需求: 如果,我们希望把取出的某个字段数据,进行处理,在输入,怎么办?
具体: 对取出typename值,进行md5加密
具体使用如下:
{dede:channel  type='top'  row='8'}
<!--field:typename就是说,把查询的字段typename信息放在这个位置  -->
[field:id/]=[field:typename/]==
<!--如何对取出的字段值,使用php函数 @me就是表示取出的值-->
[field:typename function='md5(@me)'/]
{/dede:channel}

4)怎样把取出的值进行PHP运行
[field:字段名 runphp=”yes”]
这里可以写一些简单的php码(这里的php码一般是比较简单,如果复杂则可以写一个自定义函数来处理.)
[/field:字段名]

5)如何自定义函数
首先在  /include/extend.fuc.php 中添加自己的函数
/*
我们自定义的函数
*/
function abc($val){
    return $val."hello,world";
}
看看怎么使用
<!--如何在dede中自定义函数,把typename值拼接 hello,world并返回-->
[field:typename function="abc(@me)"/]
注意: dede的标签是不可以嵌套使用,否则出问题.

6)dede标签如何调用全局的变量值
用法是
{dede:global.全局变量名/}

思想: 很多的项目,为了开发的方便,把一些常用的变量,做成全局,然后使用使用比较方便, dede的有一个非常重要的文件. include/common.inc.php文件,中有很多全局值.

因为dede的标签是不可以嵌套,所以,如果你要在dede标签中,取出全局变量,则应当这样取
[field:global.全局变量名/]  等价于 [field:global name=’全局变量名’/]
举例
[field:global.cfg_soft_lang/] 

三、a67 手机电影网的开发实战
1 把dede首页面换成 a67网站首页面,步骤:
a.首先把 templates/defualt 备份一份
b.把templates/defualt 清空
c.把a67 的首页.html 和 images css js 整体拷贝到 templates/default下,
d.首页.html 换成 index.htm
e.打开 index.htm 进行网页编码,css,js引入,images图片路径修
g. 更新首页面,浏览即可看到最新的a67 首页.
将dede首页面栏目换成a67电影网的首页面栏目
a.创建电影这个内容模型
b.创建我们的栏目(我的电影、我的电视剧)
c.使用dede 标签,在 index.htm 模板中,把我们需要的栏目内容取出
{dede:channel}..{/dede:channel}具体的代码是:
        <ul>
                <li><a href="http://www.a67.com/" target="_self">首页</a></li>
                {dede:channel type="top" row="8"}
                <li><a href="http://www.a67.com/movie/" title="手机电影" target="_self">
                [field:typename /]
                </a></li>
                {/dede:channel}
                <li><a href="http://www.a67.com/zhuanti/" target="_blank">专题</a></li>
            </ul>
2.修改 a67 网的栏目列表页面,步骤:
a.先把不必要的栏目先删除.
b.看看电影的模型对应的列表模板文件叫什么名字,然后在 templates/defualt 目录下创建一个空的  list_movie.htm 名字.
c.更新栏目HTML
d.更改首页面的栏目的超链接,让它指向直接的列表静态页
这里在首页面模板中 href 这样写
<!-- select 列表 from dede_arctype ...-->
                {dede:channel type="top" row="8"}
                <!--大家注意typelink并不是dede_arctype表的字段,他是在程序计算得到-->
                <li><a href="http://zqbgds.blog.163.com/blog/[field:typelink/]" title="手机电影" target="_self">
                [field:typename /]
                </a></li>
                {/dede:channel}
e.把a67的栏目列表模板文件拷贝到 templates/default 名字,是list_movie.htm然后做网站编码,资源引入(css/js), 图片的路径的替换,这个和首页面是一样.
f.把栏目的导航,的首页面改成我们的本地.

a67网的首页的添加我的电视剧,并完成各个栏目对应的列表页
dedecms笔记一_第5张图片
当我们点击我的电视剧时,就显示电视剧内容,点击电影就显示电影的内容.
步骤如下:
1.找到对应的栏目列表模板文件 list_movie.html .做修改

问题:如何 按照自己希望的顺序来显示我们的栏目
思路:
{dede:channel} 如果可以接受我们传递的某个数据,然后,我们再在 channel.lib.classs 文件中进行处理好?
{dede:channel orderby=”id”}

处理方法是,可以再channel.lib.class 中进行二次处理
//使用调式
dedecms笔记一_第6张图片
继续这个问题: 比如我点击我的电影,只取出国语电影,怎么办?
思考: 因为电影列表是通过 {dede:arclist} 取出,因此,我们必须考虑 {dede:arclist}进行二次开发?
步骤:
1. 找到栏目列表模板文件 list_movie.htm
2. 我们在{dede:arclist } 标签中自定义一个属性 hspwhere
前台调用方法是: list_movie.htm
dedecms笔记一_第7张图片

后台的标签库的添加码是:

dedecms笔记一_第8张图片
 
a67网的主页面和栏目列表的今日更新,点击后进入内容页面
dedecms笔记一_第9张图片
思路:
找到内容页的模板文件.
后台->核心->栏目列表->点击某个栏目->高级选项
发现 电影和电视剧用的文章模板是 article_movie.htm
步骤:
1.把 美工提供的 电影内容.htm  拷贝到 article_movie.htm
2.对模板做 网页编码,资源引入,图片的路径进行修改
3.重新生成内容页
4.修改了首页面模板文件 index.htm
dedecms笔记一_第10张图片
对article_movie.htm进行处理,取出对应的数据.
这里有一个新的知识点,如何在内容页中取出对应记录(电影、电视剧)的字段信息.
方法是 {dede:field.字段名 /} 说明这个字段,可以是主表的字段,也可以是附加表字段
面包屑导航标签使用的方法:{dede:field.position/}{dede:field.title/}

a67网的内容页面增加统计浏览量的功能
首先,我们看看dede自己怎么做的!!!
<li>浏览量: <script src="http://zqbgds.blog.163.com/blog/{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id'/}&mid={dede:field name='mid'/}" type='text/javas cript' language="javas cript"></script></li>
这里我们需要学习一个新的知识点:
如何写自己的程序(插件),去操作dede 的后台数据库的表->
现在我们自己写一个函数,使用Dede 的 DedeSql 类的一个全局变量 $dsql
这里我们学习一招技术,如果在一个静态页面中,有部分数据是 动态,可以自己写一个PHP文件,该文件,一般是放在 /puls/目录下,比如 mysql.php

dedecms笔记一_第11张图片
 
然后在你的某个模板文件中这样取调用:
dedecms笔记一_第12张图片
 
练习题1:
dedecms笔记一_第13张图片
思路
1.    通过jquery技术来实现,看上图
步骤:
1.article_movie.htm  引入jquery 文件.
 <script type="text/javas cript" src="http://zqbgds.blog.163.com/blog/{dede:global.cfg_templets_skin}/js/jquery-1.4.2.min.js"></script>
2.    编写 js 代码,来响应鼠标移动到星星上这个事件.
代码:
dedecms笔记一_第14张图片
 

练习题2:
dedecms笔记一_第15张图片
思路: 先找到代码,然后修改.list_movie.htm
dedecms笔记一_第16张图片
 
练习题3:
dedecms笔记一_第17张图片
需求: 如何取出下载地址(动态改变,当后台变化,下载链接也变化)
思路: 因为下载地址是有多个,而且是变化,因此没有办法给每个下载地址存放一个字段,我们可以这样想, 我们把所以的下载地址(信息),放入到一个字段中 varchar(1024), 然后使用处理函数来灵活的处理
下载地址(信息) 存放到 数据库的附加表 增加一个字段 download, 存放下载地址(信息)
下面的格式是我自定义的,在开发中根据项目经理定
3gp|魔侠传之唐吉可德01|176x144|http://www.xunlei.com/01.3gp
3gp|魔侠传之唐吉可德02|176x144|http://www.xunlei.com/02.3gp
3gp|魔侠传之唐吉可德03|176x144|http://www.xunlei.com/03.3gp
mp4|魔侠传之唐吉可德01|176x400|http://www.xunlei.com/01.mp4
mp4|魔侠传之唐吉可德02|176x400|http://www.xunlei.com/02.mp4
步骤:
1.    首先在 附件表中增加一个download 字段
2.    把下载的整个网页格式,放在一个函数去处理
函数 plus/extend.func.php

dedecms笔记一_第18张图片
我们把各个格式的电影的下载地址取出,并显示.
在我们的函数 format中增加了代码:
dedecms笔记一_第19张图片
 


需求是: 当某个用户评分后,在内容页实时的显示评分值
dedecms笔记一_第20张图片
思路: 首先,需要给每颗星星绑定click事件,然后在 article_movie.htm 添加代码
dedecms笔记一_第21张图片
后台在 plus/pinfen.php代码如下  :
dedecms笔记一_第22张图片
这里有一个思考题:
当我们刷新页面的时候,评分值有回到原来的值,怎么办?
原因是 因为分值,我们使用的是
<font id="rank">{dede:field.pfz/}</font>分
换成一段js码,动态的请求数据即可.
<script src="http://zqbgds.blog.163.com/blog/{dede:field name='phpurl'/}/pinfen.php?type=getfen&id={dede:field name='id'/}" type='text/javas cript' language="javas cript"></script>

对应的pinfen.php 文件的内容是:
<?php
require_on ce (dirname(__FILE__)."/../include/common.inc.php");

// extract($_GET);
//$type=$_GET[]

//这里去完成评分任务

//$pfz=$_GET['pfz'];
//$aid=$_GET['id'];

if($type=="getfen"){

$sql="SELECT pfz from dede_addonmovie  where aid=$id ";
//file_put_contents("d:/mylog.txt",$sql);
$row=$dsql->GetOne($sql);


 if(is_array($row))
    {
        echo "document.write('".$row['pfz']."');\r\n";
    }


}else if($type=="pinfen"){

$sql="UPDATE dede_addonmovie set pfz=$pfz where aid=$id";
$dsql->ExecuteNoneQuery($sql);
//更新成功后,我们需要计算这个评分值.我简化为以最后一个评分为准
$sql="SELECT pfz from dede_addonmovie  where aid=$id ";
//取出数据库中的值,这里在工作时,需要看源码或者看手册.
$row=$dsql->GetOne($sql);
//这里通过 $row[0]
//返回结果.
echo $pfz;
}

//echo "hello";
//file_put_contents("d:/hsp.log",$sql);
?>

你可能感兴趣的:(JavaScript,PHP,dedecms)