Рейтинг:-2

Добавление списка выбора в вывод tableselect

флаг pt

Я пытаюсь добавить список выбора в некоторые выходные данные таблицы, но разметка отображается как текст.

$ заголовок = [
  'col1' => т('COL1'),
  'col2' => т('COL2'),
];
$строки = [
  1 => [
    'col1' => 'строка-1-ячейка-1',
    'col2' => 'строка-1-ячейка-2',
  ],
  ['col1' => 'тест'],
  ['col2' => 'тест'],
  ['col1' => 'тест'],
  2 => [
    'col1' => 'строка-2-ячейка-1',
    'col2' => $form['example_select'] = [
                  '#тип' => 'выбрать',
                  '#title' => $this->t('Выбрать элемент'),
                  '#варианты' => [
                    '1' => $this->t('Один'),
                    '2' => $this->t('Два'),
                    '3' => $this->t('Три'),
                  ],
                ]
  ],
];
$ форма ['тест'] = [
  '#тип' => 'выбор таблицы',
  '#header' => $заголовок,
  '#options' => $строки,
];

введите описание изображения здесь

Я экспериментировал с кодом выше в buildForm (массив $ form, FormStateInterface $ form_state) функция моего класса контроллера. Класс отображает форму для некоторой пользовательской конфигурации в области администрирования.

Может ли кто-нибудь помочь мне понять, что мне нужно сделать, чтобы мой список выбора отображался как разметка, а не как текст?

Рейтинг:1
флаг fr

Несколько общих советов: Не назначайте числовые ключи, такие как 1 и 2, своим строкам — пусть PHP сгенерирует ключи. Или, если вам действительно нужно установить свои собственные ключи, используйте строковые ключи и дайте КАЖДОЙ строке ключ.То, что вы показываете выше, имеет первую строку с номером 1, затем вторая, третья и четвертая строки не имеют ключей (поэтому PHP будет назначать им последовательно 2, 3, 4), затем вы даете пятой строке ключ 2, который перезаписывает вторая строка (с автоматически сгенерированным ключом 2) - таким образом, вы получите четыре строки, хотя хотели пять. Последовательное назначение ключей строк с самого начала позволит избежать подобных проблем.

Аналогично, когда вы делаете что-то вроде этого:

'col2' => $form['example_select'] = [ ... ]

вы добавляете новый элемент формы в форму в ДВУХ местах - один раз в таблице и один раз вне таблицы. Если это то, что вы намереваетесь, то сначала объявите элемент формы вне таблицы и просто используйте переменную внутри таблицы.

В любом случае, следующее будет делать то, что вы хотите:

$ заголовок = [
  'col1' => $this->t('COL1'),
  'col2' => $this->t('COL2'),
];
$строки = [];

$строки[] = [
  'col1' => 'строка-1-ячейка-1',
  'col2' => 'строка-1-ячейка-2',
];
$строки[] = [
  'col1' => 'строка-2-ячейка-1',
  'col2' => ['данные' => [
    '#тип' => 'выбрать',
    '#title' => $this->t('Выбрать элемент'),
    '#варианты' => [
      '1' => $this->t('Один'),
      '2' => $this->t('Два'),
      '3' => $this->t('Три'),
    ],
  ]],
];

$ форма ['тест'] = [
  '#тип' => 'выбор таблицы',
  '#header' => $заголовок,
  '#options' => $строки,
];
флаг pt
Ух ты! Я устал больше, чем думал. Я действительно извиняюсь за грязный код.Я устал и торопился, что привело к неловкому беспорядку в коде. Спасибо за ваш ответ. Это именно то, что мне было нужно.

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

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