diff --git a/help/api-forms.html b/help/api-forms.html
index 749c5653840d1a66770c0a06d1bf80910aa6343a..f7f4ff6818167f8a7f3d692726855a9cf936e349 100644
--- a/help/api-forms.html
+++ b/help/api-forms.html
@@ -11,19 +11,31 @@ The views handler can also implement views_form_validate() and views_form_submit
return '<!--form-item-' . $this->options['id'] . '--' . $this->view->row_index . '-->';
}
+ function form_element_name() {
+ // Make sure this value is unique for all the view fields
+ return $this->options['id'];
+ }
+
+ function form_element_row_id($row_id) {
+ // You could use values from $this->view->result[$row_id]
+ // to provide complex row ids.
+ return $row_id;
+ }
+
function views_form(&$form, &$form_state) {
// The view is empty, abort.
if (empty($this->view->result)) {
return;
}
- $field_name = $this->options['id'];
+ $field_name = $this->form_element_name();
$form[$field_name] = array(
'#tree' => TRUE,
);
// At this point, the query has already been run, so we can access the results
foreach ($this->view->result as $row_id => $row) {
- $form[$field_name][$row_id] = array(
+ $form_element_row_id = $this->form_element_row_id($row_id);
+ $form[$field_name][$form_element_row_id] = array(
'#type' => 'textfield',
'#title' => t('Your name'),
'#default_value' => '',
@@ -33,7 +45,7 @@ The views handler can also implement views_form_validate() and views_form_submit
// Optional validate function.
function views_form_validate($form, &$form_state) {
- $field_name = $this->options['id'];
+ $field_name = $this->form_element_name();
foreach ($form_state['values'][$field_name] as $row_id => $value) {
if ($value == 'Drupal') {
form_set_error($field_name . '][' . $row_id, "You can't be named Drupal. That's my name.");
diff --git a/views.module b/views.module
index 808595347a36e9cf08ea07ba55215c7dab87cb3e..1bc8088e94bd1fe5311dee1f15995bbdc3910015 100644
--- a/views.module
+++ b/views.module
@@ -1741,6 +1741,15 @@ function views_form_views_form($form, &$form_state, $view, $output) {
$substitutions = array();
foreach ($view->field as $field_name => $field) {
+ $form_element_name = $field_name;
+ if (method_exists($field, 'form_element_name')) {
+ $form_element_name = $field->form_element_name();
+ }
+ $method_form_element_row_id_exists = FALSE;
+ if (method_exists($field, 'form_element_row_id')) {
+ $method_form_element_row_id_exists = TRUE;
+ }
+
// If the field provides a views form, allow it to modify the $form array.
$has_form = FALSE;
if (property_exists($field, 'views_form_callback')) {
@@ -1756,10 +1765,17 @@ function views_form_views_form($form, &$form_state, $view, $output) {
// Build the substitutions array for use in the theme function.
if ($has_form) {
foreach ($view->result as $row_id => $row) {
+ if ($method_form_element_row_id_exists) {
+ $form_element_row_id = $field->form_element_row_id($row_id);
+ }
+ else {
+ $form_element_row_id = $row_id;
+ }
+
$substitutions[] = array(
- 'placeholder' => '',
- 'field_name' => $field_name,
- 'row_id' => $row_id,
+ 'placeholder' => '',
+ 'field_name' => $form_element_name,
+ 'row_id' => $form_element_row_id,
);
}
}