Drupal 7 token模块应用研究
简介
关于token模块,简单描述就是占位符替换,在程序中基本都是用token表示。在drupal 7系统中, token是系统内核提供的核心功能之一,但是该功能只有API,没有任何操作界面,也就是说,该功能只服务于程序级别。大多数情况下我们需要社区模块 “token”。
系统内核提供的token功能,在drupal 6中是 “token” 模块的一部分,在drupal 7中,部分最核心功能被包含到drupal 7 核心代码中,但是更多的功能和操作留在了”token”模块中,这是drupal 保持自己的通用性和小内核、高效率的根本,至少我个人认为这个是正确的。
但是这个也带来一些问题,例如 include/token.inc中的函数是以“token”为前缀开始的,而”token”模块中的函数也是以“token”前缀开始的,这样一来似乎有些冲突,不过实际看来似乎大家配合都很默契
.
“token”功能和模块的要点
1. token 的数据是通过 cache 模块保存的。
2. token的最核心功能在”include/token.inc”中,而不是 “token”模块,但是”token”模块提供了丰富的附加扩展功能。
3. 相对与“token”模块而言,真正对include/token.inc程序有效的函数全部定义在 “token.tokens.inc”文件中,并且该文件的include定义是在”system.module”中完成的。
(题外话: 这个对于”token”模块是一个巧合,如果system.module没有定义“system_hook_info”函数中相关的”token_*”和”tokens”项,那么”token”模块中的,token.tokens.inc文件就是无效的,而实际上,system_hook_info函数中,只定义了一些token相关项,那么我是否可以猜测”module_invoke_all”函数中的,自动寻找HOOK程序路径的相关代码是否专门为token功能编写? 这的确是一个问题,不过好在这个功能可以扩展到任何hook, 只要这些hook的’group’ 定义通过”[custom module name]_hook_info”函数定义在你的“custom module”中即可。)
继续编辑中…
对开发者非常有用的16个 JavaScript 库
0. CodeMirror
CodeMirror 是一款“Online Source Editor”,基于Javascript,短小精悍,实时在线代码高亮显示,他不是某个富文本编辑器的附属产品,他是许多大名鼎鼎的在线代码编辑器的基础库。
视频:
1. html5media
html5media是一个JavaScript音频/视频播放器能够让每一个浏览器都能够播放在HTML5多媒体标签中定义的多媒体文件。 对于不兼容的浏览器,该播放将采用支持Flash的FlowPlayer播放器来代替。
开发日志 – 20120401
– VIM 操作命令 –
1. 多文件编辑使用:edit [filename] [filename]
2. 多窗口编辑命令:split
3. 窗口之间切换:CTRL+W+[up|down|W]
4. 复制多行:3,5y, 复制第三行到第五行
5. 粘贴:p
6. 剪贴多行:3.5d, 剪贴第三行到第五行
– APACHE 如何通过NameVirtualHost配置泛域名解析
1. ServerName aaa.com
ServerAlias *.aaa.com
2. 如果aaa.com 中有一个二级域名另有它用,可将该二级域名设置的NameVirtualHost代码片段置于 泛域名解析之前,apache会从上倒下解析NameVirtualHost, 如果一个匹配都没有,第一个为默认,如果有匹配,从配置文件上方开始向下优先匹配。
– IIS 服务器IIRF 与 apache WriteRule 差别
1. IIRF 的默认第一位参数包含前置 ‘/’, apache WriteRule 默认第一位参数不包含前置‘/’
2. IIRF有RedirectRule ,apache 只有 WriteRule.
PHP 匹配中文UTF8格式字符串标准正则
“/^([x{4e00}-x{9fa5}]+)$/u”,其中 u修饰副表示 preg_utf8,见详细说明http://cn2.php.net/manual/en/reference.pcre.pattern.modifiers.php,’x’表示十六进制字符,’{…}’大括号中的字符表示一个十六进制字符,在utf8格式下,中文的范围是4e00 — 9fa5.
关于drupal7新创建模块的schema安装
关于drupal7新创建模块的schema安装,如果该模块已经安装过一次,那么新schema不能安装,需要手动删除system表中数据, 参考 include/install.inc:drupal_get_installed_schema_version 函数。
如果模块未安装,函数“drupal_get_installed_schema_version”返回值应该是“-1”,如果已经安装,返回值“0”, 手动删除项参考SQL
$result = db_query(“SELECT name, schema_version FROM {system} WHERE type = :type”, array(‘:type’ => ‘module’));
Python 桌面开发资料
1.PyQt4资料链接
http://www.riverbankcomputing.com
http://wiki.woodpecker.org.cn/moin/PyQt
http://www.commandprompt.com/community/pyqt/book1
http://wiki.python.org/moin/PyQt
http://code.google.com/p/pyqt-doc-cn/
2. 写代码时,最好的帮助文档:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/classes.html
3. 教程电子书
重点推荐:珊文·铃木1992年在联合国地球峰会上的演讲
原文地址:http://blog.sina.com.cn/s/blog_482170850100chsl.html
珊文·铃木1992年在联合国地球峰会上的演讲。
她是12岁的加拿大小女孩,她自己筹钱到巴西的里约热内卢,在联合国的峰会上,她做了5分钟的发言。
一开始大家觉得这只是漫长会议中的另一场发言而已,随着她大声说出的每一句话,会场开始变得非常安静。坐在听众席上的高官、重要人物、各国领导、科学家们,有的表情尴尬,有的似乎被什么击中,有的开始擦眼泪。还有更多的人,他们低下了头,好象不知道该怎么和这个小孩对视。
Drupal 7中,如何通过程序正确输出一个内容类型创建表单
参考:node/node.pages.inc:node_add(); 函数,源码如下:
function node_add($type) {
global $user;
$types = node_type_get_types();
$node = (object) array(‘uid’ => $user->uid, ‘name’ => (isset($user->name) ? $user->name : ”), ‘type’ => $type, ‘language’ => LANGUAGE_NONE);
drupal_set_title(t(‘Create @name’, array(‘@name’ => $types[$type]->name)), PASS_THROUGH);
$output = drupal_get_form($type . ‘_node_form’, $node);
return $output;
}
这里有个问题,如果在以上代码只设置uid而未设置name, 那么默认是非注册用户,也就是说可以创建成功,但是用户关联错误。
学习–佛法四字
佛法四个字:一是缘。世间万物皆有相缘,缘是机遇,缘是达观。二是空。四大皆空,空是境界,看破红尘,放眼世界。空是智慧,包容宽恕,虚怀若谷,海纳百川。三是悟。悟为慧根,启发心智,世事洞明皆学问。四是善。心怀悲悯,心存感恩,积善行,帮助别人!@任志强(腾讯)
D7 定制forum的二三事
以下所有言论定位在drupal 7 forum 模块。
1. 在后台添加 container 和 forum的区别在哪里?
先说相同点,都是一个term数据,可以在taxonomy 的 forum下面找到,但是你在taxonomy-> 的 forum 下面新建一个term在forum模块中,只是新增加一个forum 而不是 container。 这个区别在于, 如果通过forum模块添加一个container, 会先创建 term, 其次会得到一个 term ID, 然后吧这个term ID 保存在 一个叫 “forum_containers” 的缓存中,通过 variable_set(‘forum_containers’, $containers); 或者 variable_get(‘forum_containers’, array()); 提取数据,这就是为什么在taxonomy 里面创建不出来一个 container的原因。
由此可知,一个forum模块的 forum其实就是 taxonomy 的一个term.
dupal 7 -> form -> checkboxes option settings
“default_value” have to be a array for checkboxes field type.
$form['agreement-fieldset']['agree'] = array(
‘#type’ => ‘checkboxes’,
‘#options’ => array(‘yes’=>t(‘agree’), ‘no’=> t(‘not agree’)),
‘#default_value’ =>array(‘no’),
‘#description’ => ‘hello,world’,
‘#required’ => true
);
转载自任志强微薄 – 格言
世间事,莫强求;平常心,待人生;是与非,莫计较;恩与怨,莫挂怀;悲与喜,莫冲动;名与利,莫贪求;想得开,愁云散;看得开,幸福来! @任志强(腾讯)



