- 浏览: 1538706 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
首先我简单的介绍下自己,我是织梦官方团队的天涯,接触织梦也有2年多时间了,之前一直在论坛上做斑竹,认识了很多喜爱织梦的朋友,后来便加入了织梦团队,发现这是一个充满朝气、有激情和学习力的地方,这次受站长网的邀请来给大家做一次DedeCMS程序方面的讲座。
首先我简单的介绍下自己,我是织梦官方团队的天涯,接触织梦也有
2
年多时间了,之前一直在论坛上做斑竹,认识了很多喜爱织梦的朋友,后来便加入了织梦团队,发现这是一个充满朝气、有激情和学习力的地方,这次受站长网的邀请来给大家做一次
DedeCMS
程序方面的讲座。
因为这次主要是讲座,缺乏体系的培训内容,本次讲座我将织梦技术论坛较为常见的问题加以整理,并结合一些其他方面的应用内容进行补充,让大家更了解
DedeCMS
程序的使用。
安全设置
首先是程序安全问题,这里主要是一些拥有独立服务器的站长,如果自己在系统安全部署上面有些经验那应该没有什么问题,有部分站长没有系统安全部署的经验,加上现在挂马猖獗,所以许多人都在担心,官方在早些时候就发了一个关于《
DedeCms V5.3/V5.5
安全设置指南》的主题帖,地址为:
http://bbs.dedecms.com/172474.html
,这里面说了如何在
Win Serv
环境配置服务器环境。
不过文中提到了织梦的文件目录,这里我对整个系统文件目录进行一个说明:
http://bbs.dedecms.com/178324.html
,当然,如果你安装个模块会相应的增加一些目录,例如模块
group
、
ask
等。
{dede:sql}
标签的用法
sql
标签可以称得上是个万能标签了,查询数据库将其输出,这里介绍一些关于这个标签的用法:
1.
用来输出统计内容,这个是不错的,举个例子,我们来统计下总共发了多少的文章,思路就是输出
dede_addonarticle
这个文章附加表内容总数就可以了。
{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"}
[field:name = "nums"/]
{/dede:sql}
2.
使用
~field~
来进行特殊的查询,比如之前论坛上面很多会员需要做一个输出当前发布文章会员的相关内容,之前用
sql
或者
arclist
标签是没办法实现的,因为每篇内容是不同的,这里我们来用
5.5
的
sql
语句来做个示范。
我们首先在文章模板中相应的位置加上下面的标签
{dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"}
[field:id/],
{/dede:sql}
这个放到
article_article.htm
页面,将会检索出当前会员发布的相关文章,这里的
~ writer~
会根据当前内容的环境变量进行替换后再执行查询。
这里出现在
SQL
语句中条件查询的
~ writer~
,也就是
$refObj->Fields[$value]
这个里面的相关内容
模板中使用
PHP
许多人希望织梦的模板标签能够更加灵活,加入可以运行
PHP
的功能,这里在
DedeCMS V5.5
中就加入了一个可以执行
php
的特殊标签
{dede:php}{/dede:php}
,这个标签可以执行
PHP
语句了。
我这里举几个常用的例子:
1.
最简单的输出内容:
{dede:php}
$numA = 1;
$numB = 2;
echo $numA + $numB;
{/dede:php}
这个输出的内容是计算结果:
3
2.
结合
SQL
查询输出单条内容
{dede:php}
$row = $dsql->GetOne('select id,typename from dede_arctype where id=2');
print_r($row);
{/dede:php}
这个输出的内容是
Array
(
[id] => 2
[typename] =>
问答
)
3.
获取当前页面的变量
比如我们这里进入系统后台的
[
模板
]-[
全局标记测试
]
,我们在代码中填入下面的内容:
{dede:php}
print_r($refObj->Fields);
{/dede:php}
如果环境变量保持默认,即
“
不使用环境
ID”
,我们会看到以下的结果:
Array
(
[typeid] => 0
[phpurl] => /plus
[indexurl] => /
[templeturl] => /templets
[memberurl] => /member
[specurl] => /special
[indexname] =>
主页
[templetdef] => /templets/default
)
那我们再换个环境变量测试看看,这里以我本地的栏目为测试了:
Array
(
[id] => 3
[reid] => 0
[topid] => 0
[sortrank] => 1
[typename] =>
产品
[typedir] => {cmspath}/product
… …
[indexname] =>
主页
[templetdef] => /templets/default
[position] =>
主页
>
产品
>
[title] =>
产品
)
这样一来就检索出当前页面的局部变量了,接下来我们可以来结合前面的
SQL
语句来实现根据不同环境
ID
调用内容不同栏目内容。
例如:
{dede:php}
$thisid = $refObj->Fields['id'];
$row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid);
print_r($row);
{/dede:php}
这样是来调用当前栏目的标题,这个标签功能类似于
{dede:field.typename/}
写自己的标签,让别人说去吧
DedeCMS
从
V5.3
开始就支持自己扩展标签,不过许多新人很少用那个东西,今天我就来简单的介绍下如何编写自己的调用标签。
我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在
/include/taglib
这个目录,名称都是以
“
标签名
.lib.php”
格式,例如
{dede:channel/}
标签对应的是
channel.lib.php
文件。
我们可以看一个示例标签:
demotag.lib.php
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_demotag(&$ctag,&$refObj)
{
global $dsql,$envs;
//
属性处理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
//
你需编写的代码,不能用
echo
之类语法,把最终返回值传给
$revalue
//------------------------------------------------------
$revalue = 'Hello Word!';
//------------------------------------------------------
return $revalue;
}
?>
我们登录系统后台的
[
模板
]-[
全局标签测试
]
中运行
{dede:demotag/},
显示如下的结果:
这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数
return $revalue;
中的
$revalue
需要是经过处理后生成的字符串。
$attlist="row|12,titlelen|24";
这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:
$revalue = 'Hello Word!';
$revalue .="
Row:".$row.";TitleLen:".$titlelen;
Row:".$row.";TitleLen:".$titlelen;
这样我们可以看到,这个属性已经被创建变量并且赋值了。
接下来我们可以再进一步去修改这个标签。
比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面
sql
标签中的那个
sql
,只是这里我们将其分装为一个标签。
我们可以新建一个标签,例如叫
writerarc
,那我们就需要创建一个
writerarc.lib.php
,然后模仿
demotag
编写函数,注意需要修改为
function lib_writerarc(&$ctag,&$refObj)
接下来我们就可以编写查询语句及对底层模板处理的相关函数了
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$innertext
这个是用来获取标签的底层模板的,
$ctp
创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的
sql
语句,这里我们使用
limit 0, $row
,这样就可以根据
$row
来确定查询的内容数目。
当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于
arclist
中的相关属性,并在函数中进行处理,不过这个需要有一定的
PHP
基础。
接下来我们通过执行查询对
sql
及输出变量进行处理:
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//
根据属性处理查询变量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//
获取底层模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//
根据底层模板及查询变量得到处理结果
$revalue .= $ctp->GetResult();
}
这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到
$revalue
中。
最后返回这个值
return $revalue;
整个文件内容如下:
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_writerarc(&$ctag,&$refObj)
{
global $dsql,$envs;
//
属性处理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//
根据属性处理查询变量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//
获取底层模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//
根据底层模板及查询变量得到处理结果
$revalue .= $ctp->GetResult();
}
return $revalue;
}
?>
接下来我们来测试我们这个标签,我们修改
article_article.htm
模板,在里面加入以下的标签代码:
{dede:writerarc row='10' titlelen='6'}
[field:title/]
{/dede:writerarc}
通过动态浏览页面进行查看调试
http://www.dedecms.com/plus/view.php?aid=3
,我们会发现标签起作用了,输出了我们的内容。
至此我们完成了标签的编写,这里面主要涉及到 PHP 、 MySQL 的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。
至此我们完成了标签的编写,这里面主要涉及到 PHP 、 MySQL 的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。
发表评论
-
Dedecms源码文件夹目录解释说明-新手教程必看
2009-12-12 14:52 2970Dedecms目录介绍: /in ... -
dedecms网站入侵拿webshell方法总结
2009-12-05 19:13 27624dedecms网站入侵拿webshell ... -
利用DedeCms最新漏洞入侵网站
2009-12-05 19:04 7006DedeCms是目前网络 ... -
PHP安全的DedeCms安全加固
2009-12-05 18:59 1444网站安全从来都 ... -
seo优化之DEDECMS的细节优化策略
2009-12-05 18:54 1032大多数站长都很喜欢用dede来建站吧,在建站过程中可能也遇到 ... -
Dedecms安全防护:安全设置小技巧
2009-12-05 18:41 1338引导线网页制作网提示您: 这 两天,自己网站被挂马了, ... -
dedecms优化方案
2009-12-05 18:40 10001、将当前位置的“主 ... -
DedeCMS网站搭建完整教程
2009-12-05 18:37 2180今天在这里我们学习下 ... -
dedecms教你如何写一篇英文软文
2009-12-05 18:23 3313很多国内的网友做英文站都选择了织梦,其实织梦确实 ... -
DEDECMS的一些安全问题
2009-12-05 18:20 1771最近忙于谷百优大赛, ... -
DEDECMS安全设置,解决dedecms经常被挂马的问题
2009-12-05 18:19 2073经常看到有的 ... -
DEDECMS 的环境forDebug的Apache服务器启动失败的原因
2009-11-28 15:01 1203由于本地的IIS服务没有关闭 -
dedecms如何增加404页面
2009-11-28 14:54 3105dedecms在虚拟主机上如何增加404错误页面呢,从网上找了 ...
相关推荐
DedeCMS 5.6 标签调用大全 DedeCMS 是一个功能强大的内容管理系统,提供了丰富的标签调用来帮助开发者快速构建网站。下面总结了 58 种常见的标签调用,以帮助开发者更好地使用 DedeCMS。 关键描述调用标签 meta ...
在这个文档“58种标签调用DedeCMS5.6标签调用总汇[归类].pdf”中,列举了在DedeCMS中常用的58个标签调用方法,这些标签主要用于页面内容的动态生成和展示。下面将对其中的部分标签进行详细解释: 1. 关键描述调用...
在文档"dedecms标签调用.docx"中,列举了一系列用于在dedecms模板中调用不同内容的标签,这些标签是dedecms系统的核心功能,方便开发者和网站管理员自定义页面元素。下面是对这些标签的详细解释: 1. **关键词和...
### 织梦系统标签调用详解 #### 一、概述 织梦系统(Dreamweaver CMS,简称DedeCMS)是一款广泛应用于企业级网站构建的内容管理系统。它通过强大的标签功能来实现灵活的内容调用和展示,非常适合新手快速上手并...
本文将详细介绍DEDECMS的一些常用标签调用方法,帮助开发者更有效地构建和管理网站内容。 1. **关键词和描述调用**: `<meta name="keywords" content="{dede:field name='keywords'/}">` 这个标签用于调用文章的...
织梦仿站标签调用工具是一款专为织梦(DedeCMS)网站开发设计的实用工具,它极大地简化了在织梦系统中调用各种标签的过程,帮助开发者更高效地进行网站内容展示和功能实现。织梦内容管理系统是基于PHP和MySQL数据库...
dedecms实现在标签中嵌套调用sql的方法.doc
dedecms网站地图获取文章列表支持标签调用的方法.doc
标题中的“dede简单订单前台标签调用后台管理插件”指的是在DEDECMS(织梦内容管理系统)中,开发者创建了一个便于网站前台展示和管理订单的插件。DEDECMS是一个广泛使用的开源PHP内容管理系统,它允许用户通过...
linux下dedecms详细安全设置教程.doc
在织梦系统中,`{dede:listpagesize='8'}`标签用于设置列表的每页显示条数。 - 每个列表项通过`{/dede:list}`结束标签进行定义,这样的结构在织梦标签中非常常见,用于指定列表的开始和结束。 6. 字段调用和函数...
Linux操作系统下DedeCMS详细安全设置教程.doc
在使用DedeCMS标签时,建议参考官方提供的标签参考手册,确保正确理解和应用各个标签,同时要注意标签的作用域和属性设置。通过智能标记向导,可以快速生成符合需求的标签,提高开发效率。 总之,DedeCMS的标签系统...
织梦手册及相关调用文档积累 织梦手册及相关调用文档积累 织梦手册及相关调用文档积累
在网页元数据方面,我们可以使用`<meta>`标签来设置关键词和描述,如`<meta name="keywords" content="{dede:field name='keywords'/}">`用于调用文章的关键词,`(@me)'/}">`则用于获取文章的描述,并通过`html2text...
这个标签用于调用顶级栏目的导航,可以设置显示的栏目数量和当前栏目样式。 5. **指定调用栏目标签**: - `{ dede:onetype typeid='ID'}` 通过指定ID来调用特定栏目的信息。 6. **频道栏目调用**: - `{ dede:...
德(de)意(DedeCMS)标签是用于在织梦内容管理系统(DedeCMS)中动态调用网站内容的关键元素。这些标签允许开发者和管理员方便地在模板中插入各种信息,如元数据、页面导航、文章列表等。下面我们将详细介绍一些重要的...
该漏洞的成因是DEDECMS 5.7后台在上传文件时的安全检查不够严格。在uploadsafe.inc.php文件中,有一个函数用于检查上传文件的扩展名,但是该函数存在一些缺陷。首先,该函数使用preg_match函数来检查文件扩展名,...
在网页开发中,尤其是基于DEDECMS(织梦内容管理系统)的网站设计中,调用各种标签是构建和管理网站内容的关键。以下是对DEDECMS中一些常用标签的详细解释: 1. **关键描述调用标签**: `...
DedeCms用SQL语句调用数据库任意内容方法.doc