Drupal 7 开发内部培训资料, 分头诗人

关于drupal中针对form-#options的数组数据格式化的问题

赞成!
0
否决!

通过了解drupal的API得知,表单属性的#options值只能指向数组上标为字符串的array。

 

比如一个select的#options可以是数组$options_value1 = array(  'a' => 'option1',  'b' => 'option2',   'c' => 'option3',),这时#options读出数据没有问题。

但是如果数组格式是$options_value2 = array([0] => 'option1',[1] => 'option2', [2] => 'option3'),

则在#options中指向$options_value2 ,#options是读不出数据的。实际上$options_value1和$options_value2表示的数据是一样的。drupal在options上对数组格式的要求让我很困惑。

 

所以现在我的问题是,drupal是否自己定义了自己的方法来来格式化数组数据,使之符合#options对数据格式的要求。

或者有什么好的方法,可以直接将$options_value2转化为$options_value1的格式。

PS:$options_value2的值是动态获取的,转化的时候可能需要遍历数组。

 

举个实际的例子,比如说我现在想把$options指向$options_value2,但是$options_value2是根据实际情况动态取得的,

 array([0] => 'option1',[1] => 'option2', [2] => 'option3')就是$options_value2的内部结构,但是这个结构drupal不接受,非得是商标是字符串。

也就是说我需要把array([0] => 'option1',[1] => 'option2', [2] => 'option3')转换成array(  'a' => 'option1',  'b' => 'option2',   'c' => 'option3',)。

 

 

4 个回答

赞成!
0
否决!

好像有三种方法

方法1:

'#options' => drupal_map_assoc(array(t('UK'), t('Other'))),

这个方法,能让标签跟值一样

 

方法2:

'#options' => array('a' => t('UK'), 'b' => t('Other')),

这个方法,让标签跟值不愿意

 

方法3:

'#options' => array(t('UK'), t('Other')),

这个没测试,如果通过的话,就是你要的答案。

赞成!
0
否决!

感谢您的回答,t()是drupal的方法不错,但是t()没有办法对变量进行操作,实际上我的#options指向的值是一个动态的数组。

赞成!
0
否决!

方法1:

$form['crust_size'] = array(
  '#title' => t('Crust Size'),
  '#type' => 'select',
  '#description' => 'Select the desired pizza crust size.',
  '#options' => array(t('--- SELECT ---'), t('10"'), t('12"'), t('16"')),
);

生成代码:

<select id="edit-type" name="type" class="form-select">
  <option value="0" selected="selected">--- SELECT ---</option>
  <option value="1">10</option>
  <option value="2">12</option>
  <option value="3">16</option>
</select>

 

方法2:

# the values for the dropdown box
$form['type_options'] = array(
  '#type' => 'value',
  '#value' => array('APPLICATION' => t('Application'),
                    'DEVELOPMENT' => t('Development'),
                    'ENHANCEMENT' => t('Enhancement'))
);
$form['type'] = array(
  '#title' => t('Project Type'),
  '#type' => 'select',
  '#description' => "Select the project count type.",
  '#options' => $form['type_options']['#value'],
);

 

生成代码:

 

<select id="edit-type" name="type" class="form-select">
  <option value="APPLICATION" selected="selected">Application</option>
  <option value="DEVELOPMENT">Development</option>
  <option value="ENHANCEMENT">Enhancement</option>
</select>

 

方法3:

$values => array('APPLICATION' => t('Application'),
                 'DEVELOPMENT' => t('Development'),
                 'ENHANCEMENT' => t('Enhancement'))
);
$form['type'] = array(
  '#title' => t('Project Type'),
  '#type' => 'select',
  '#description' => "Select the project count type.",
  '#options' => $values,
);

生成代码:

<select id="edit-type" name="type" class="form-select">
  <option value="APPLICATION" selected="selected">Application</option>
  <option value="DEVELOPMENT">Development</option>
  <option value="ENHANCEMENT">Enhancement</option>
</select>
赞成!
0
否决!

感谢诗人的回答,您的方法是建立在知道#options的值基础上,实际上在我的问题中,#options的值是一个动态的数组,但是数组的结构是一致的,问题是这个结构drupal不识别。