2010-07-31 5 views
4

나는 PHP에 경험이 없다. template.php의 theme 메소드를 사용하여 Drupal 폼을 수정하기위한 튜토리얼을 따라했습니다.Drupal 양식 필드 수정 - 배열의 [#weight]이 존중되지 않습니까?

어떤 이유로 필드의 [#weight] 속성이 해당 값을 따르지 않습니다. 제목 입력란 [제목] 위에 카테고리 입력란 [제목]을 이동하고 싶습니다. 내가 볼 수있는 내 배열을 인쇄 할 때

$form['cid']['#weight'] = 0.003; 
$form['subject']['#weight'] = 0.004; 

내가 값이 변경 볼 수 있지만 내가 양식을 렌더링 할 때 변경이 이루어지지 않습니다 이러한 코드의 라인은 내가 사용된다. 나는 모든 수정 후에 이미 성능 캐시를 지웠다.

당신이 여기에 관심이 있다면

내 인쇄 된 배열의 조각입니다 :

많은 감사
[subject] => Array 
     (
      [#type] => textfield 
      [#title] => Subject 
      [#maxlength] => 255 
      [#required] => 1 
      [#post] => Array 
       (
       ) 

      [#programmed] => 
      [#tree] => 
      [#parents] => Array 
       (
        [0] => subject 
       ) 

      [#array_parents] => Array 
       (
        [0] => subject 
       ) 

      [#weight] => 0.004 
      [#processed] => 1 
      [#description] => 
      [#attributes] => Array 
       (
       ) 

      [#input] => 1 
      [#size] => 60 
      [#autocomplete_path] => 
      [#process] => Array 
       (
        [0] => form_expand_ahah 
       ) 

      [#name] => subject 
      [#id] => edit-subject 
      [#value] => 
      [#defaults_loaded] => 1 
      [#sorted] => 1 
     ) 

    [cid] => Array 
     (
      [#type] => select 
      [#title] => Category 
      [#default_value] => 1 
      [#options] => Array 
       (
        [1] => General Enquiries 
        [2] => Support 
       ) 

      [#required] => 1 
      [#post] => Array 
       (
       ) 

      [#programmed] => 
      [#tree] => 
      [#parents] => Array 
       (
        [0] => cid 
       ) 

      [#array_parents] => Array 
       (
        [0] => cid 
       ) 

      [#weight] => 0.003 
      [#processed] => 1 
      [#description] => 
      [#attributes] => Array 
       (
       ) 

      [#input] => 1 
      [#size] => 0 
      [#multiple] => 
      [#process] => Array 
       (
        [0] => form_expand_ahah 
       ) 

      [#name] => cid 
      [#id] => edit-cid 
      [#value] => 1 
      [#defaults_loaded] => 1 
      [#sorted] => 1 
     ) 

,

크리스

답변

9

CCK를 사용할 때 당신은 일반적으로 노드의 형태에 그 동작을 참조하십시오. >콘텐츠 형식 - ->[컨텐츠 유형] ->관리 분야 CCK가 컨텐츠 관리에를 이동하여 자신의 주문 시스템 구성과 기본 및 CCK 필드에 무게를 무시하기 때문이다.

물론 CCK를 사용하지 않으면 (아마도 옵션이 아님) #weight 값이 존중됩니다.

Forms API는 #weight의 소수를 허용하지만 정수를 사용하는 것이 좋습니다.


편집

사용자 정의 모듈, 제약의 CCK 선물 내에서 작업 할 경우에 당신은 CCK의 변경합니다 후 폼 요소의 가중치를 변경하는 #pre_render 핸들러를 구현해야합니다 그들 :

문제는 당신이 주제 전에 CID를 주문한 것이다 동안 그래서, 당신은 무게가 다른 형태의 요소에 사용했다 CCK 값 무슨 생각이없는 것입니다
function mymodule_form_alter(&$form, &$form_state, $form_id) { 
    $form['#pre_render'][] = 'mymodule_form_alter_weight'; 
} 

function mymodule_form_alter_weight($elements) { 
    $elements['cid']['#weight'] = 0.003; 
    $elements['subject']['#weight'] = 0.004; 

    return $elements; 
} 

는 두 필드는 표시 할 수 페이지의 다른 모든 필드의 중간에 있지만 원래 위치는 아닙니다.

CCK는 몸무게를 줄 때 모퉁이가되도록합니다. 필드 관리>->콘텐츠 형식 - ->[내용 유형] 형태의 주문을 처리하는 올바른, 드루팔/CCK의 방법은 컨텐츠 관리에을 관리자가 선택한 사항을 존중하는 것입니다.

맞춤 양식 요소가있는 경우 에 표시되도록 CCK에 알릴 수 있습니다. 을 구현하여 필드를 관리합니다. 위의 코드 계속 :

function mymodule_content_extra_fields() { 
    $extras['mymodule'] = array(// Name of field 
    'label' => t('Mymodule'), 
    'description' => t('Mymodule field'), 
    'weight' => 10, // The default weight, can be overriden on Manage Fields 
); 

    return $extras; 
} 
+0

의미가 있습니다. 이것 주위에 방법이 있습니까? 문의 양식에 예외가 필요합니다.나는 아마도 그것을 테마 수 있지만 코딩 수정이 무엇입니까? –

+0

@Chris, 예, 아니오. 더 많은 정보와 가능한 해결책으로 답변을 업데이트했습니다. –

+0

솔루션을 제공해 주셔서 감사합니다. CCK가 양식 필드를 처리하는 방법을 이해합니다. 내가 사용자 지정 양식을 가지고 있다면이 길을 갈 것이라고 생각하지만 사이트 전체의 연락처 양식에서 하나의 [cid] 필드를 재정렬해야하므로 CSS를 주제로 다루기 만하면됩니다. 나중에 참조 할 수 있도록 귀하의 솔루션을 기록해 두겠습니다. 많은 감사합니다! 대답은 –