2017-03-10 59 views
0

我需要完成的是將一個鏈接添加到字段控件的節點上(該節點包含格式化指令以正確編譯該字段)。將元素添加到Drupal 8中的字段控件中

到目前爲止,我已經能夠添加節點參考場在該領域的配置形式,使用第三方設置:

function mymodule_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { 
    if ($form_id === 'field_config_edit_form' && $form_state->getFormObject()->getEntity()->get('entity_type') == 'myentity') { 

    $field = $form_state->getFormObject()->getEntity(); 
    $help_page_id = $field->getThirdPartySetting('mymodule', 'help_page_id'); 

    $form['help_page_id'] = array(
     '#type' => 'entity_autocomplete', 
     '#title' => t('Help page'), 
     '#target_type' => 'node', 
     '#selection_handler' => 'default', 
     '#selection_settings' => array(
     'target_bundles' => array('help_page'), 
    ), 
     '#default_value' => $help_page_id ? Node::load($help_page_id) : NULL, 
     '#weight' => 100, 
    ); 

    $form['#entity_builders'][] = 'mymodule_form_field_config_edit_form_builder'; 
    } 
}

現在我有麻煩呈現表單時檢索此信息,並更改字段小部件以顯示鏈接。使用hook_field_widget_form_alter ,我無法從我的觀點得到了自定義的配置值:

function mymodule_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) { 

} 

我想我必須加載現場配置的實體,但我不知道怎麼辦。

+0

我想這會更容易找到你的問題看你的代碼。從你說的話,很難知道這個問題,可能是你的代碼或緩存問題。 – penyaskito

+0

我用代碼編輯了原始信息。謝謝。 –

回答

0

我沒有測試,但這樣的事情應該工作:

function mymodule_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) { 
    // Add a suffix to widget form elements for all fields of type entity_reference. 
    $field_definition = $context['items']->getFieldDefinition(); 
    if ($field_definition->getType() == 'entity_reference') { 
    // TODO: Render the node link to $link 
    $element['#suffix'] = $link; 
    } 
} 
+0

我編輯了代碼以檢查是否設置了第三方設置,但您的提示是正確的。要查找的上下文是$ context ['items'] - > getFieldDefinition()。謝謝! –