2012-10-12 41 views
5

Có một phương pháp với CCK trong Drupal 6 để đính kèm một lĩnh vực CCK ở dạng tùy chỉnh của chúng tôi, như:Thêm lĩnh vực CCK mẫu tùy chỉnh trong Drupal 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); 

Làm thế nào tôi có thể đạt được các chức năng tương tự trong Drupal 7 ? Tôi đã có một biểu mẫu và tôi muốn sử dụng trường mà tôi đã tạo cho một loại nội dung. Tôi đã đi qua tất cả các tập tin của field.module nhưng không thể tìm thấy bất cứ điều gì. Có các chức năng trong nó như _attach_field, field_info_Fieldfield_info_instance, nhưng chúng không thể được hiển thị dưới dạng trường biểu mẫu.

+1

Đó là _possible_ nhưng khá lộn xộn. Bạn có thể tìm thấy một ví dụ về mã [ở đây] (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

Trả lời

2

Tôi thích giải pháp của bạn về việc thêm toàn bộ biểu mẫu và hủy cài đặt. Tôi đang tấn công nó từ một góc khác-- tạo ra một hình thức tạm thời ném đi và chỉ sao chép vào (các) trường mà bạn muốn giữ lại. Đây là những gì tôi đăng tại http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908:

Để thêm một trường duy nhất ra khỏi gói thực thể tùy ý (trong trường hợp này, trường văn bản gật đầu tự động điền) vào biểu mẫu khác, tạo biểu mẫu dưới dạng biểu mẫu tạm thời và formstate, và sao chép vào vị trí định nghĩa trường đó. Trong trường hợp của tôi, tôi đang làm việc trên một hình thức thanh toán thương mại thay đổi:

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']; 

    .. 

Ưu điểm cho một trong hai giải pháp có khả năng phụ thuộc vào độ phức tạp của "nguồn" hình thức (quá phức tạp có nghĩa là rất nhiều unsets với form- phương thức chèn) và liệu biểu mẫu nguồn có bao giờ nhận được các trường mới theo thời gian hay không (các trường mới sẽ hiển thị trên biểu mẫu "đích" của bạn trong phương thức chèn biểu mẫu).

Cảm ơn bạn đã chia sẻ giải pháp của mình!

+0

Cảm ơn đây là Thực sự hữu ích!! – miteshmap

+0

@texasbronius Bạn có thể giúp tôi đính kèm một trường người dùng vào biểu mẫu tùy chỉnh của tôi không? Đây là tệp [form.inc] (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) – Umair

2

Cuối cùng, bạn có câu trả lời. Đây là thủ thuật để làm điều này.

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

điều này sẽ hiển thị tất cả các trường tùy chỉnh được thêm vào trường api. vì vậy bạn cần phải bỏ đặt bất kỳ trường bổ sung nào mà bạn không muốn hiển thị trong biểu mẫu của mình. phần còn lại sẽ là CNTT.

Các vấn đề liên quan