2012-10-12 2 views
5

처럼, 우리의 사용자 지정 양식에 CCK 필드를 첨부 할 수 드루팔 6 CCK와 방법이 있었다 : 나는 드루팔 7에서 동일한 기능을 달성 할 수있는 방법드루팔에서 사용자 지정 양식에 CCK 필드를 추가 7

$field = content_fields('field_name'); // field_name is cck field 
(text_field,text_Area,image_field anything.) 
$form['#field_info'][$name] = $field; 
$form += content_field_form($form, $form_state, $field); 

은 ? 양식이있어서 콘텐츠 유형으로 만든 필드를 사용하고 싶습니다. field.module의 모든 파일을 검토했지만 찾을 수 없습니다. 그 안에는 _attach_field, field_info_Fieldfield_info_instance과 같은 기능이 있지만 양식 필드로 렌더링 할 수 없습니다.

+1

그것은 매우 위험합니다. 당신은 코드 예제를 찾을 수 있습니다 [여기] (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

답변

2

전체 양식을 추가하고 설정을 취소하는 해결책이 마음에 듭니다. 나는 그것을 다른 각도에서 공격하고 있습니다. 임시 양식을 작성하고 보존하고자하는 필드 만 복사하십시오. 여기에 내가 게시 한 내용은 http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908입니다.

임의의 엔티티 번들 (이 경우 자동 완성 노드 참조 텍스트 필드)의 단일 필드를 다른 양식에 추가하려면 양식을 임시 양식 및 양식으로 작성한 다음 복사하여 그 필드 정의. 내 경우, 나는 상거래 체크 아웃 양식에서 일하고 있어요 변경 :

function example_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) { 
    $tmpform = array(); 
    $tmpform_state = array(); 
    $tmpnode = new stdClass(); 
    $tmpnode->type = 'card'; 
    // Create the temporary form/state by reference 
    field_attach_form('node', $tmpnode, $tmpform, $tmpform_state); 
    // Create a new fieldset on the Commerce checkout form 
    $form['cart_contents']['org_ref_wrap'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Support Organization'), 
); 
    // Place a copy of the new form field within the new fieldset 
    $form['cart_contents']['org_ref_wrap'][] = $tmpform['field_card_organization']; 
    // Copy over the $form_state field element as well to avoid Undefined index notices 
    $form_state['field']['field_card_organization'] = $tmpform_state['field']['field_card_organization']; 

    .. 

장점 중 하나 솔루션 가능성 '소스'의 복잡성에 따라 형태는 (너무 복잡는 형상 -으로 설정 해제를 많이 수단 삽입 메소드) 및 소스 양식이 시간이 지남에 따라 새로운 필드를 수신하는지 여부 (새로운 필드는 양식 삽입 메소드의 "대상"양식에 표시됩니다).

솔루션을 공유해 주셔서 감사합니다.

+0

감사합니다 정말 도움이 !! – miteshmap

+0

@texasbronius 사용자 정의 양식에 사용자 입력란을 첨부 할 수 있습니까? 다음은 [form.inc] (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) 파일입니다. – Umair

2

마침내 대답을 얻었습니다. 이 작업을 수행하는 트릭이 있습니다.

$node = new stdClass(); 
$node->type = 'video'; //content type 
field_attach_form('node', $node, $form, $form_state); 
unset($form['body']); //unset other fields like this. 

필드 api에 추가 된 모든 사용자 정의 필드가 표시됩니다. 따라서 양식에 표시하지 않으려는 추가 필드의 설정을 해제해야합니다. 나머지는 IT가 될 것입니다.

관련 문제