• 19
  • Dec

柏拉图在admin5的讲座,主讲如下:

如果方便的,都把QQ群的窗口开为全屏,那本来我今天是要全面讲述dede一些中级应用的问题的,不过恐怕时间有限,只能讲一部份,所以大家在我没发问的时候尽量安静一点

DedeCms是什么,这里我就不多说了,因为会在这里听DedeCms使用技巧的应该都明白它是什么东西了,大家在网上搜索某些资料,可能一不小心进去的某个站就是用DedeCms开发的。

由于这个讲座是中级教程,因此太基本的的东西我就不讲了,那么由于不少人对安装Dedecms的环境是有些问题的,我在这里说一下

在DedeCms V5之前的版本安装很简单,同意使用协议后,填写一些基本资料后,点击安装就能马上完成安装,在V5版本中,还有一个比较完善的系统环境检查的页面,如果你们用的是windows主机,一般默认配置下安装DedeCms就很简单的完成了

安装时出现问题的,一般是如下两点导致:
(1) 在 Windows 环境中,基本上什么都不用管,知道MySQL数据库的用户名、密码即可,如果是虚拟主机的,需要指定数据库名。至于可能出现的安全模式警告,在Win主机是可以忽略的。
(2) Linux/UNIX:很多人都抱怨Dedecms在 Linux 系统中存在不兼容,其实主要是大家对Linux不理解所造成的,特别是DedeCmsV5,模块是可选的,而如目录权限不适合,在Linux中可能引发很多错误。

在 Linux 系统中,主要需要注意的问题如下:
A、安全模式的空间,在 Dedecms V4中,曾经尝试过使用FTP模式创建目录解决在 Linux 安全模式的问题,不过后来发现,很多地方是不可行的,而且处理过于复杂,所以在新版中很多地方都没考虑此问题,简单的来说就是在DedeCms是不支持在Linux中使用安全模式的空间的。

B、关于目录权限,DedeCms V5默认的操作目录的权限是 0755,这个值是固定的,使用这个值的原因是大多数虚拟主机默认都是这个权限,要修改它必须安装前在 install/config_base.php 中更改(搜索 $cfg_dir_purview = 0755; ),对于安装时创建模块文件失败的用户,可以尝试一下自己的空间是否支持 0766、0666 这两种权限,此外还必须注意的是,网站的根目录是必须赋以 0755 或 0766 的权限的,否则可能产生未知错误。

有些空间是不能用 0777 的,可以尝试改为其它可用的权限
Linux 的权限模式是
  自己  组  化众
读 4
写 2
运 1
所以一般主要自己的权限有 7 就比较适合
这个在未来的 V5.1 版本我们会详细的提示用户,不过有一点目前架构是不可行的,就是安全模式的Linux空间

如果用 0666 的模式,大多数情况是可以的,就怕运行不了一些PHP脚本

那在安装方面的问题大体上就是这点需要注意的,下面我说一下模板的问题

DedeCms 的模块是区别其它CMS最特别的地方,因为 DedeCms使用类似xml的标签风格,可以在模板中对标记指定不同的属性就能改变标签的样式,这样和其它CMS的模板相比,不需要过多的依赖数据库,从而更容易实现模板的共享。如果你是从其它CMS转过来的,可能一开始会觉得DedeCms的模板有点不习惯,因为很多CMS的一些什么调用都是在后台设置一些参数来改变标签风格的,但DedeCms却是直接在模板里改,但用习惯了会发现DedeCms的模板确实很“黄”,很强大。

打错字, DedeCms 的模块是区别其它CMS最特别的地方 -> DedeCms 的模板是区别其它CMS最特别的地方
那首先讲一下基本的东西

1、在这XHTML当道的天下,可能大家都知道,XML有一个特点,就是标记 <img ….></img> ,使用简写模式就是 <img … />,实际上在这方面 DedeCms也是一致的。
例如:对于标记{dede:field name=’title’}{/dede:field}写成{dede:field name=’title’ /}作用也是一样的。
不过使用 {dede:field name=’title’}{/dede:field} 这种形式的,需要注意一个问题,很多 DedeCms标记是支持 Innertext 的(就是指支持在

{dede:…} Innertext {/dede:…} 标记中间的地方使用一些特定的标记来表示循环单条记录中使用的样式,或执行一段特定的PHP代码),因此对于可以使用 Innertext的标记,要么写为简写模式,要么标记中间不要留有空格,否则可能会使标记无法正常显示。

那么下面我们通过实操去学习 DedeCms 模板的特点
大家现在登录到 DedeCms 的后台(3.0以上的版本),找到“模板管理->全局标记测试”的地方,那么下面通过一一实操来介绍织梦模板的特性,从而让大家知道DedeCms模板为什么很强大+很暴力。

大家登录进测试用的dedecms,最好是有数据的个人网站的管理后台

找到“模板管理->全局标记测试”的地方

下面是这个测试标记的页面的界面
那么先来测试一下长短标记的区别

模板代码:
我是短标记: {dede:global name=’cfg_webname’ /} <hr>
我是完整标记:{dede:global name=’cfg_webname’}{/dede:global}
结果:
——————————————————————————–
我是短标记: 织梦内容管理系统
——————————————————————————–
我是完整标记:织梦内容管理系统

知道这个在线标签测试的东西怎么用之后,我现在开始系统讲述 DedeCms 模板标签的应用与技巧。

DedeCms标签主要分三种用途,一种是通用的标签,就是在Dedecms模型核心都能调用的标签,也叫板块模板标签,在这里能测试到的也是这种标签;第二种是列表标签,即是在栏目列表页使用的标签;第三种是文档标签,对于文章模型而言,就是文章显示页的模板所使用的标签,这类标签通常是字段的不同,在这章节的最后面,我也会说一下关于织梦模型机制与模板的关系。

DedeCms 的模板有三大特点:
(1) DedeCms 模板特点之一:模板与程序完全分离,方便用户共享模板。
(2) DedeCms 模板特点之二:支持底层模板。
(3) DedeCms 模板特点之三:支持简单编程。

那么先说第一点

DedeCms 模板默认存放目录是在“Dede根/templets/default”文件夹,
其中 templets 这目录名是固定的,一般建议不要更改, 如果你要保护自己的模板,可以在后台“系统管理->系统变量配置->其它设置”,找到“模板默认风格”
这一项,把”default”改为其它名称,当然同时你要手工改动“templets/default”这文件夹为你把指定的那个名称,对于你下载回来的模板,也可以把下载的模板的default目录改为其它名称,然后在系统变量中把“模板默认风格”改成这个名称,你就能使用下载回来的模板。
小提示:网上下载的模板一般不大可能100%模型的风格都制作的,很可能是只修改了几个常用的模型风格,因此使用下载回来的风格要先备份旧风格,然后用不覆盖的模式把旧风格里的文件追加进下载回来的模板文件中,以确保风格文件夹文件完整。

这个可能在这里的用户一般都懂的了,因为这个比较简单

下面我详细解析一下“底层模板”,它是很有用的东西

DedeCms 模板有一个很重要的概念,那就是底层模板(Innertext),底层模板实际上就是对于有多条记录的模板输出,用户手工去指定单个记录的样式。
    因为这个概念很虚线,那么这个地方还是通过实践去说明吧。
    大家在标签测试的地方输入:
这是使用默认底层模板的标签:{dede:arclist row=10}{/dede:arclist} <hr>
这是手工指定底层模板的标签:
{dede:arclist row=5}
◆ <a href=’[field:arcurl/]’>[field:title /]</a> 点击:[field:click/] <br />
{/dede:arclist}

Henrich 反应很快,那个也看出
{dede:arclist row=10}{/dede:arclist}
{dede:arclist row=5}
◆ <a href=’[field:arcurl/]’>[field:title /]</a> 点击:[field:click/] <br />
{/dede:arclist}

两个标记在用了底层模板和不用的区别了

有一点需注意的是,在没有指定底层模板(Innettext)的时候,系统一般调用 templets/system 里的相应该文件作为底层模板

例如: {dede:arclist row=10}{/dede:arclist} 它实际由系统默认调用了 templets/system/part_arclist.htm 这文件的东西作为底层模板

这文件的内容是  ·<a href=”[field:filename /]”>[field:title /]</a><br/>

那么 {dede:arclist row=10}{/dede:arclist}
就等同于
{dede:arclist row=10}·<a href=”[field:filename /]”>[field:title /]</a><br/>{/dede:arclist}

既能用短标记,也能直接定义样式,又不依赖数据库,这是dedecms模板和其它模板的最大区别

在标记之间 [field:…/] 这些就是底层模板变量,这些标记一般也是属于 Dedecms 标签的模式,只是 { … } 符号改为了 [ … ],因此底层模板中的标签也是具有DedeCms标签的特性的,例如,在底层模板中使用 [field:global name=’cfg_webname’/] 同样可以表示全局变量 $cfg_webname。

这些底层模板变量大多数是数据库里的具体字段,当然有一部份做过处理

具体哪些标记可以用Innertext,那些不可以用,可以在

http://www.dedecms.com/archives/templethelp/help/index.htm
这页面参考

在此我简单介绍一下常用的 arclist 标记的底层模板字段及意义

arclist的底层模板字段实际上是对应相应该的主索引表的,在文档模板中则对应该主表和附加表,主表字段是一样的,我等会介绍一下,附加表的可以在模型里找

arclist常用的字段有
ID(同 id),
title(标题),
color,
typeid(栏目ID),
description(摘要,同 info),
writer(作者),
shorttitle(短标题),
memberid(会员ID),
pubdate(发布时间),
click,
litpic(缩图图,同 picname),
typename(栏目名称),
arcurl(网址,同 filename),
typeurl(栏目网址)

stime(pubdate 的”0000-00-00″格式,等同于[field:pubdate function=”strftime(’%y-%m-%d’,@me)”/]),
textlink(等同<a href=’[field:arcurl /]’>[field:title/]</a>),
typelink(等同<a href=’[field:arcurl /]’>[field:title/]</a>),,
imglink(等同<a href=’[field:arcurl /]’><img src=’[field:picname/]’ border=’0′></a>),
image(等同<img src=’[field:picname/]’>),

大家需注意的一个问题是:[field:标记名称/]这种写法是仅在底层模板中才用的

在文档模板中,字段是用 {dede:field name=’title’/}这样形式表示的

不过在一种特殊的情况下,Innertext是无效的,就是指定了 runphp=’yes’ 属性,下面我就说一下关于在DedeCms标签进行简单编程的情况,这也是DedeCms标签的特点之一。

对DedeCms的模板标记进行扩展,除了直接修改程序以后,对于普通用户而言,最简单的方法就是对标签进行有限编程。
DedeCms里对标签进行编程扩展有两种可用模式:
A、function 扩展
B、在Innertext中直接编程

那么首先说 A、function 扩展

在标记中,可以使用 {dede:标记名称 function=”函数名(@me,其它参数)” /}这样模式对标记的值进行处理,其中 @me 就是表示标记当前的值,最终获得的结果是这个函数返回的值。
    大家不妨测试一下下面这个标签:

{dede:global function=”file_get_contents(’ http://www.baidu.com’)” /}

如果要测试代码的,请禁用QQ的转义符,否则就有可能出错的

下面再举个实用的例子

这里举个实用的例子:
{dede:arclist row=5}

<a href=’[field:arcurl/]’>[field:title /]</a>
[field:pubdate function=”strftime(’%y-%m-%d %H:%M’,@me);”/]<br />
{/dede:arclist}

测试一下

大家没有有注意一下问题{dede:xx/}和[field:xxx/}都支持function扩展

实际上 [field:xxx/] 这种模式也是dede标签解析器解析的,所以作用一样,它只是把 dede 换成 field { 换成 [
在这里,function 属性的 function 不仅是用PHP自带的,用自己定义的也行

不过要注意function的格式,自定义的function不能用echo这样的输出,而是返回一个字符串,这样就行了

写好的函数放入 include/inc_channel_unit_functions.php 文件,因为dede核心都会调用这个文件

这里举个简单的函数
function testMyFunc($str){

return $str.” 增加了我的东西哦!”;
}
在标签中使用
{dede:global name=’cfg_webname’ function=’testMyFunc(@me)’/}

用function扩展的好处是既可以增强系统的功能,又保持标记的简洁

下面介绍的是另一种扩展 B、在Innertext中直接编程

这种方式和function编程的不同之处是,你可以把PHP代码直接写入到标签的底层模板代码的地方,不过需要注意的是,在这里的PHP代码并非完全意义上的PHP代码,它必须符合Dede限定的格式,即是最终返回值返回到 @me 变量中,同样的是用 @me 表示标记的最初的值。
使用格式: {dede:标记名称 runphp=yes}PHP代码{/dede:标记名称}

大家测试一下这个代码:
{dede:global name=’cfg_webname’ runphp=’yes’}
$baidu = file_get_contents(” http://www.baidu.com“);
preg_match_all(”/<title>(.*)<\/title>/isU”,$baidu,$baidus);
@me = $baidus[1][0];
{/dede:global}

在使用标记内编程或function扩展时,很多情况都可能会调用数据库

在V5版本中,DedeCms的数据库进行了改进,无论你新建多少个类的对像,最终打开的链接是只有一个的,并且会生成一个 $dsql 的全局数据库类的变量

以往有些懂dedecms数据库类的人在调用function扩展的时候,一般的做法是用 $dsql = new DedeSql(false); 这样新建一个类

实际上在V5中是不需要这样的

直接用 global $dsql;声明一下就能使用,并且在函数体中不要自行关闭(即执行 $dsql->Close())否则可能出错
那么在这里举个简单的例子

{dede:global runphp=’yes’}
global $dsql;
$restr = ”;
$dsql->SetQuery(”Select * From #@__feedback where
ischeck=1 order by ID desc
limit 5″);
$dsql->Execute(’feedback’);
while($row = $dsql->GetArray(’feedback’)){

$restr .= “<a target=’_blank’ href=’/plus/feedback.php?arcID={$row[’aid’]}&urlindex={$row[’urlindex’]}’>{$row[’arctitle’]}</a> — “.cn_substr($row[’msg’],200).”<hr />”;
}
@me = $restr;
{/dede:global}

测试一下这代码

这代码是调用最新评论的
dede本身没有提供直接调用评论的标签,一般懂的人用loop标签调用,不过在本版中,新增的SQL标签会更简单

在 DedeCms V5 中有一个标签{dede:sql sql=”SQL语句 limit 记录”}底层模板{/dede:sql}

我现在改一下刚才调用评论的地方

{dede:sql sql=”Select * From #@__feedback where
ischeck=1 order by ID desc
limit 5″}
<a target=’_blank’ href=’/plus/feedback.php?arcID=[field:aid/]&urlindex=[field:urlindex/]’>[field:arctitle/]</a> — [field:msg/]<hr />
{/dede:sql}

测试一下

嗯,这结果应该和上面的代码是一样的

一般比较有意义的数据表命名还是比较标准的,不相干的表,调用也没什么意义

假如有一个动态的系统,如论坛是装在同一数据库的,那么也可以通过这种方式调用一些贴子出来

如果是规范的HTML名称也是有办法的

不同数据库主要权限足也行

写表名是用 数据库名.表名 这样就能跨库读取

如果用 DedeCms V5 之前用过其它版本的,模板标记有一个地方需要注意

arclist 在V5中是不能调用整站的文档的

主要原因是因为现在的频道是允许分表,因此arclist标记必须指定typeid或channelid

为了补允调用全站数据的不足,V5中新增了 arcfulllist 标记,它的作用与 arclist 标记有点类同,不示不同的是 arcfulllist 里的文件名有时候可能是动态的,这因为它是使用搜索时用的那个简单索引表

在专题文章、相关文章中默认都是使用 arcfulllist 调用指定的 id 的文档的

由于这标记可能造成文件名不同步,我们系统后面增加了文档名批量修正功能,但为了防止忘记操作,建议建立栏目就设定好文档命名规则,以后不要经常更改

那下面我再简单介绍一下DedeCms V5里的真正的扩展

在 DedeCms V5 中,可以进行扩展的东西有三种,一就是常用的模型,二是新出的模块,三是插件

大家进到Dede管理后台“频道管理->内容模型管理”的地方

在这里,你看到的
分类信息
专题
普通文章
图片集
软件
Flash
产品
这些都是内置的模型

大家也可以自己新建一个模型,有不少人问:Dedecms的文存储在哪里呀?下面我一步一步的教大家建立一个用文本存储的文章模型

首先“增加一个新模型”
建立好后“添加字段”

现在转向栏目管理的地方

有没有人已经建立好一个频道模型的?

建立好后转到 栏目管理的地方新建一个顶级栏目,内容模型选刚才建好的那个

建立好栏目后,随意在那个栏目增加一篇文章

预览文章,会发生新增的模型显示的文档是

现在再回到频道模型管理的地方
在新建的频道点击“模板”或 图标

对于类同的模型,最好是把类同的模板作为当前模型的模板

如刚才建立的模型,实际上模板和普通文章模板是一样的,就 九零·天纵 的系统,把 article_body.htm 复制一份,改名为 article_body.htm 放在里面即可

这样就可以随你的意愿去显示相关的东西

此就是就关于字段的问题,在文档模板中字段是用{dede:field name=’字段名’/}表示

例如在软件模型中
文件类型
filetype
单行文本(varchar)
固化表单
[修改]

语言
language
单行文本(varchar)
固化表单
[修改]

软件类型
softtype
单行文本(varchar)
固化表单
[修改]

授权方式
accredit
单行文本(varchar)
固化表单
[修改]

操作系统
os
单行文本(varchar)
固化表单
[修改]

软件等级
softrank
整数类型  固化表单
[修改]

官方网址
officialurl
单行文本(varchar)
固化表单
[修改]
语言这字段就可以用 {dede:field name=’language’/} 表示

此外,title , keywords , description 这些实际上主索引表的东西,刚才说模板时已经介绍过它的含义了

有用户提过一个问题,就是关于自定义模型如何在表布表单中调整字段的顺序

Dedecms目前没有这选项,需要改的必须用 phpmyadmin 进入 dede_channeltype
这个表

编辑 fieldset 这里的XML,调一下位置就行了
此外大家要区别一下自动模型和系统模型的区别,系统模型是固化了的,要调整必须自己修改程序,对于普通人是无法改的

不过这版本允许自行增加一些字段在里面

因为这次讲座是个中级讲座,模型这块我就不太深入的讲解了,最后介绍一下插件和模块

插件在Dedecms中是就是一些小的实际的程序的集合,它可以简单的安装和删除,不过安装和删除仅去去掉数据库的索引记录,并非进行真正的安装

官方网前自带的插件有
文件管理器
站内新闻发布
友情链接模块
留言簿模块
投票模块
论坛扩展
广告管理
正则规则测试器
随机模板防采集
木马扫描检测
数据转换与导入
实际上很多情况下单用插件是满足不了系统的需求的
因此Dedecms V5提出了模块的概念

模块是对系统模型的一个补充,因为Dedecms的模板解析机制相对复杂,如果所有东西都依赖模型,就结果只有一个:速度越来越慢

使用模块就补充了这方面的不足

在 Dedecms V5 的菜单中“扩展模块”里放的就是Dedecms的模块

模块文件是一个标准化的xml文件,它即包含了模块安装删除的数据,也偶包含了图片等二进制文件

有些人问我,为什么在DedeCms V5的安装包里没发现ask、group等目录?

因为这些东西都封装起来了,如果你不安装它,是不会看到这些文件的,这样就能尽大限度满足一些站长想要功能多,一些想要功能实用的需求

至于如何开发模块,我们会出一个说明,不过在今天的课程中就不讨论

由于今天讲的主要是中等级别的东西,就暂时讲到此,有什么问题的可以现在开始交流,在此感谢图王热心组织这样的讲座和大家的支持!

如果你觉得本文写的还不错,就请分享到你的微博里哈~

原载: 上海SEO优化研究院 | 作者: 精灵SEO
原文链接:http://www.lijinglin.com/bolatu-jiangzuo-1.html
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

Tags:

阅读过本文的朋友还读过:

» You can leave a comment, or trackback from your own site.

RSS feed | Trackback URI

评论 »

还没有评论。

名称 (必填)
E-mail (required - never shown publicly)
URI
您的评论 (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> in your comment.