Рейтинг:-3

How to fill a form field of type fieldset with values from an array

флаг cn

How can I fill a formfield type fieldset with more than one markup value from an array?

foreach ($drugis_postgis_connection->tableNames() as $table) {
    $form['tables'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Tables'),
      '#markup' => $table, 
      '#collapsible' => TRUE, // Added
      '#collapsed' => FALSE,  // Added
  ];

I don't need more fields i want to markup all values from the array in the field. Actually there is only one value, from the array displayed.


Sorry if my question is not clear, i want something like this.

enter image description here

Рейтинг:0
флаг us

Если вы перезапишете $ форма ['таблицы'] на каждой итерации вы получите только один столы на форме. Каждый элемент на $форма должно иметь уникальное имя. Попробуйте что-то вроде этого:

foreach ($drugis_postgis_connection->tableNames() as $key => $table) {

  $форма['таблица' . $ ключ] = [
    /** ... **/
  ];

}

Если вам нужен только один набор полей, попробуйте что-то вроде этого:

$tables = $drugis_postgis_connection->tableNames();
$ форма ['таблицы'] = [
  /** ... **/
  '#markup' => взорвать('', $tables),
  /** ... **/
];
Steffen  avatar
флаг cn
Это отлично работает, но для каждого значения создается собственный блок, я хочу перечислить все таблицы в одной форме ???
флаг us
Я предполагаю, что вы имеете в виду один набор полей. Если это так, я обновил ответ.
Рейтинг:0
флаг us

The code shown in the question doesn't work for two reasons.

  • The foreach loop is overriding $form['tables'] each time, with the effect that $form['tables']['#markup'] contains only the last table name found from $drugis_postgis_connection->tableNames()
  • A fieldset element doesn't use #markup

You need to use code similar to the following one.

$tables = $drugis_postgis_connection->tableNames();

$form['tables'] = [
  '#type' => 'fieldset',
  '#title' => $this->t('Tables'),
  '#collapsible' => TRUE,
  '#collapsed' => FALSE,
];

$form['tables']['list'] = [
  '#markup' => implode(',', $tables),
];

I assume $drugis_postgis_connection->tableNames() returns an array of strings; otherwise, implode(',', $tables) needs to be changed.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.