常用drupal建站的朋友都知道,CCK是一个不能不用的模块。它太方便太强大了,能让不懂一点技术的人创建出任何想要的字段,比如有些文章需要一个副标题,但是drupal中默认只有一个Title项,这时候就要用CCK创建一个字段了。9 s n- j# ~, k' R* k6 R+ `( G
; k e2 Y1 x2 c( h但是用我用CCK发现一个问题,如果一个内容类型用CCK创建太多的字段,那么它们的顺序很难控制,比如如果你想创建一个副标题,理想的方式是把这个sub title放到title的下面,这样比较符合常规,而且客户操作起来也更容易理解,但是用CCK创建的sub title 默认是会出现在body下面的,这时候该如何办呢?
1 H1 k- ~: G8 A
$ {1 p1 y# ]' @/ u经过实践,发现用以下方法可以达到效果:
1 @8 }" Y9 ~7 V3 ~0 ~& x3 [
7 X; }4 _" ?* X: ]; e: \首先,在template.php文件中加一个函数 function garland_preprocess_node_form(&$variables) { }( d3 R4 ]3 A4 z& g5 f
然后再建一个node_form.tpl.php文件,在里面判断一下,比如我用CCK建的form名字叫products_node_form,就可以:/ l0 v$ ]0 `0 T9 m& ?& u9 n
if ( $variables['form']['form_id']['#value'] == 'products_node_form' ){
1 V6 b7 _0 A1 w a: j/ }5 O% z, x d8 A3 H
print_r (drupal_render ( $variables['form']['title'] ) );: h' S! M' C8 ~+ C6 H$ m
print_r (drupal_render ( $variables['form']['field_subtitle'] ) );
3 p" Y, W# {4 d' y; o6 t print_r (drupal_render ( $variables['form']['taxonomy'] ) );
8 [: w2 L5 T7 m5 ?! R3 L/ ?! v print_r (drupal_render ( $variables['form']['menu'] ) );" c& [1 [+ E3 U9 G: O6 }% U
print_r (drupal_render ( $variables['form']['body_field'] ) );
) l1 ~' ] N8 R2 G, x print_r (drupal_render ( $variables['form']['revision_information'] ) );
% H! `% ^6 [- Q {: O& K print_r (drupal_render ( $variables['form']['comment_settings'] ) );( @/ l! E4 I: @ r$ [% B. W
print_r (drupal_render ( $variables['form']['options'] ) );
3 J' R5 I+ v. x/ M$ q' ` print_r (drupal_render ( $variables['form']['path'] ) );5 L1 P& t' H3 x8 g
print_r (drupal_render ( $variables['form']['attachments'] ) );' ?; @+ F( Z3 a. ], A
print_r (drupal_render ( $variables['form']['author'] ) );
1 A) b3 X* Y$ D' d}
7 h) ?5 W3 R3 |. B
& o$ E/ w; d" A& r0 e6 {这样做的好处是灵活,可以随意控制输出的顺序,坏处是很不方便,如果字段多的话这样输出要累的半死。但目前我还没有发现什么好的方法,也许有更好的方法,有代以后深入研究。
+ G/ ^. ^3 [6 Q. `另外,如果你想通过程序添加一个字段,也可能通过在这里添加0 s s$ o+ w# }7 g- S
$variables['form']['mybutton'] =array( c8 x! ^+ f; J: _8 h
###( A9 f8 |* x- x7 g; g- o
);
5 H1 F" h3 d3 ~. i7 @5 M等等实现。& q n+ g4 E# D) V* }
- T& \5 @7 T& |5 [$ L/ ^0 p! N
通过以上方法,再结合 CCK中的group分组效果,就可以达到任何想要的字段排序效果。3 j' s A4 [* j# L
8 i: V9 S0 @. U/ p# X4 n% Y
" A. L+ _' U. T
|
|