常用drupal建站的朋友都知道,CCK是一个不能不用的模块。它太方便太强大了,能让不懂一点技术的人创建出任何想要的字段,比如有些文章需要一个副标题,但是drupal中默认只有一个Title项,这时候就要用CCK创建一个字段了。" E/ W4 j0 G- i* F6 E0 Q- t( W
9 E4 W S# x4 t1 r
但是用我用CCK发现一个问题,如果一个内容类型用CCK创建太多的字段,那么它们的顺序很难控制,比如如果你想创建一个副标题,理想的方式是把这个sub title放到title的下面,这样比较符合常规,而且客户操作起来也更容易理解,但是用CCK创建的sub title 默认是会出现在body下面的,这时候该如何办呢?5 |0 I1 f8 e, z: ^' t6 H& e+ O" ~' R3 r
1 p& c# K6 m. Q3 x `2 w" e! K3 u经过实践,发现用以下方法可以达到效果:( b( C/ T* @9 C2 n+ w# D( {' \
; k6 b: e- I& F1 C$ Z3 T4 @
首先,在template.php文件中加一个函数 function garland_preprocess_node_form(&$variables) { }
* O0 {! \; J1 K/ B0 g. U8 D& [然后再建一个node_form.tpl.php文件,在里面判断一下,比如我用CCK建的form名字叫products_node_form,就可以:
7 z) T2 o8 l* A6 e9 W1 [6 d. Uif ( $variables['form']['form_id']['#value'] == 'products_node_form' ){% @+ I& ]0 T! {0 e) |, J2 x! I. C! I
8 \( b/ S; `8 s
print_r (drupal_render ( $variables['form']['title'] ) );
" M5 g, i) A0 I0 [( f6 t print_r (drupal_render ( $variables['form']['field_subtitle'] ) );
* S" i' `1 b2 S! Y) `$ F print_r (drupal_render ( $variables['form']['taxonomy'] ) );
+ @0 t7 D) r: W7 W4 {& m. | print_r (drupal_render ( $variables['form']['menu'] ) );' U4 o; f7 N' g+ I; X. `
print_r (drupal_render ( $variables['form']['body_field'] ) );
+ f+ t; W4 ^7 U7 q2 Z" m* p print_r (drupal_render ( $variables['form']['revision_information'] ) );0 L3 h+ p- @- y2 T3 i" e/ O9 i
print_r (drupal_render ( $variables['form']['comment_settings'] ) );
+ W- |' |" p6 s: b% \* ? print_r (drupal_render ( $variables['form']['options'] ) );
0 b9 q0 b2 q1 R% B! v( l print_r (drupal_render ( $variables['form']['path'] ) );
9 g; e2 P2 I- l% _. f/ u print_r (drupal_render ( $variables['form']['attachments'] ) );! e. o6 o8 _. O4 q
print_r (drupal_render ( $variables['form']['author'] ) );
( _# _- u+ B( W) }) T) n}9 ^ s7 S# D+ s9 H* p) k, a
, |, s$ N; g8 A6 H# L( P: l! u这样做的好处是灵活,可以随意控制输出的顺序,坏处是很不方便,如果字段多的话这样输出要累的半死。但目前我还没有发现什么好的方法,也许有更好的方法,有代以后深入研究。
- v" j+ M7 O% r另外,如果你想通过程序添加一个字段,也可能通过在这里添加2 f# w3 [7 Q% d2 N9 {/ T
$variables['form']['mybutton'] =array(
3 n" n! l5 F3 b3 i. F5 G% w6 | ###+ Y; O+ L) X0 n( ?9 t5 P* K
);( P$ l: j3 W6 i3 a( h2 ?/ j
等等实现。
' N: s4 s+ M8 {* A+ o
. j, f" n- m0 i) B; c通过以上方法,再结合 CCK中的group分组效果,就可以达到任何想要的字段排序效果。
# x# R" n/ n) u% d( ]6 ~* D% C6 I0 \5 f( U4 W. `; m& z
! ~; J$ T2 @$ I C
|
|