我已经以编程方式将一个“标记”元素添加到Drupal表单中。当它在页面上呈现时,元素出现在提交按钮的包装器中。 澄清:应出现在'field_school_name_value'元素和'distance'元素之间。我已经设置了每个元素的权重,希望这会强制布局对,但它似乎没有帮助。我做错了什么?
<?php
function abq_misc_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form') {
$state_select = array(
'#attributes' => array(
'style' => 'width:10em;',
),
'#default_value' => 'All',
'#multiple' => FALSE,
'#options' => array_merge(array('All' => 'State'), location_get_provinces()),
'#title' => NULL,
'#type' => 'select',
'#weight' => 0,
);
$form['province'] = $state_select;
$school = &$form['field_school_name_value'];
$school['#attributes'] = array(
'size' => 15,
);
$school['#weight'] = 1;
// THIS GUY
$form['divider'] = array(
'#type' => 'item',
'#markup' => '<div>–or–</div>',
'#weight' => 2,
);
$form['distance']['#weight'] = 3;
$search_distance = &$form['distance']['search_distance'];
$search_distance['#attributes'] = array(
'placeholder' => 'miles',
'size' => '5',
);
$search_distance['#prefix'] = 'Within';
$search_distance['#suffix'] = 'of';
unset($search_distance['#title']);
$search_distance['#weight'] = 0;
$postal_code = &$form['distance']['postal_code'];
unset($postal_code['#title']);
$postal_code['#attributes'] = array(
'placeholder' => 'Zip Code',
'size' => '5',
);
$postal_code['#weight'] = 1;
hide($form['distance']['search_units']);
$form['submit']['#weight'] = 4;
}
}
答案 0 :(得分:0)
我不确定为什么会发生这种情况,没有充分的理由让你的元素在提交按钮的包装器中呈现。
一个简单的解决方法是在提交按钮上使用#prefix
属性,这样可以保证在提交按钮的包装器之前立即呈现标记:
$form['submit']['#prefix'] = '<div>–or–</div>';
<强>更新强>
为了解决您的修改问题,我认为如果您设置#prefix
元素的distance
,则可以应用相同的解决方案:
$form['distance']['#prefix'] = '<div>–or–</div>';
有可能由另一个实现hook_form_alter
的模块完成了一些额外的格式化,这些模块恰好在你的后面运行,弄乱了你的好工作。通过将前缀应用于distance
元素,您将确保它紧接在field_school_name_value
元素之前。
我应该提一下,在引用所提供的$form
的数组成员(您正在使用$school = &$form['field_school_name_value'];
时)时,我确实遇到了这个问题。作为一个额外的健全性检查,我建议将这段代码改为此,看看它是否有帮助(在上面的其他建议之前尝试这个,因为它可能只是修复它):
$form['field_school_name_value']['#attributes'] = array('size' => 15);
$form['field_school_name_value']['#weight'] = 1;
而不是
$school = &$form['field_school_name_value'];
$school['#attributes'] = array(
'size' => 15,
);
$school['#weight'] = 1;
答案 1 :(得分:0)
尽管这是一个将近7年的历史,但我还是遇到了这个问题。 解决方法如下:https://www.drupal.org/project/views/issues/2070533
首先,您应该在form_alter挂钩中声明您的标记,但是必须在定义数组中声明'#printed'键。然后,您应该在模块或主题中实现template_preprocess_views_exposed_form()函数。在这里,您可以通过drupal_render呈现所需的form元素,并将其添加到$ variables中。最后,您可以打印出主题中的变量(作为自定义变量或在小部件之间)。 但最简单的版本:将views-exposed-form.tpl.php克隆到主题的模板目录中,按照建议的名称进行命名(例如,views-exposed-form--news.tpl.php),然后在其中换行你想要的。