Organic groups是一个类似views,ubercart之类的模块集合,可以实现用Drupal搭建复杂的群组功能,再辅以一些附加的周边小模块,即可实现群组下对用户的权限控制,以及相关内容的显隐的功能。! E1 ]# A9 w, y* N8 E4 l% N& B
在搭建群组之前,首选大家要明确一个概念,就是何为群组?群组的最基本要素要那些? B8 K B$ L( V( Z0 N
群组可以理解为一个特定用户群下特定内容的集合,是著名的六度空间理论的重要实现方式。# \: _3 p. s8 ?& t T" ?
用户可以选择加入,或者退出某个群组。
) P1 x3 _* A0 o0 J每个群组也应该有一个独立的主页,以显示群组内的话题,资源等。
( e0 B/ x7 l9 T9 k; @3 v5 g- L# ?群组是可以被特定用户创建的同样如果在权限许可的情况下群主可以Cancel掉自己的群组。0 U# |% a5 [; P6 }7 r
群组和用户之间的关系是多重的,一个用户可以同时加入好几个群组,而且在每个群组里的角色可能不同。比如可以是一个用户可以是一个群组的管理员同时又可以是另一个群组的普通用户 。 4 T6 w0 u, d; [! G" F; t
5 f9 m5 Q M/ y1 V* s* _$ C
0 Q7 n! B, Y1 ]& V好了,现在开始进入正题,正式开始搭建群组。
, `$ l3 x/ i( PDrupal实现群组功能,首选要开启以下模块:
. f) A6 y" K/ c2 Q5 w# K6 i y# T1.Organic groups& n( Z3 [ a, b; l
2.Views' V7 v; L+ C8 u4 H5 e8 H7 z
3.Entity API. J- N3 T7 V% Q! w3 B7 H) b# \
4.Groups create permissions3 y4 i: C4 e6 T/ x
: l! H. h8 j6 Z; O0 `* F+ A开启后出现rebuild permissions按钮,点击后完成升级drupal核心的权限设置。
8 G7 F; `* i* p2 [0 T: ^8 p
3 n" v3 A! @) p8 e }用Organic groups 建立群组,是以数据类型(content type)为基础的。我们需要建立两种新的数据类型,一种数据类型用于展现群组的主页,另一种用于显示群组的内容。1 b6 }/ o! n6 \2 g9 m
) D) x" ]$ [& W) \9 _
打开后台中结构选项,建立新数据类型,类型名为group-page,并在页面下端的group标签里点选radio按钮“group type”和“not a group content type"
# g( N" w+ ]. D- B' ]这样一个展示群组主页的数据类型就建立了。: G/ @- W3 n7 ~0 N! {8 b
接着,我们在后台选择配置(configuration)选项,在group标签下选择”Group field settings“,对群组主页的字段进行设置
7 R, d* ~% {- t具体设置方法:1 [4 d4 {& m% J8 P
在”Group field settings“页面中
, g* @ a I) s点选“bundles”下拉菜单中的“Group”
9 c/ Z9 i& P' |( P" R) k. I/ e点选“fields”下拉菜单中的“group visbilty”5 p: H- y; M: |- ?1 q8 _
然后点击“add field”按钮。这样我们为刚刚建立的群组类型“group-page”增加了一个群组可见性的选择的字段,用来设置群组的公有和私有性。2 S7 M ~8 ~7 H+ n' p
7 o6 E0 m6 d5 v# V& y# G
下面我们为数据类型“group-page”创建一个实体: ~: H. O# Q+ f& _
点添加内容,数据类型选择“group-page”,title项写为"test group" 。因为我们刚刚为“group-page”绑定了一个新的字段,所以我们这时能在body输入框下方看到多出了一个group visbilty项,在此项下我们根据自己具体需求选择"public“ 或是 private。即选择新建的群组是公有群组还是私有群组。那这两者有何区别呢?大家马上就可以看到效果。首选选择公有群组pubilc,并在最下方的标签中设置此内容推送到首页,然后点击完成。返回首页就能我们能看到一个”test group”标签。点击此标签就进入了”test group”的内容页,这个页面其实就是群组”test group”的首页。和我们熟悉的facebook或是linkedin,qq等某个特定群组首页一样,它可以呈现”test group”里群组成员提交的话题,动态,成员列表,最新加入等等与此群组相关的内容,当然这是后话。现在只呈现了一个基础页面(如图)。如果我们创建是选择私有private的话,也就是说,群组只对组成员可见。创建私有群组后,当我们以游客身份或非本组成员账户访问网站时,我们将看不到这个私有的”test group”。
w7 [+ q1 G0 V7 x/ O2 b8 ~5 m) ^; x$ @
接着我们创建群组数据类型,为了简化流程,我们直接在已有数据类型下"Article"下创建。打开数据类型,选择“article”,选择编辑,在编辑页面下端的“group”标签中选择“not a group type”和“ a group content type".现在aticle可以用于呈现群组的内容了。这时添加新内容,内容类型选择“article”,title项写为“test article”,在 ”group audience“选项里选择我们刚刚创建的群组"test group" 。选择保存,即创建了一个新node,标题为“test article”。刷新页面后我们发现了问题,我们的目标是要创建内容,尽在相关选定群组里显示,而在组外不显示,可我们现在创建的“test article”仅仅是一个公有的文章,群组"test group" 的主页上也显示不了。因此我们需要进一步的配置,使之符合我们的要求。趁热打铁,我们现在马上开始。
# P& c" r) W0 y, N$ `) I
# x" m; n: ?( {% }第一步:设置文章“test article”为组”test group”的私有内容
0 Y! i4 ^. F. @5 P首先选择配置,在group标签下选择”Group field settings“。
3 v: n2 e% x& k在”Group field settings“页面中
! l* F0 M# r% y$ j& a8 C点选“bundles”下拉菜单中的“article”
, I$ t9 \3 l7 w/ z* |) A3 m2 L4 a点选“fields”下拉菜单中的“group content visbilty”
4 ?. M4 ^, S+ h8 D7 S然后返回编辑文章“test article”,在编辑内容页中“group content visbilty”里选择“private---accessable only to group members” 这样就是设置了此篇内容仅对test group的组内成员显示。保存后,我们以游客身份或非test group组内成员账户访问网站时,文章“test article”将不可见。
2 k* @8 ~( B/ e$ O+ o% }; @" x3 }# y4 Y9 ^1 R0 Y( ]
第二步:我们已经控制了文章“test article”特定群组的私有性。但是如何把它呈现在”test group”的主页上呢?我们现在开始重复再次选择配置,在group标签下选择”Group field settings“。
h; N: }! [: _6 ?8 A# X: `. {在”Group field settings“页面中
8 I! ]" {6 V% j- g* c& b; {点选“bundles”下拉菜单中的“group”
7 Q* W* @! L5 Q1 B; `点选“fields”下拉菜单中的“group views”) q6 B* y5 H- J
然后返回设置内容类型,选择编辑数据类型”group-page",这时能发现这此数据类型下多了个字段"group views“,点击管理字段,选择"group views“项的编辑,进入编辑页面后选择"default value"为”og_nodes(default)“,点击保存。然后在”manage display“中选择"group views“对应的格式为"group views“。点击保存。- p' b0 S2 [* Y3 C: [
然和再编辑刚才创建的群组”test group“页,"group views“的选项选择为”og_nodes(default)".+ A% A5 S L& G
经过稍显复杂的操作后,全部数据类型方面的设置全部完成。现在保存后,我们以游客身份或非test group组内成员账户和组成员账号访问网站时将看到效果,内容“test article”针对”test group“私有,并且呈现在”test group“的页面上。游客和组外部成员无法看到”test group“下的任何内容。
, N3 i6 ]& a. T2 O% d! I: n先到这里,在下面,我们来探讨一下Organic groups的用户群组控制,即权限问题。
% {0 H0 [: ^6 X/ {- W* g2 a, s$ m
" c% R% I$ T2 O7 U4 [) F6 o% J
- r0 h1 d) r9 V; d5 Y: a7 l4 a9 p# s# Y# V
本文选自雨滴米的博客,谢谢!3 P7 `$ |7 `) A" Q) r
$ K8 C4 B! _' J) I! _) J+ w @
1 h+ X( x$ g8 a. t8 d
# S- O( o9 A6 G, \$ Q8 D. T- V
|
|