You are here 飞腿站长站 > 装备 > CMS > 中文Drupal社区
中文Drupal社区
本频道中共有 10 条消息,返回讨论版 CMS,7 个其他相关频道

  中文Drupal社区     1

北京drupaler的第七次meetup总结(有照片) 
Published on 2008-9-13 20:37:38

www.5iphp.com
一部分分享的资料参考的这个网站

北京的drupaler的第七次meetup如期举行,一共去了大概20位左右的朋友。
首先感谢民安信科技有限公司给我们提供的免费场地,还有一些甜点。
也感谢民安信科技的两位朋友牺牲休息时间来为大家服务!
也很遗憾,大米因为日程有变动,没有来的及跟大家见面,不过,以后还有很多的机会。

下面对这次meetup进行一个简短的总结。
这次meetup也是汇集了各行各业的朋友,不止是做drupal的技术人员,也包括了想用
drupal做开发的公司和个人,我觉得这是一个非常好的平台。这个平台可以让各行各业
,有各种需求的朋友聚集到一起,对大家的知识面的拓展,人脉的扩展,技术的提高,都
非常有好处。

我主要分享了一些关于drupal5和drupal6开发中的一些区别,因为前段时间做了drupal6的alinks
模块,有一些自己的体会。讲稿附在附件中,内容主要取自www.5iphp.com,大家想看的可以下载。

amber给大家分享了一些她做drupal开发的过程中许多好的经验。

还有几个朋友对drupal的meetup的发展提了很多很好的建议。这些建议包括
1、请一些有drupal开发需求的公司在meetup上提一些需求,让大家讨论分享。
2、每次meetup的时候把大家的邮件记录下来,下次的时候通过发邮件来提醒大家。
3、meetup不只限于技术的交流,还可以做drupal的其他的交流,比如项目的合作,
drupal的兼职方面,都可以交流。

一位参加聚会的MM提出了以下建议,我觉得很有参考意义,所以贴出来让大家
一起探讨:

我觉得
一是可以找一些用drupal建起来的比较强大的站,大家可以一起讨论它们是如何做出来的,就想amber展示的那样,但是不仅仅局限于从他们手里出来的那些。
二是会议最好请一个人记录,或者是录下来也可以,这样就不光开会的人知道了那些内容。
第三就是提出自己的站点和问题请大家帮忙鉴赏和解决啦。
还有,如果提前报名的话,最好让大家在留言里说明一下来意,如果是想用drupal开发的企业,这个到时候可以单独留出时间来让大家说一些需求,就象你第一条里写的。

大家有什么建议可以继续跟帖。

下面是我提出的10月份meetup的一些设想,有建议的也可以看看啊
http://drupalchina.org/node/5335

提前祝大家中秋快乐!

下面是交流现场的照片。


自我介绍环节


一共去了4个美女

amber在给大家分享经验



民安信科技的两位帅哥,给大家提供了不少方便


上周六meetup回顾、总结、内容分享(有视频) 
Published on 2008-9-1 14:22:12

很高兴,第六次上海drupal用户聚会能够赶在八月末顺利举行。这次的总共有15个人参加了聚会,虽然人不多,但是气氛相当好。

在报名参加的人到得差不多的时候,我们抓紧时间开始了这册的聚会。
聚会的第一部分是由raincity studios的开发工程师Mike,姚唯真,为大家进行主题为“AHAH,Drupal的动态表单”的讲演。作为聚会的组织者,在每一次的聚会活动之前,我们都会在SHDUG的google group或是drupalchina的上海板块中发帖,征集大家对聚会主题的想法建议等,并针对最多人想听的主题找合适的drupal开发工程师进行讲演。希望通过这种讲演的方式,让更多的人了解drupal,掌握drupal的更多功能;也希望这样能够帮助更多人解决平时drupal实际运用时遇到的种种问题。目前,因为还没有人愿意自告奋勇在聚会中为我们做演讲,所以我们都是请raincity studios的工程师为大家讲演一些平时工作中总结的drupal使用经验。但我们更希望能够有raincity以外的朋友加入到主题演讲的行列中,为我们带来更多不同的演讲主题。

以下是周六聚会时Mike的讲义,感兴趣的朋友可以分享一下:

1. What's AHAH?
Same Ajax, but simpler than Ajax

2. What's the purpose of AHAH in Drupal?
Just one purpose for dynamic form

3. AHAH basic requirement
* main form
* dynamic sub form
* define a html element wrapperDrupal 6 AHAH forms: The easy way | Nick Lewis: The Blog'
* AHAH form property
'#ahah' = array(
array(
'event' => click or change,
'wrapper' => html element id,
'path' => callback function,
),
),
* AHAH process function

4. example
$form['wrapper'] = array(
'#type' => 'item',
'#prefix' => '',
'#suffix' => '',
);
$form['new'] = array(
'#type' => 'submit',
'#value' => 'New',
'#ahah' => array(
'path' => 'ahah_test/execute',
'wrapper' => 'ahah-wrapper',
'method' => 'append',
'event' => 'click',
),
);
function ahah_test_execute() {
$form_state = array();
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$num = $form['num']['#default_value'];
$num++;
$form['num']['#default_value'] = $num;
$form['ahah_sub_form'] = array(
'#tree' => TRUE,
);
$form['ahah_sub_form'] += ahah_sub_form($num);
form_set_cache($form_build_id, $form, $form_state);

$form = form_builder('ahah_main_form', $form, $form_state);
$output = drupal_render($form['ahah_sub_form']);
print drupal_to_js(array('status' => TRUE, 'data' => $output));
}

5. AHAH properties list
'#ahah' = array(
'effect'
'event'
'method'
'path'
'process'
'wrapper'
)
http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/6#ahah

在Mike30分钟左右的讲演之后,大家针对这次的演讲主题中的一些问题进行了一番讨论,之后就是大家自由讨论的时间。有好些朋友趁这个机会将自己建站时遇到的问题提了出来,希望能够得到大家都帮助,当然大家也都是很踊跃地出谋划策,交流自己的drupal经验,相信这些有备而来的朋友没有空手而回吧!

其实,这也正是我们组织meetup的一大目的。我们想通过每月一次的meetup为上海的drupal用户提供一个交流的平台,交流各自使用时的得失、经验、技巧,就像“人人为我,我为人人”,我想这也正是开源的意义所在吧。所以,建议以后参加聚会的朋友可以事先将自己平时遇到的问题整理一下,在聚会时提出来,这种面对面且实际操作的交流效果肯定好过自己一个人的苦思冥想。

这次聚会见到了久未露面的transdonkey,每次活动前都看到他很积极的报名,但都没有露面,这次终于得以一见。还有一直支持我们聚会活动,常来参加的李彦、赵亮、韩韬,这次也都来了,另外还有些新朋友是第一次参加我们的聚会活动,不知道大家对这次聚会的印象如何,但还是希望大家能够继续支持上海 drupal用户聚会的活动,以后常来参加我们的活动。

视频:http://www.tudou.com/programs/view/GTU83pT_FrY/

如果大家想在meetup上演讲,可以与我联系:peggy@raincitystudios.com,或者直接跟贴回复。


Drupal 6.x 主题制作指南 
Published on 2008-8-30 23:28:26

译者:http://zhupou.cn
原文:http://drupal.org/theme-guide
欢迎来到主题制作的用户手册页面. 以下页面将涵盖隐藏在主题制作背后的核心理念,该理念适用于Drupal 6及更高版本. Drupal 5及以下版本的主题制作指南(http://drupal.org/node/509)依然可用.关于两者之间不同之处的概述,参看升级指南(http://drupal.org/update/theme).
本手册将在适当的地方说明,与以前的版本相比,所存在的一些分歧.这是从主题制作者的角度着眼的. 如果你正在开发一个模块,需要向表示层输出数据,那么请你参阅模块开发指南中的主题一节(http://drupal.org/node/165706).所有的输出都应该可以主题化的.
注意:对于文档贡献者.请不要在这里添加第3方模块或者主题相关的HOWTO用户指南.这里的信息都是关于内核的,只有在当需要的时候,我们加个链接,链到其它页面就可以了.
 主题化介绍
 主题化概况
• 对一个Drupal主题的剖析
• 主题的.info文件
• 覆写可主题化的输出
• 样式表
 JavaScript & jQuery
 区块,内容和它们的区域
• 自定义主题设置
 对维护页面定制主题
• 为你的主题进行检修
 主题编码习惯
 主题截图指南
 将你的主题添加到Drupal.org上去

主题化介绍 ›


模块开发实例(1) 
Published on 2008-8-22 17:25:15

前期准备:
假设我们要开发一个统计模块,模块要实现如下几个需求:
1、统计网站总访问量(按IP和PV);2、统计每日访问量(按IP和PV);3、统计特定来源的访问量(如登录用户、游客、来自百度、来自google等);4、统计用户最近浏览历史;5、将浏览IP转换为地理位置。
最终实现的功能界面截图:
Drupal流量统计模块:tools.module

Drupal流量统计模块:tools.module

接下来就是分析需求,如何在Drupal里实现。drupal本身有个记录访问的模块:Statistics。记录非常详细,我们只需从这些记录里提取数据出来,筛选、分析就行了。因为需求里有按每天来统计的IP量和PV量的项目,所以模块需要创建一个表,用来存储数据。最后一步,在sites/all/modules下创建一个文件夹,用以保存模块文件。我们把这个模块命名为tongji,按惯例,模块文件夹也叫tongji。

准备工作完成,可以正式开始写代码了。
注:1、下面的代码只适用于Drupal 6.x。2、按规范标准,所有界面字符串应该使用t(),这里为了方便和直观,就省略掉直接使用中文了。

创建第一个文件--tongji.info:每个模块都必须提供一个info文件。drupal系统会遍历每个文件夹下的info文件,如果没有这个文件,模块就不会被读取。模块info文件通常是这样(为了便于浏览,我把注释写在了代码下面):

<?php
; $Id: tongji.info,v 1.0 2008/08/22 06:55:18 east Exp $
;
这一行称之为头部信息,主要是描述文件本身的一些情况,包括文件名、版本、创建时间、创建人等。这并不是必须的,但保留它便于维护。因为在提交到drupal的cvs时,服务端会读取这个并自动更新时间和版本号。
name
= "tongji"
;模块的名称。必须。
description
= tongji
;模块的描述。
dependencies
[] = statistics
;依赖的模块。
package
= tongji
;模块所属的分类,这将把管理后台显示模块列表时用来分组。如果不填,就会分到其它组里。

version
= "6.x-1.0"
core = "6.x"
;模块的版本和所依赖的drupal核心版本。通过drupal cvs发布模块,打包器会自动添加这两个字段。必须。

;下面这部分信息是通过drupal cvs发布模块时,打包器自动添加上去的,包括了版本号、打包时间等等。我们在创建这个文件时只需要写上依赖的核心版本就行了。
; Information added by drupal.org packaging script on 2008-08-20
;version = "6.x-1.0"
;core = "6.x"
;project = "tongji"
;datestamp = "1219215639"
?>

创建第二个文件--tongji.install:因为我们需要创建一个数据表,所以得有一个安装文件。如果模块没有数据库上的需求,就不需要这个文件。在启用模块时,系统会自动寻找这个文件。文件名必须与info里的定义保持一致。同样的,第一行也是头部信息。
根据需要,我们要把每天的总IP、总PV、来自于主要搜索引擎的统计分别存放在数据库。这样就有这几个字段:time,ip,pv,baidu,google。分别存储时间、日IP、日PV、来自百度和来自google的流量。创建数据表使用到hook_schema,hook_install,代码如下:

<?php
function tongji_schema() {
//hook的格式都是模块名加上所需的钩子。一般创建的表也和模块名保持一致。表名为tongji,添加三个字段,类型都是int,不需要默认值。把time设为主键,其它的做个索引。
 
$schema['tongji'] = array(
   
'fields' => array(
   
'time'    => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
   
'ip'    => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
   
'pv'    => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
   
'google'    => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
   
'baidu'    => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
    ),
   
'indexes' => array(
   
'ip'    => array('ip'),
   
'pv'    => array('pv'),
   
'google'    => array('google'),
   
'baidu'    => array('baidu'),
    ),
   
'primary key' => array('time'),
  );
  return
$schema;
}

function
tongji_install() {
//这儿就调用hook_install来执行上面定义的sql代码了。
   
drupal_install_schema('tongji');
}
?>

创建第三个文件--tongji.module:模块主文件,命名必须和info里的定义保持一致。启用模块后,系统会根据需要加载主文件--事实上,每次访问都会加载所有模块,据说drupal 7会改变这种方式,每次访问只加载所需的模块。第一行和其它文件一样,头部信息。接下来我们把所有功能分解为几步,首先来完成访问量的统计。

<?php
// $Id: tongji.module,v 1.0 2008/8/22 15:14 east Exp $

//一般先定义菜单页面。这使用到hook_menu。

function tongji_menu() {
   
$items = array();
   
   
$items['admin/reports/tongji'] = array(//页面路径,可以随意填,我把它放在站点报告的下面。
       
'title' => '流量概况',//页面标题
       
'page callback' => 'tongji_view',//调用的函数
       
'access arguments' => array('administer nodes'),//访问权限
       
'type' => MENU_NORMAL_ITEM,//菜单类型
        //'file' => 'tongji.page.inc',//6.x增加了一个菜单文件,如果模块代码太多,可以分解开来,每个页面调用不同的文件。我们这个模块代码不会太多,就不需要了。
   
);
   
$items['admin/reports/tongji/import'] = array(
       
'title' => '数据导入',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('tongji_import'),
       
'access arguments' => array('administer nodes'),
       
'type' => MENU_NORMAL_ITEM,
    );
   
$items['admin/reports/tongji/hits'] = array(
       
'title' => '访问明细',
       
'page callback' => 'tongji_hits',
       
'access arguments' => array('administer nodes'),
       
'type' => MENU_NORMAL_ITEM,
    );
    return
$items;
}
?>

上面定义了三个菜单,一个用来显示流量概况,一个用来导入数据,一个用来显示访问明细。只有导入了数据,才能显示,所以我们先来完成这个功能。

<?php
function tongji_import(& $form_state){
   
$form['tongji-date'] = array(
       
'#title' => '选择日期',
       
'#type' => 'textfield',
       
'#size' => 10,
        );
//定义导入的时间段。采用Ymd格式,例如:20080822
   
$form['submit'] = array(
       
'#type' => 'submit',
       
'#value' => '确认导入',
       
'#submit' => array('tongji_import_submit'),
    );
//提交时执行函数tongji_import_submit
   
return $form;
}

function
tongji_import_submit($form, & $form_state){
   
$timedate = $form_state['values']['tongji-date'];//获得传递过来的时间数据,因为这个只有管理员才能操作,所以我们就不用去判断数据是否合法了。
   
$result = db_query('SELECT COUNT(hostname) AS pv, COUNT(DISTINCT(hostname)) AS ip FROM {accesslog} WHERE to_days(from_unixtime(timestamp)) = to_days(%d)',$timedate);//查询这个时间段内accesslog表中的ip和pv总数。关于数据库查询,请参看mysql手册。
   
while ($a = db_fetch_object($result)){
       
$pv = $a->pv;
       
$ip = $a->ip;
    }
//输出该时间段内的ip和pv总数。
   
if($ip){//如果时间段内有数据,则执行以下代码,从这些记录中找出来自google和百度的访问。
       
$sql ='SELECT COUNT(hostname) AS ip FROM {accesslog} WHERE url LIKE "%%%s%" AND to_days(from_unixtime(timestamp)) = to_days(%d)';
       
$result = db_query($sql,'.google.', $timedate);//匹配google
       
while ($a = db_fetch_object($result)){
           
$google = $a->ip;//输出google的记录总数
       
}
       
$result = db_query($sql,'.baidu.', $timedate);//匹配百度。
       
while ($a = db_fetch_object($result)){
           
$baidu = $a->ip;//输出百度的记录总数
       
}
       
$x = db_result(db_query('SELECT time FROM {tongji} WHERE time = %d',$timedate));//接下来查询tongji表,看看这个时间段的数据是否存在。
       
if($x){//如果存在,则更新记录。
           
$d = db_query("UPDATE {tongji} SET ip = %d, pv = %d, google = %d , baidu = %d WHERE time = '%s'",$ip, $pv, $google, $baidu, $timedate);
           
$t = ($d ? '修改成功。':'修改失败。');
        }else{
//如果不存在,则写入新记录。
           
$d = db_query("INSERT INTO {tongji} (time, ip, pv, google,baidu) VALUES (%d, %d, %d, %d, %d)",$timedate, $ip, $pv, $google, $baidu);
           
$t = ($d ? '导入成功。':'导入失败。');
        }
    }else{
       
$t = '所选日期没有数据';
    }

   
drupal_set_message($t);
    return
$t;
}

//我们暂时先写数据导入的代码,其它两个页面放一个测试函数,以免启用模块时出错。
function tongji_view(){
    return
false;
}

function
tongji_hits(){
    return
false;
}
?>

现在我们启用模块,同时需要启用statistics模块,还得开启statistics的日志记录。启用之后,菜单的报告项下面我们定义的几个地址已经出现了,请访问admin/reports/tongji/import,导入数据的表单出现了。在数据表中定义的time字段是int类型,我们就使用Ymd的时间格式。输入当前时间(20080822),确认导入,返回信息导入成功的话,请去数据库中查看tongji字段,不出意外的话,数据应该已经统计出来了。

写入数据的操作就算完成了,不过,好像有点麻烦,万一我几天没上网,回家还得一天一天去导数据?要是我设定的是只保留最近三天的记录,而我又四天没上网,岂不是其中有一天的数据统计不到了?这是个需求,这个需求就是要让程序自动化。我们就要使用到hook_cron了。cron定时任务可以节省我们的工作。

<?php
//我们让cron执行一下提交函数就行了。
function tongji_cron(){
   
$form_state['values']['tongji-date'] = format_date(time(), 'custom', "Ymd");//执行前要先获得当前的时间。
   
$t = tongji_import_submit('',$form_state);//调用数据导入提交函数。
   
watchdog('统计',$t);//在看门狗里做一下记录,

}
?>

数据导入就完成了,接下来就是展示数据和转换ip、获取用户浏览记录等不需要写入数据库的项目了。
原文链接: http://hi.500959.com/node/32
下载实例文件: http://hi.500959.com/sites/default/files/3318636161219396401.zip


北京drupal第7次meetup-9月13号:大米行程有变动,不能参加活动了,但是活动如期举行! 
Published on 2008-8-19 13:01:11

由于9月14号是中秋节,为了让大家过一个安心的中秋节,我们聚会时间提前到13号举办!
非常抱歉,大米临时通知我,由于他的行程有变动,不能参加这次聚会了!
大米在后面的跟帖中已经说了情况,下面是大米的帖子引用

去不成了:(
由 大米 于 周三, 2008-09-10 20:51 提交。
非常非常的抱歉,计划赶不上变化,临时又有变动,这个周末不能参加了.
非常感谢大家,感谢chinajason的热心组织,真的是非常的遗憾,再次说声对不起,
希望以后还有机会,并祝中秋快乐

希望下次大米再来北京,能够跟广大的drupaler们见见呵呵!

活动会如期举行。

时间:2008年9月13号,下午1点-4点。

费用:免费

地点:海淀区中关村东路66号世纪科贸大厦C座607-608室(北京民安信科技有限公司会议室),感谢北京民安信科技有限公司为我们提供免费的场地。

他们公司可以提供投影仪,也可以上无线,大家有笔记本的可以带上

乘车路线:26,47,333,466,498,740,944支,983,运通113,641,特9外 保福寺桥西站下车南路口路东。
319,630,619,660,466,保福寺桥南下即到。
地铁乘13线到知春路,出站东行乘641到保福寺桥西

讨论的其他主题:目前还没有想好,想征求大家意见

还有谁有其他的建议可以跟帖,谢谢!

我们一贯鼓励有兴趣的朋友志愿演讲分享,或把任何问题和初步解答都先发帖到这里,以便大家有时间充足准备,更好地增进交流与互助!

drupal的MSN交流群:group137910@msnzone.cn

drupal的QQ交流群:53414099

组织者手机:13811555235(北京的号码,最好发短信联系,谢谢!)

Drupal users of Beijing! Let's meetup!
We can see on drupalchina.org that there are a lot of people in China
and there must be people in Beijing. Lets get together to meet each
other and talk about how we each use Drupal. In this seventh meetup
we'll introduce ourselves and how we use Drupal. We can then dive into
the more specific areas of Drupal based upon who shows up. For example
if you want to talk about Module development we can do that or we can
focus on theming. The important thing is that we meet each other and
build a local community around Drupal users!
Please sign-up (by commenting) for the meetup. We would like to have a good count of
how many people to expect.
You do NOT have to sign-up to come just show up.

When: September 13th, 2008 @ 1pm (time of Beijing)
Where: 海淀区中关村东路66号世纪科贸大厦C座607-608室
how to:by bus 26,47,333,466,498,740,944支,983,运通113,641,特9外 to BAO FO SI bridge west!
or by subway 13th line at ZHI CHUN LU first, then by bus 641 to BAO FO SI bridge west!
What: DRUPAL!!!!
drupal'MSN group:group137910@msnzone.cn

drupal'QQ group:53414099


CCK & Views 模块使用小结(Drupal6.x)之一 
Published on 2008-8-15 19:42:55

CCK和Views应该是Drupal最重要的扩展模块之一(二?),以至于很多Drupal用户在进行D5或D6版本选择时,以这两个模块是否发布或者稳定作为重要依据。
CCK和Views为什么如此重要呢?因为,CCK和Views在从“内容”和“提取”两个方面给Drupal提供了更高的灵活性与适用性。
在谈CCK和Views的具体使用之前,有必要了解其工作原理,这进一步需要我们理解Drupal的部分工作原理。
关于内容组织、提取与呈现的基本思路
组织
Drupal最为特别也最重要的一个特性是,将所有内容(或者具体些叫文章)看作节点(Node),这些节点具有公共的和私有的特性。每个节点都有Title,都有Body,这些是相对显性的,它们就是这些内容我们能看到的部分;每个节点都是有人创建的(Author),创建都是有时间记录(Post date)的,等等,这些是节点的默认相对隐性部分。结合其他的功能模块,每个节点可以控制受这些功能模块影响的程度和方式,比如,是否接受用户评论。
对这些节点的特性进行单独的一个个设置是不合理的,因为可能我们需要面对成千上万的节点(内容)。那么对相似特性的节点进行分组分类,成为一个有效用的方式——这实际上是一个反推——Drupal为我们提供的内容类型(Content types)正是这样一种分组设置Node特性的途径。
提取
作为最基本的使用,印象中我们进行提取的操作几乎没有——因为通过内容类型的设置,如何从内容记录(数据库)中调用数据已经被确定了。比如,在内容类型中我们可以设置Body为空,因而使内容编辑、显示时没有Body正文部分。
但是更进一步的,如果需要一些默认Drupal没有直接提供的内容形式时,就需要用到提取了。在DrupalChina.org中 east 有篇文章《不使用views,如何自定义节点列表显示页面》,详细的介绍了“提取”数据的“手工”方式。
呈现
这个无需多说,主题(Theme)实现了Drupal内容的呈现方式。
CCK功用
准备
前面提到,每个节点都拥有共性。在新安装Drupal后,默认提供了两种类型的内容,Page和Story。可以通过路径admin/content/types/查看他们。Page和Story提供了哪些可编辑内容?标题Title,正文Body。
假如,我想发布一篇关于某本本电脑的文章,希望包含电脑本本图片、本本配置表、本本特性清单,还有本本的价格、订购地址以及反馈邮件,甚至销售本本商家的地址,我该如何处理呢?
最简单的办法,装个FCKeditor一类的可视化编辑器,像在Word中一样,进行上述内容的录入、排版、保存、查看。有没有问题?当然没问题,但是也有很多问题(矛盾啊)。
在我们公司,很难找到一位可以保持前后同类word文档格式一致的同事。Word编辑有太大的随意性,无法控制保证上述各项内容录入的有效性是否完整录入,也无法控制设置格式的一致性——可能本本A的报价单使用表格样式,本本B则使用“价格:¥XXX”的文本形式。使用FCKeditor的问题与此类似,更重要的是,因为FCKeditor编辑的文章内容是一个整体,想要细一些的控制——比如只允许注册用户查看本本商家的地址和反馈邮件——是无法办到的。
CCK提供了另一种“复杂”的办法,你可以在“标题Title”、“正文Body”之外,为各内容类型提供各种字段(Field)级别的新内容条目,结合其他模块,可以进一步对这些字段进行控制,比如显示方式和访问方式(权限)。
扯的有些远,下面说说如何通过CCK设置一个本本类型的内容。开始之前请安装CCK模块以及部分CCK扩展模块,清单如下(其中加粗标注的部分模块是CCK自带的,它们应位于sites\all\modules\cck\modules。关于扩展模块的组织方式请查阅其他文章):

  • cck
  • content_copy
  • content_permissions
  • fieldgroup
  • number
  • optionwidgets
  • text
  • userreference
  • imagefield
  • link
  • email
  • blockreference
  • cck_blocks
  • cck_fieldgroup_tabs
  • cck_formatters
  • commentreference

CCK模块类型
前面罗列了一些常用(实际是在6.X下可用CCK模块还不多)的CCK模块,有必要说一下这些模块的类型。总的来说,CCK模块分为两类:字段类型类(链接、邮件地址等原生字段类型,xxx_reference等引用字段类型)和辅助类(控件类型和显示模式等)。字段类型模块就是用来提供对应类型的字段(汗~~),如果稍有了解数据库的就能明白。
CCK及其扩展模块提供原生字段如number数字、text文本、link链接、email邮件地址、imagefield图像等类型的,这些字段类型都按相应类型的保存实际数据到数据库中;
而引用类型的字段(大都包含reference字样)则可创建其他内容的引用,数据库中只建立一个映射。比如使用userreference,可以创建一个对用户的引用,把它作为购买本本的联系人;
辅助类模块则用来提供更丰富易用的控件类型,比如optionwidgets为文本提供了下拉选择、文本框、自动文本框等等空间模式,用于构建更适合的录入、显示模式;
显示模式的模块,比如cck_fieldgroup_tabs,可以为字段组(后面看图详细介绍)提供标签页的显示外观。cck_formatters,则可为数字指定小数位数的模式,很适合用在金额显示的场合中。cck_blocks可以将CCK字段提供为一个块,可灵活的进行其他应用(区块应用我了解有限,可以查看一下其他文章)。
创建各种类型的CCK字段
新建一个内容类型
前面的废话中,大致说明了CCK存在的价值,也说明了CCK是必须结合内容类型(Content types)来使用的。因为我们要以本本为例,所以新建一个叫做本本的内容类型。这部分比较简单,大致罗列一下步骤即可(暂时使用英文版本):

  • 1、进入 admin/content/types 下,点击 » Add a new content type 新增一个内容类型;
  • 2、进入 admin/content/types/add 下,需要输入的信息为: Name: 本本;Type: benben;Title field label: 名称;Body field label:简介 ,其他暂时不管;
  • 3、点击保存内容类型按钮,保存我们创建的本本内容类型;

保存完毕后我们位于 admin/content/types 下,如图所示:

操作(Operations)下面提供了几个可操作选项,其中增加字段(add field)与管理字段(manage fields)与我们的CCK直接相关,先增加字段。点击进入。
计划一下需要增加的字段及类型
兴冲冲的进来了,却不知道要填写什么...重新计划一下我们要增加的信息(字段)类型:

  • 本本型号,文字类型的,比如我的Acer TravelMate 3280,还可以更细;
  • 本本外观,图片类型的,把本本的外观照贴上去;
  • 本本产地,文本类型的,本本可能是台湾产的;
  • 本本单价,数字类型的,比如5000.00元每台(我不能提供这个价格的TM3280...);
  • 本本特性,文本类型的,比如什么蓝牙什么无线一类的,比较长的一些列表;
  • 本本参数,文本类型的,一项一项的参数名称和参数数据;
  • 本本评价,评论引用类型的,用户对某个本本的评价,可以加进来(抱歉,我还没有测试是先加还是后加,或者是自动引用,后面确认...)
  • 生产厂商网址,网址类型的,提供生产厂商的网站地址;
  • 意见反馈邮箱,邮箱类型的,提供一个邮箱地址可以让用户进行反馈方面的邮件沟通。为了避免垃圾邮件的骚扰,我们控制一下这个信息的访问权限——只有注册用户才能看见,当然你可以进行一些其他的权限设置;

当然还可以列更多,因为仅仅是个例子,也因为其他的问题,自己可以先去试试。
添加文本字段
我们已经在 admin/content/node-type/benben/add_field 页面下,如图所示录入下列信息:

字段名称(Field name)是用于机器识读的名称,因为作为字段类型保存,一旦设定后就不能更改,并且只接受小写英文字符、数字和下划线。所有字段名称以field_开头,总的名称字符数不得大于32(含field_部分);
字段标签(Label)是显示在编辑、浏览时用户友好的名称,希望最终的页面中这一项是什么样子,可以在这里指定;
字段类型(Field type)是存储数据到数据库中的数据类型,说起来有些拗口。简单的说,记事本只能打字,小画家只能画图,我们要根据需要显示的内容选择合适的数据类型。前面已经罗列,“型号”适合使用文本方式保存;
点击继续按钮进入下一步,关于字段类型(Field type)的其他选项后面陆续使用介绍。
添加文本字段
在这个页面中,我们需要设置该字段在创建时的控件类型(Widget type),如图所示,在这里还有机会更改字段标签:

安装上列CCK模块,我们使用文本类型时拥有如下类型的控件,我们选择单行文本框(Text Field)控件:

点击继续按钮到下一页 admin/content/node-type/benben/fields/field_benben_model ,我们会在这里完成field_benben_model字段的全部设置。
这是字段“field_benben_model ”的编辑页面,总共包含如下几个部分:

  • 字段基本信息组(basic information) :这是我们前一步已经编辑完成的信息,包括
  • 字段标签(Label)
  • 控件类型(Widget type)
  • 更改基本信息按钮(Change basic information):如果需要更改,点击这个按钮即可。
  • 字段设置组(settings) :字段设置组仅影响用于本本这个内容类型的field_benben_model字段,包含如下选项:
  • 文本框大小(Size of textfield)
  • 默认值(Default value)
  • 显示分组(Display in group)
  • 帮助文本(Help text)
  • 全局设置组(Global settings) :全局设置组会影响所有引用field_benben_model字段的内容类型,包含如下选项:
  • 必须(Required))
  • 值的数量(Number of values)
  • 文本处理方式(Text processing)
  • 最大长度(Maximum length)
  • 允许的值(Allowed values)

说一下后两组的设置。

文本框大小(Size of textfield):根据我们编辑界面显示的需要,可以为文本框指定宽度(以字符数计算),这个值不会影响最后网页显示的效果;
默认值(Default value):可以为字段指定默认值,我们有两种方式可以选择,直接录入和通过php代码获得,php代码具有更灵活强大的特性。需要注意的是,如果在后面的允许的值(Allowed values)中进行了设置,那么这里的默认值也只能在其中进行选择;
显示分组(Display in group):显示分组为多个字段在编辑、显示时提供了一种整理的手段。实质上是分组为组内的字段提供了一个DIV外框,并为DIV预置了一些显示形式,比如字段集、可折叠字段集、折叠的字段集或者标签页等。当然也可以通过CSS为这些DIV自行定义格式。现在还没有创建字段组,我们后面会进行具体操作;
帮助文本(Help text):需要按照什么要求、什么方式录入字段内容,可以在这里进行指定。帮助文本只出现在创建、编辑时的界面中,不会出现在最终显示的页面内;

必须(Required)):前面我们有提到一种假设——我们希望录入时不漏掉某些重要信息——这里就是实现这种假设的途径。通过选中必须选项,操作员若提交时忘记录入该内容,则会收到一个错误提示并要求纠正。对于本本来说,型号是必须的;
值的数量(Number of values):一个具体的本本,应该只有一个型号,因此我们选择1。但如果是本本的靓照,那可能会有很多,比如6个角度的,那可以选择6。再或者,可能不确定已有照片的数量,由操作员自行决定,那么选择无限;
文本处理方式(Text processing):文本类型的字段可以有两种方式来处理,纯文本( Plain text)和可格式化的过滤文本(Filtered text (user selects input format))。对于型号这类信息来说,纯文本更适合。如果要想有段引用用户评价的内容,那么使用Filtered text更为适合;
最大长度(Maximum length):本本型号的字符数可能就18位,我们不能允许24位的型号存在,那么使用最大长度进行限制,设置为18,超过该字符数的内容在提交时会收到错误提示。可惜没有最小长度的选项,因为我们也不希望2位的错误型号存在,暂行的替代方式是,在帮助文本(Help text)中进行提示;
允许的值(Allowed values):如果要对输入内容进行限制,比如只允许输入今年新发布15款本本的型号,那么可以在这个清单中录入。操作员如果录入了去年的型号或者对手的型号,那么将收到错误提示并要求纠正。允许的值同样也提供php代码生成方式。
需要提醒的是,同时提供普通方式和php生成方式取值的输入区域,一旦使用了php代码,那么它将覆盖普通方式的设置。关于这两种方式录入的细节要求,可以阅读录入框下面的提示信息。
在上述步骤中,我们创建了第一个字段field_benben_model。点击了保存按钮我们会回到管理字段(Manage fields)页面下,我们现在可以继续添加其他预计的文本类型字段。

  • 本本产地,文本类型的;
  • 本本特性,文本类型的;
  • 本本参数,文本类型的;

文本类型的产地、特性、参数我们按照与型号基本相同的方式创建。稍有不同的是“特性、参数”,我选择了多行文本框(Text area(multiple rows))的控件形式(参阅第一部分中的截图)和“格式化”的文本处理方式——我想借用可视化编辑工具直接进行格式的设置。现在的管理字段界面看起来是这个样子。

转到第二部分 >>>



album photos 
Published on 2008-7-18 16:40:24

album photos 2.0 开始测试,你可以在这儿下载测试版: http://drupal.org/node/293897。这个版本加入了几个新功能:
1、全新的flash演示,可惜这个flash是收费的,虽然也提供免费版本,但有限制。看看演示
2、单张图片添加评论功能,如果配合fivestar.module,可以实现针对图片的点评、投票。看截图演示
3、使用SWFUpload来上传图片,SWFUpload有许多样式供选择,很漂亮,多图片上传也很方便 。看截图演示

其它很多功能修正,目前还是开发版,就不一一列举了。另外,我在找开源的flash,能够读取xml,建立相册的,谁有见到功能不错的,推荐一下。类似这样的就行。

不要用于正式环境,还不稳定。
----------------------
album photos模块已经发布到drupal.org,你可以到这儿下载它。你可以在这儿提交bug,如果没有帐号,也可以直接在我的博客上留言
计划中的2.0版中,将做出以下改进:
1、重新设计导航。目前的图片浏览导航有些混乱。
2、改进上传界面。
3、增加投票和评论功能,计划使用votingapi 和 Fivestar。
4、增加相册隐私控制。
5、增加views或cck接口。
------------
album photos 1.0.5的主要更新是让模块支持多语言,默认当然英文,自带了简体中文和繁体中文两个语言包。繁体中文是直接用简体包转换。查看详细介绍,下载album photos 1.0.5.zip

感谢yang_yi_cn@drupal.org为photos.module和photos.admin.inc两个文件提供了大多数的英文翻译。剩下的是我这个蹩脚英语0级的人自己翻译的,译得不好的地方请反馈。

1.0.5除了增加了语言支持,其它没有任何修改。如果你已经安装了album photos,你可以到翻译界面中导入photos/translations文件夹下的语言包,如果是全新安装,drupal系统自动就会导入了,当然前提是你安装时选择的简体或繁体中文。
---------------------
7月28日更新:增加图片zip打包上传,多图片上传更方便。详细介绍
7月27更新:1、增加幻灯片展示相册、节点下图片的浏览方式。2、为exif信息设置了开关,默认为禁用。避免服务器php没有加载exif函数引发错误。幻灯片演示: http://hi.500959.com/node/1/photos/view 。 详细介绍: http://hi.500959.com/node/2
下载模块: album photos 1.0.3-dev.zip
--------------------------
album photos模块经过一段时间测试,暂时没有发现BUG,所以就发布正式版了。正式版里添加了两个新功能:1、在文章中插入图片,可与编辑器整合。原来的方式是在文章中上传图片,图片与文章关联。正式版中保留这个功能,同时提供将已上传的图片插入当前文章。这样可以增加图片的利用率,也便于更灵活的节点排版布局。插入的图片与文章无关联,删除文章并不会删除图片。这个功能也可以方便的和各种编辑器整合,在编辑器中增加插入、上传图片按钮。
载图:Drupal
2、读取图片exif信息,需要php开启exif功能。
截图:西湖
-------------------------------------------------------

photos有如下功能:

1、多重权限控制,从浏览到上传、删除。
2、多图片上传,管理员可自由设置一次上传数量。
3、相册数量限制,可限制用户的相册创建数量。
4、多种格式缩略图,可自由选择尺寸。
5、自由设置图片保存路径,可按用户名、用户ID存储。
6、自由开启,可为其它内容类型增加图片上传栏位。
7、获取图片EXIF信息(新增)。
8、其它……

启用流程:
1、启用上传(upload)模块。
2、启用photos模块。
3、设置基本参数,admin/settings/photos
4、为具体内容类型开启。admin/content/types
5、设置权限。admin/user/permissions
6、开始使用。


Drupal 6.3 and 5.8 released 
Published on 2008-7-10 9:54:18

刚上drupal官方网站上看到的
晕倒 6.3也已经出来了
下载 地址
http://ftp.drupal.org/files/projects/drupal-6.3.tar.gz

Drupal 6.3 and Drupal 5.8, maintenance releases fixing problems reported using the bug tracking system, as well as security vulnerabilities, are now available for download. Drupal 6.3 also includes some changes to the installer to prevent file ownership issues on shared hosts; upgrades jQuery to version 1.2.6; improves PostreSQL compatibility; fixes performance issues in search, menu and form API and contains a variety of other small improvements. It should also be noted that the Views for Drupal 6 release candidate requires Drupal 6.3 to run properly.

Upgrading your existing Drupal 5 and 6 sites is strongly recommended. There are no new features in these releases, but we fixed some notable performance issues too. For more information about the Drupal 6.x release series, consult the Drupal 6.0 release announcement, more information on the 5.x releases can be found in Drupal 5.0 release announcement.


Views 2, CCK 2 和 OG 针对 Drupal 6 同时发布全新 RC 版 
Published on 2008-7-3 15:34:31

7月2日,Views 2, CCK 2 和 OG 三大模块针对 Drupal 6 同时发布了 RC 版。

距离 D6 发布将近五个月后,三大模块终于跟进了。但这次的新版本绝不是简单的从 D5 到 D6 的升级,而是从代码上进行的全新构建。

其中变化最大的就要算 Views 了!新版不仅在易用性上有大量改进,更重要的是针对之前为人诟病的性能问题把整个代码进行了重构。但令人惊讶的是,新版 Views 的体积也暴增到了 2.67 MB,要知道 D6 本身也才 1M 多点。

CCK 和 OG 同样也变化不小,我还没怎么研究,就先不说了。

详细内容请参见官方的新闻原稿(英文)


10 items

欢迎使用 RSS 阅读器订阅本页种子 http://www.drupalchina.org/rss.xml
© 2007    -   About
a site powered by Project Babel