drupal 新知识
1.node表
存放文章信息
字段:
nid:节点唯一标识ID
vid:节点唯一修订本ID
type:文章类型
book:手册页面
poll:投票
story:新闻
forum:论坛主题
page:页面
language:语言
title:节点标题,如果通过代码将表node_type中的字段has_title设置为0 的话,那么就没有标题了。
uid:作者用户ID
status:是否发表
0:未发表
1:已发表
created:节点创建时间戮
changed:节点修改时间戮
comment:评论设置
0:禁用,默认值
1:不能再向当前节点添加评论
2:可以查看并添加评论
promote:是否推荐
0:不展示在首页
1:展示到首页
moderate:
sticky:置顶
1:置顶
0:不置顶
tnid:
translate
2.格式化日期format_date
3.打印表格theme('table',$header,$rows)
4.建立数据库链接
(1)include_once('includes/bootstrap.inc');
(2)调用drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)来建立一个数据库连接
(3)db_query($SQL)执行
5.执行查询
db_query('SELECT * FROM {joke} WHERE vid = %d', $node->vid);
db_query("INSERT INTO {joke} (nid, vid, punchline) VALUES (%d, %d, '%s')",$node->nid,$node->vid, $node->punchline);
db_query("UPDATE {joke} SET punchline = '%s' WHERE vid = %d",$node->punchline,$node->vid);
db_query('DELETE FROM {joke} WHERE nid = %d', $node->nid);
db_result($result);//取结果集中的第一条记录
6.菜单系统
(1)type类型
MENU_NORMAL_ITEM:普通菜单,显示在菜单树
MENU_DEFAULT_LOCAL_TASK:标签菜单,设置此项将默认选中
MENU_LOCAL_TASK:标签菜单
MENU_CALLBACK:分配回调而不向菜单添加一个链接
以上类型可多选,如将菜单同时显示为树状菜单和标签菜单
MENU_NORMAL_ITEM | MENU_LOCAL_TASK
form_set_value()//改变表单元素的值
form_set_error()//显示表单错误
7.page.tpl.php中的变量
$base_path:Drupal 安装的基本路径。如果安装在根目录下,这是最简单的,他将默认为
根目录。
$closure:返回hook_footer()的输出,它常在页面的底部使用。
$css:.返回一个所有css 文件组成的数组结构,以添加到页面中去。使用$styles来返回
$css 数组的HTML 版本。
$content:返回将要展示的HTML 内容.例如,它可以包含一个节点,一组节点,管理接
口的内容,等等。
$directory:主题所在的相对路径。例如themes/bluemarine 或者
sites/all/themes/custom/mytheme。你通常联合使用该变量和$base_path 来构建你
的站点主题的绝对路径:<?php print $base_path . $directory ?>
$feed_icons:返回该页面的RSS种子链接
$footer_message:返回页脚信息文本
$head:返回放置在<head></head>部分的HTML。模块可以通过调用
drupal_set_html_head()来向$head添加额外的比如RSS种子的纯文本。
$head_title:在页面标题中展示的文本,放在HTML <title></title>标签中。
$help: 帮助文本,大多数用于管理页面。模块可以通过实现hook_help()来提供该变量。
$is_front: 如果当前展示的为首页的话为真TRUE。
$language:站点展示时所使用的语言
$layout:这一变量允许你定义外观的不同类型的风格,而变量$layout的值依赖于启用
的工具条(sidebars)的数量。可能的值包括:none, left,right, and both.
$logo: 指向logo 图像的路径,在启用主题的主题配置页面定义。通常这样使用:
<img src="<?php print $logo ?>" />
$messages: 为表单或者其他信息返回的验证错误和正确的提示信息的HTML。它通常
显示在页面的头部。
$mission: 返回站点使命文本,在Administer->Site configuration->Site information中输入.只有当$is_front 为TRUE 时才可以使用。
$node:整个节点对象,当察看一个单独节点页面时可用。
$primary_links: 一个包含了一级链接的数组。在Administer->Site building->Menus中定义它们。
通常$secondary_links通过函数theme('links')来定制输出的样式,
如下所示:
<?php print theme('links', $primary_links) ?>
$scripts: 返回向页面的<script>标签中所添加的HTML。这也是关于jQuery 如何被加载的
$search_box: 返回搜索表单的HTML。当管理员在启用的主题中的主题配置页面禁止
展示搜索时,或者搜索模块禁用时,$site_slogan为空。
$secondary_links: 一个包含了二级链接的数组。在Administer->Site building->Menus中定义它们。通常$secondary_links通过函数theme('links')来定制输出的样式,
如下所示:
<?php print theme('links', $secondary_links) ?>
$sidebar_left:返回左边工具条的HTML,包含了属于该区域的所有区块的HTML。
$sidebar_right:返回右边工具条的HTML,包含了属于该区域的所有区块的HTML。
$site_name: 站点的名称。在Administer->Site configuration->Site information
中设置。当管理员在启用的主题中的主题配置页面禁止展示标语时,$site_ name为空。
$site_slogan: 站点的标语。在Administer->Site configuration->Site information中设置。
当管理员在启用的主题中的主题配置页面禁止展示标语时,$site_slogan 为空。
$styles:返回连接到页面需要的CSS文件的HTML。CSS文件通过drupal_add_css()
添加到$styles中去。
$tabs: 返回用于为节点展示诸如View/Edit的标签的HTML。
$title:主内容的标题,与$head_title不同。当察看一个单独节点视图页面时,$title就
是节点的标题。当常看Drupal的管理员页面时,$title通常有菜单项来设置,菜单项对应于查看的页面。
8.覆写主题工作原理
如theme("breadcrumb")执行流程:
theme("breadcrumb")->theme-name_breadcrumb()->theme-engine_breadcrumb()->theme_breadcrumb()
The first function found gets called!
9.同义词
taxonomy_get_synonyms($tid)
10.使用缓存API
cache_set($cid, $table = 'cache', $data, $expire = CACHE_PERMANENT,$headers = NULL)
cache_get($cid, $table = 'cache')
cache_clear_all()
函数参数有:
$cid:用于取回数据的缓存ID。
$table:用来取回缓存数据的表的名称。你可以创建你自己的表,或者使用
cache,cache_filter,cache_menu,cache_page。默认使用cache表
11.常用函数
taxonomy_save_vocabulary($vocabulary);
node_type_save((object)$node_type);
drupal_set_message($message);//插入一会话消息,展示给用户
drupal_set_error($error);
drupal_set_title();//设置页面标题
Drupal_page_cache_header();//header缓存
variable_get($key,$default);
variable_set($key,$value);
node_get_types('names');//它方便的返回了当前Drupal中可用的节点类型的键值数组
check_plain();
drupal_set_breadcrumb();
drupal_get_breadcrumb();
drupal_http_request($url, $headers = array(), $method = 'GET', $data = NULL, $retry = 3)
fix_gpc_magic();//对GET,POST,COOKIE,REQUEST等数据转义
parse_size($size) //格式化数据大小
12.分页
$result = pager_query(db_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
$output = '';
$num_rows = FALSE;
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
$num_rows = TRUE;
}
if ($num_rows) {
$feed_url = url('rss.xml', array('absolute' => TRUE));
drupal_add_feed($feed_url, variable_get('site_name', 'Drupal') .' '. t('RSS'));
$output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
}
13.表单验证
//假如以下为一表单构建函数,在其中加入validate元素即可指定表单验证函数
function annotate_admin_settings() {
...
// Define a validation function.
$form['#validate'] = array(
'annotate_admin_settings_validate' => array()
);
return system_settings_form($form);
}
//表单验证函数
function annotate_admin_settings_validate($form_id, $form_values) {
if (!is_numeric($form_values['annotation_limit_per_node'])) {
form_set_error('annotate_limit_per_node', t('Please enter a number.'));
}
}
14.使用drupal_write_record()插入和更新记录
插入
$table = 'bunnies';
$record = new stdClass();
$record->name = t('Bortha');
$record->tons = 2;
drupal_write_record($table, $record);
更新
$table = 'bunnies';
$record = new stdClass();
$record->bid = 2;
$record->name = t('Bortha');
drupal_write_record($table, $record,'bid');//bid为表的primary key
15.值得研究的方法
common.inc
(1).drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302);
(2).判断模块是否实现了钩子
function module_hook($module, $hook) {
return function_exists($module .'_'. $hook);
}
(3).执行指定模块中的钩子
function module_invoke() {
}
例:module_invoke($module, 'nodewords_api');
(4).执行所有模块中的钩子
function module_invoke_all(){
}
例:module_invoke_all('nodeapi');
(5).
function module_implements($hook, $sort = FALSE, $refresh = FALSE) {
}
(6).列出所有模块
function module_list($refresh = FALSE, $bootstrap = TRUE, $sort = FALSE, $fixed_list = NULL)
(7).加载所有注册的模块
function module_load_all()
(8).加载指定模块
function drupal_load($type, $name)
例:drupal_load('module', 'node');
(9).返回HTTP_REFERER
function referer_uri()
(10).返回REQUEST_URI
function request_uri()
(11).设置消息
function drupal_set_message($message = NULL, $type = 'status', $repeat = TRUE)
(12).获得消息
function drupal_get_messages($type = NULL, $clear_queue = TRUE)
(13).获得IP地址
function ip_address()
(14).计时器开始
function timer_start($name)
(15).计时器读取
function timer_read($name)
(16).计时器停止
function timer_stop($name)
(17).验证host
function drupal_valid_http_host($host)
(18).variable变量初始化(读取所有)
function variable_init($conf = array())
(19).variable变量设置
function variable_set($name, $value) {
global $conf;
$serialized_value = serialize($value);
db_query("UPDATE {variable} SET value = '%s' WHERE name = '%s'", $serialized_value, $name);
if (!db_affected_rows()) {
@db_query("INSERT INTO {variable} (name, value) VALUES ('%s', '%s')", $name, $serialized_value);
}
cache_clear_all('variables', 'cache');
$conf[$name] = $value;
}
(20).variable变量删除
function variable_del($name)
(21).返回可用的节点类型
function node_get_types($op = 'types', $node = NULL, $reset = FALSE)
(22).验证url
function valid_url($url, $absolute = FALSE)
(23).验证email
function valid_email_address($mail)
(24).url编码
function drupal_urlencode($text)
(25).将php变量转换为js变量
function drupal_to_js($var)
(26).以json格式输出数据
function drupal_json($var)
(27).执行http请求
function drupal_http_request($url, $headers = array(), $method = 'GET', $data = NULL, $retry = 3)
16.unicode.inc.php
(1).字符串截取
function truncate_utf8($string, $len, $wordsafe = FALSE, $dots = FALSE)
(2).字符串截取
function drupal_substr($text, $start, $length = NULL)
(3).字符编码转换
function drupal_convert_to_utf8($data, $encoding)
17.path.inc.php
(1)设置当前页面标题
function drupal_set_title($title = NULL)
(2)获得当前页面标题
function drupal_get_title()
(3)判断当前页是否是首页
function drupal_is_front_page()
(4)检测路径是否符合某些规则
function drupal_match_path($path, $patterns)
(5)获得路径别名
function drupal_get_path_alias($path, $path_language = '')
(6)根据别名获得内部路径
function drupal_get_normal_path($path, $path_language = '')
18.theme.inc.php
(1)获取当前主题路径
function path_to_theme()
22.表格列表
<?php
$header = array(//先定义个表格头部
array('data' => '标题'),
array('data' => '作者'),
array('data' => '评论'),
array('data' => '点击'),
array('data' => '发表时间')
);
$tablesort = tablesort_sql($header);
$result = pager_query("SELECT n.nid, n.title,n.comment, n.created,u.uid, u.name,s.totalcount FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'story' ORDER BY n.created DESC".$tablesort, 15);
if (db_num_rows($result) > 0) {//加入判断,查询结果大于0才显示;
while ($test = db_fetch_object($result)) {
//这儿不直接打印,而是定义成一个数组了。
$rows[] = array( 'data' =>
array(
l($test->title,'node/'.$test->nid),
l($test->name,'user/'.$test->uid),
$test->comment,
$test->totalcount,
format_date($test->created),
),
);
};
}else {//否则就显示
echo '没有文章';
}
echo theme('table', $header, $rows);//这儿打印出表格。
echo '<p>'.theme('pager', NULL, 15).'</p>';
?>
23.
<?php
$block = module_invoke('blog', 'block', 'view',0);
?>
解释一下:
module_invoke:加载模块
blog:点名加载blog模块
block:区块
view:显示
0:要显示这个模块的第0个区块
$form['news']['inline'] = array('#prefix' => '<div class="container-inline">', '#suffix' => '</div>');
24.常用theme函数
(1)theme_block:显示区块
(2)theme_box:显示一个div
(3)theme_image:显示一张图片
(4)theme_item_list:显示一个<ul>
(5)theme_links:显示链接
(6)theme_table:显示表格
(7)theme_username:显示带链接的用户名
theme函数调用顺序
例如:theme('username',$user);
1.theme_name_username()
如:zen_username()
2.theme_engin_username()
如:phptemplate_username()
3.theme_username
重写的theme函数写入主题目录下的template.php文件中
25.根据URL决定调用哪个模板
http://localhost/drupal/?q=node/2/edit
(1)page-node-edit.tpl.php
(2)page-node-2.tpl.php
(3)page-node.tpl.php
(4)page.tpl.php
http://localhost/drupal/
(1)page-front.tpl.php