常用drupal建站的朋友都知道,CCK是一个不能不用的模块。它太方便太强大了,能让不懂一点技术的人创建出任何想要的字段,比如有些文章需要一个副标题,但是drupal中默认只有一个Title项,这时候就要用CCK创建一个字段了。
% G# w2 x' `8 [( Y9 B, H6 l8 I/ V3 w( m% _. d
但是用我用CCK发现一个问题,如果一个内容类型用CCK创建太多的字段,那么它们的顺序很难控制,比如如果你想创建一个副标题,理想的方式是把这个sub title放到title的下面,这样比较符合常规,而且客户操作起来也更容易理解,但是用CCK创建的sub title 默认是会出现在body下面的,这时候该如何办呢?
2 z1 _5 d! d0 L8 P6 y2 g
; W$ c2 l: X, ~( @" @ U5 W- \% h经过实践,发现用以下方法可以达到效果:
1 `" i% _6 A! |! U* n' v/ h4 b0 g3 H* A1 L# z) P0 S# ^6 t, I( c$ o) p
首先,在template.php文件中加一个函数 function garland_preprocess_node_form(&$variables) { }, U$ u3 @* p/ |% B
然后再建一个node_form.tpl.php文件,在里面判断一下,比如我用CCK建的form名字叫products_node_form,就可以:
& U8 p$ m- D# q" |if ( $variables['form']['form_id']['#value'] == 'products_node_form' ){
' I0 I1 y9 {+ ^ K: e; P7 E3 a9 y0 j, {9 t
print_r (drupal_render ( $variables['form']['title'] ) );
5 A v/ F) E) D print_r (drupal_render ( $variables['form']['field_subtitle'] ) );: M; K- W& d" X$ \ E1 {
print_r (drupal_render ( $variables['form']['taxonomy'] ) );: ?1 ^: G- e" u9 B4 N
print_r (drupal_render ( $variables['form']['menu'] ) ); {0 n4 u# t: Y6 ~3 c' i2 G9 B7 E% N
print_r (drupal_render ( $variables['form']['body_field'] ) );
; q2 z' F& L( W/ n print_r (drupal_render ( $variables['form']['revision_information'] ) );7 v: a0 |" I7 X1 \2 i( V7 |9 b& K/ t
print_r (drupal_render ( $variables['form']['comment_settings'] ) );6 V, q: A% t$ I9 x8 R
print_r (drupal_render ( $variables['form']['options'] ) );
7 n6 Z6 f( ]' J+ U4 w9 J print_r (drupal_render ( $variables['form']['path'] ) );+ H m9 |; Y" W7 L0 Q/ D! K
print_r (drupal_render ( $variables['form']['attachments'] ) ); S/ R6 u8 n8 |5 e
print_r (drupal_render ( $variables['form']['author'] ) );
( R! z1 r n+ y/ y& G9 K- e}
5 X; d" B4 o5 J) g. f d& G+ m1 T ~# j7 P4 k0 F9 H0 U* Q' c
这样做的好处是灵活,可以随意控制输出的顺序,坏处是很不方便,如果字段多的话这样输出要累的半死。但目前我还没有发现什么好的方法,也许有更好的方法,有代以后深入研究。
, P) a" x% _7 y- d另外,如果你想通过程序添加一个字段,也可能通过在这里添加, n' N2 ~$ h0 x& f/ o
$variables['form']['mybutton'] =array(
! S9 \! g2 T, H# j6 R$ K$ b. j ###0 y1 Q1 ]" `, ~' x. G
);9 H* ~ T8 U1 @
等等实现。
, R2 j3 H, A& H+ J5 Y' l% Z
9 }0 S: o; S/ ~# X1 f9 H通过以上方法,再结合 CCK中的group分组效果,就可以达到任何想要的字段排序效果。
: H0 J1 i4 V2 l* c' F! c5 W8 k/ n" f0 ?& _+ B+ h# q, v$ H
8 |& S9 v5 a& u) @5 |! d! h' p |
|