Drupal field_settings_form [英] Drupal field_settings_form

查看:78
本文介绍了Drupal field_settings_form的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Drupal做了我自己的一个地址。它显示的东西,如街道,数字,拉链,...到目前为然这么好。但由于某些原因,所有字段都是必需的。虽然在UI或Array中设置了需要的集合。



所以我想编辑它的field_settings_form。我发现自己是Drupal核心代码中的一个例子,但它并没有帮助我很多。 field_settings的目标是使字段可见或不可见,不需要。所以我想出了这个代码(我从 user_reference.module 得到它)

  function mymodule_field_settings_form($ field,$ instance,$ has_data){
$ settings = array_keys($ field ['settings']);
$ form = array();
$ form ['required_fields'] = array(
'#type'=>'checkboxes',
'#title'=> t('必填字段'),
'#default_value'=> is_array($ settings ['required_fields'])
?array('required')
:array(),
'#options'=> $ settings,
);
return $ form;
}

但我很困在这里。任何有这方面经验的人?

解决方案

经过大量的研究和更多的试验和错误,我发现自己。
首先,我需要填写表单设置页面,所以我们可以检查该页面是否可见/需要。

  function mymodule_field_settings_form($ field,$ instance,$ has_data){
$ address_fields = array_keys($ field ['columns']);

//获取所有的地址值并将它们放在一个数组中
$ options = array();
foreach($ address_fields as $ value){
$ options [$ value] = $ value;
}

//填写下拉列表中的值
$ form = array();
$ form ['required_fields'] ['#type'] ='checkboxes';
$ form ['required_fields'] ['#title'] = t('必填字段');
$ form ['required_fields'] ['#default_value'] = $ field ['settings'] ['required_fields'];
$ form ['required_fields'] ['#options'] = $ options;

$ form ['visible_fields'] ['#type'] ='checkboxes';
$ form ['visible_fields'] ['#title'] = t('Visible fields');
$ form ['visible_fields'] ['#default_value'] = $ field ['settings'] ['visible_fields'];
$ form ['visible_fields'] ['#options'] = $ options;

return $ form;
}

在另一个功能中,我说了这个。 $ element 调用一个返回所有可用元素的函数。它在上面的函数中带有与 $ options 相同的值。如果'required_field'已经开启,那么我们需要,如果'visible_field'不在,我们unset it!

  $ element = _mymodule_load_element_fields(); 

foreach(array_keys($ element)as $ field_key){
$ element [$ field_key] ['#default_value'] = isset($ items [$ delta] [$ field_key]) ? $ items [$ delta] [$ field_key]:''; //设置默认值
$ element [$ field_key] ['#required'] = $ field ['settings'] ['required_fields'] [$ field_key]!='0'

//设置必需属性
if($ field ['settings'] ['visible_fields'] [$ field_key] =='0'){
unset($ element [$ field_key]);
}

我希望这有助于您!


I made my own Field in Drupal for an address. It displays things like street, number, zip,... So far so good. But for some reason, ALL field are required. Although there are set required in the UI or the Array.

So I would like to edit it's field_settings_form. I found myself an example in the Drupal-core code, but it doesn't help me a lot. Goal of the field_settings is to make the fields visible or not and required or not. So I came up with this code (I got it from user_reference.module)

function mymodule_field_settings_form($field, $instance, $has_data) {
    $settings = array_keys($field['settings']);
    $form = array();
    $form['required_fields'] = array(
        '#type' => 'checkboxes',
        '#title' => t('Required fields'),
        '#default_value' => is_array($settings['required_fields'])
            ? array('required')
            : array(),
        '#options' => $settings,
    );
    return $form;
}

But I'm quite stuck here. Anyone with some experience in this matter?

解决方案

After a lot of research and even more trial and error, I found this myself. First, I need to fill the "Form Settings" page, so we can check whether or not the page should be visible/required.

function mymodule_field_settings_form($field, $instance, $has_data) {
    $address_fields = array_keys($field['columns']);

    // Get all the address values and put them in an array
    $options = array();
    foreach ($address_fields as $value) {
        $options[$value] = $value;
    }

    // Fill in the values in the dropdown
    $form = array();
    $form['required_fields']['#type'] = 'checkboxes';
    $form['required_fields']['#title'] =  t('Required fields');
    $form['required_fields']['#default_value'] = $field['settings']['required_fields'];
    $form['required_fields']['#options'] = $options;

    $form['visible_fields']['#type'] = 'checkboxes';
    $form['visible_fields']['#title'] =  t('Visible fields');
    $form['visible_fields']['#default_value'] = $field['settings']['visible_fields'];
    $form['visible_fields']['#options'] = $options;

return $form;
}

And in anther function, I stated this. $element calls a function which returns all the elements available. It carries the same values as $options in the function above. If the 'required_field' is on, we make it required, if the 'visible_field' isn't on, we unset it!

  $element = _mymodule_load_element_fields();

    foreach (array_keys($element) as $field_key) {
       $element[$field_key]['#default_value'] = isset($items[$delta][$field_key]) ? $items[$delta][$field_key] : '';        // Set default value
       $element[$field_key]['#required'] = $field['settings']['required_fields'][$field_key] != '0';

    // Set required property
    if ($field['settings']['visible_fields'][$field_key] == '0') {
        unset($element[$field_key]);
    }

I hope this helps you!

这篇关于Drupal field_settings_form的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆