Submitted by gouki on 2010, August 16, 11:36 AM
资料均从网上收集,然后作了整理。。
注意,由于dedecms的模版TAG功能,其实是类似于XML,所以在使用的时候,一定要象XML一样正确闭合,否则,该区块将不变解析
一般来说,我们所使用的DEDECMS模板代码样式有如下几种:
XML/HTML代码
- {dede:标记名称 属性='值'/}
- {dede:标记名称 属性='值'} {/dede:标记名称}
- {dede:标记名称 属性='值'} 自定义样式模板(InnerText),即底层模板 {/dede:标记名称}
- 如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。
1、标记通用特性
(1) 短标记:
{dede:tagname.name/} 等同于 {dede:tagname name='' /}
{dede:global.name/} 外部变量 等同于 <?php echo $name; ?> 【其实这里应该是全局变量】
{dede:var.name/} var数组 等同于 <?php echo $_vars['name']; ?>
{dede:field.name/} field数组 等同于 <?php echo $fields['name']; ?>
{dede:cfg.name/} 系统配置变量 等同于 <?php echo $cfg_name; ?>【cfg已经是全局了,所以这个标签其实也可以写成{dede:global.cfg_name/}】
(2) 块标记:
{dede:tagname}
循环代码:
{/dede:tagname}
(3)include 语法:
{dede:include file=''/}
{dede:include filename=''/}
{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}
例如: {dede:include filename="head.htm"/}
对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录
2、函数和PHP语法
if 条件
仅支持 if ,else ,else 直接用{else}表示,但不支持{else if}这样的语法 ,一般建议模板中不要使用太复杂的条件语法,如果确实有需要,可以直接使用 php 语法。
XML/HTML代码
- {dede:if 条件}
- a-block
- {else}
- b-block
- {/dede:if}
条件中允许使用 var.name 、 global.name 、 field.name、cfg.name 表示相应的变量。
如:
XML/HTML代码
- {dede:if field.id>10 }
- {/dede:if}
php 代码块:
XML/HTML代码
- {dede:php
- php 代码
- /}
或
XML/HTML代码
- {dede:php}
- php代码
- {/dede:php}
......其它还在整理中
Tags: dedecms, 笔记, tag, 标签用法
PHP | 评论:0
| 阅读:18591
Submitted by gouki on 2010, August 5, 5:28 PM
不管怎么样,还是用到了dedecms。由于以前一直用supesite,对它不熟悉,所以做点笔记。
1、添加字段。如果你想增加自定义字段,但又不想修改数据库,可以尝试存成TAG。举例。在用户上传图片的时候,album_add,存到数据库里可能就是{dede:img xx}。代表了相册中的图片,每一张图片都是这样的一个标记。因此,我在这个最后增加了{dede:custom}类似的TAG,用来存放在这个页里涉及的増加的变量。偷懒的解决方法
2、读取数据显示到模版里。原来的我一直以为要写taglib,后来翻了手册才知道,原来还有{dede:loop }标签,可以指定表,排序字段和ifcause条件。比较方便。而且,如果你真的要写taglib,事实上也就可以参考这个函数来写了。
3、循环次数,发现循环次数是用全局变量来实现的。。。也就是说可以用[field:global.autoindex/]来显示。。很妖。。因此每个taglib都有将它置为0的用法。
4、针对2,其实还有一个更无耻的方法,那就是:{dede:sql sql=""}底层模板{/dede:sql},这样,你还可以更偷懒一点。
当然更多的还是需要看官方文档。在这里http://help.dedecms.com/v53/。虽然是5.3的不过还是可以做一些参考。。。
Tags: dedecms, 笔记
PHP | 评论:1
| 阅读:25413
Submitted by gouki on 2010, June 17, 11:52 AM
纠结在写typecho的dbbackup这个插件上很久了,主要是为了两件事:
1、不想让用户设置的变量,无法自由设定(关于这点,我其实很能理解,不需要用户设置的变量,如果不在config类里被定义,那么在deactitave的时候,是否能够被正常删除?)
2、Db config 无法获取(本来我以为备份sqlite是最简单的事情,只要把db文件打个包,当成附件发送一下就完事了。但事实上,我无法通过程序获取到这个Db文件,因为_config变量是protected的,也没有任何函数可以重新获取这个$_config变量)
所以现在,我还是决定
1、设置变量,但要求用户不要修改。或者允许他们置为空(置为空的时候,直接就是相当于执行备份操作)
2、不管是sqlite 还是 mysql 都采用PHP导出成sql文件的方式,然后再打包发送
当然,还只是构思,并没有实现,尚在慢慢实现中。。。因为要期末考试了,时间也不多,还得带孩子。oh oh oh ....
顺便,sluke说的页面关键字高亮,我以为是有这个插件的,看了一下是Tag高亮,其实也差不多。其实,也就是在搜索的时候,我支持一下Referer就可以实现了。
Tags: typecho, 笔记, 插件, dbbackup
PHP | 评论:3
| 阅读:23021
Submitted by gouki on 2010, June 13, 10:16 AM
看typecho第二天了,不过我还是没有仔细查看源码,只是根据一些其他插件的应用来写自己的应用。
比如,看了Akismet插件后,知道了 Typecho_Widget_Helper_Form 对象还有一个 addRule 方法,用来对数据进行验证。
昨天看了一下源码,并对应我昨天的方法了解Typecho页面中可以被注入对象的地方,在插件的activate中写了两个方法,可以让插件在全局被应用。
Typecho_Plugin::factory('index.php')->begin = array('DbBackup_Plugin', 'backup');
Typecho_Plugin::factory('admin/common.php')->begin = array('DbBackup_Plugin', 'backup');
嗯。是准备考虑备份的。前后台都有。正在尝试。如果并未按照我预想的情况运行的话,可能只考虑前台触发了。
加了三个参数:
$rate = new Typecho_Widget_Helper_Form_Element_Text('rate', NULL, '1', _t('备份频率'),_t('备份数据的频率(最小单位为天,请使用整数)'));
$form->addInput($rate->addRule('isInteger',_t('请输入整数')));
$email = new Typecho_Widget_Helper_Form_Element_Text('email', NULL, '', _t('备份发送到'),_t('发送邮件地址。'));
$form->addInput($email->addRule('email',_t('请输入正确的邮箱地址')));
$lastbackup = new Typecho_Widget_Helper_Form_Element_Text('lastbackup', NULL, '', _t('上次备份时间'),_t('无需设置,由程序自动生成'));
$form->addInput($lastbackup);
但是isInteger,这个验证方法是验证is_numeric,其实我是希望是一个正整数。现在,先将就一下下喽。离完成还早,顺便附上两个昨天写的垃圾插件,敬请测试(主要是官方论坛我注册后收不到邮件,所以无法登录。过会我再换个邮箱试试)
文章分页:已经删除,请移步typecho 插件:内容分页SplitArchivePage 进行下载 【演示地址】
高亮搜索引擎来源关键字:highlightsearchkeywords.rar 【这个,在这现在这个博客上测试成功,但是在typecho上没有办法测试,因为没有数据,google搜索不到。。。】
Tags: typecho, 笔记, 插件
PHP | 评论:6
| 阅读:29243
Submitted by gouki on 2010, June 12, 11:14 AM
关于插件这个问题,可以查看这篇JianHua Zhang的Typecho阅读笔记三:插件机制,我想说的就是链接文章里的最后一句。
在Typecho_Plugin的__call魔术方法里把当前设置到的component全部打印在页面上,对于插件开发人员来说是一件非常好的事情,因为这样,你可以了解到,有哪些地方是你可以注入你的插件对象的。
看左上角(看不清的话,请点击看大图)。
Widget_Archive:select
Widget_Archive:handleInit
象这两个,代表了你在插件中就可以写上以下代码来进行注入。
Typecho_Plugin::factory("Widget_Archive")->select = array("插件类名","该类中的方法");
是不是很方便 ?打开每一个页面,你都可以看到类似的代码,有logo,有content,contentEx之类的。了解了这些,在相应的位置上写上你想要的效果,是不是很爽?
顺便,你需要查看一下http://docs.typecho.org/develop/widget。也可以了解一些代码是如何被调用(文中有一点点错误,在看的时候Typecho::widget,应该是Typecho_Widget::widget("xxx"))
Tags: typecho, 笔记, 插件注入
PHP | 评论:4
| 阅读:26701