Вы здесь

Как подставить значение переменной в атрибуты тега в #markup в AJAX форме?

0

Наткнулся на странное поведение ajax-формы.
Есть такая форма, взятая отсюда:

function simplecalc_menu() {
  $items = array();
  $items['calc'] = array(
    'title' => 'Simple calc',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('simplecalc_form'),
    'access callback' => TRUE,
  );
  return $items;
}

function simplecalc_form($form, &$form_state) {
  $form['model']['m1'] = array(
    '#type' => 'textfield',
    '#title' => t("Name 1"),
    '#size' => 3,
    '#default_value' => "0",
  );
  $form['calculate'] = array(
    '#type' => 'button',
    '#value' => 'Calculate',
    '#ajax' => array(
      'callback' => 'simplecalc_form_ajax_callback',
      'wrapper' => 'result',
    ),
  );

  $m1 = isset($form_state['values']['m1']) ? $form_state['values']['m1'] : $form['model']['m1']['#default_value'];
  $form['result'] = array(
    '#markup' => "<div id='result" . $m1 . "'></div>",
  );

  return $form;
}

function simplecalc_form_ajax_callback($form, &$form_state) {
  return $form['result'];
}

И требуется значение переменной подставлять внутрь атрибута тега в #markup.
Так вот, приведённый выше вариант не работает. Работает только так: '#markup' => "<div id='result'>" . $m1 . "</div>",, то есть имя переменной внутри тега.

Вариант с {$m1} ведёт себя так же - '#markup' => "<div id='result{$m1}'></div>", (не работает), '#markup' => "<div id='result'>{$m1}</div>", .

Причём, на обычный submit, не AJAX, работают оба варианта.

upd:
'#markup' => "<div id='result{$m1}'>{$m1}</div>", так не работает.

Версия Drupal: 
7.x
Категория: 
AJAXForm API
Вопрос задан 25.02.2016 - 14:37
Аватар пользователя VVS
VVS
31

Ответы

1
'wrapper' => 'result',

и

'#markup' => "<div id='result" . $m1 . "'></div>",

Логчично что не работает. Wrapper 1-но значение, а у id-другое.

Ответ дан 25.02.2016 - 14:52

Спасибо.
Это всё из-за недочитанных мануалов. :)

Комментарий оставлен 25.02.2016 - 16:12
1
$attrs = array('id' => drupal_html_id('result' . $m1));
'#markup' => '<div ' . drupal_attributes($attrs) . '></div>',

скорее всего так

Ответ дан 25.02.2016 - 15:05