手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:笔记

dedecms 笔记:标签

资料均从网上收集,然后作了整理。。

注意,由于dedecms的模版TAG功能,其实是类似于XML,所以在使用的时候,一定要象XML一样正确闭合,否则,该区块将不变解析

一般来说,我们所使用的DEDECMS模板代码样式有如下几种:

XML/HTML代码
  1. {dede:标记名称 属性='值'/}  
  2. {dede:标记名称 属性='值'} {/dede:标记名称}  
  3. {dede:标记名称 属性='值'} 自定义样式模板(InnerText),即底层模板 {/dede:标记名称}
  4. 如果使用带底层模板的标记,必须严格用{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代码
  1. {dede:if 条件}  
  2.     a-block  
  3. {else}  
  4.     b-block  
  5. {/dede:if}  
条件中允许使用 var.name 、 global.name 、 field.name、cfg.name 表示相应的变量。
如:
XML/HTML代码
  1. {dede:if field.id>10 }  
  2. {/dede:if}  
php 代码块:
XML/HTML代码
  1. {dede:php  
  2. php 代码  
  3. /}  
XML/HTML代码
  1. {dede:php}  
  2. php代码  
  3. {/dede:php}  
......其它还在整理中

Tags: dedecms, 笔记, tag, 标签用法

dedecms 笔记

不管怎么样,还是用到了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, 笔记

typecho 插件开发(二)

纠结在写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

typecho 插件开发(一)

看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, 笔记, 插件

了解Typecho页面中可以被注入对象的地方

关于插件这个问题,可以查看这篇JianHua Zhang的Typecho阅读笔记三:插件机制,我想说的就是链接文章里的最后一句。
在Typecho_Plugin的__call魔术方法里把当前设置到的component全部打印在页面上,对于插件开发人员来说是一件非常好的事情,因为这样,你可以了解到,有哪些地方是你可以注入你的插件对象的。

大小: 156.17 K
尺寸: 407 x 376
浏览: 1100 次
点击打开新窗口浏览全图

看左上角(看不清的话,请点击看大图)。

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, 笔记, 插件注入

Records:912