Как опубликовать выбранный столбец графического интерфейса в моем основном графическом интерфейсе в Ilias?

В настоящее время я работаю над плагином для Ilias и хочу, чтобы таблица была модальной, с переключателем для каждого столбца, и после нажатия кнопки "Сохранить" я хочу, чтобы идентификатор выбранного столбца был опубликован для моя функция сохранения.

Проблема, с которой я сталкиваюсь, состоит в том, что кнопка сохранения должна быть в модальном нижнем колонтитуле (условное обозначение модального цикла туда и обратно, и на самом деле гораздо красивее, чем командная кнопка), поэтому я не могу использовать функциональность addCommandButton для таблицы.

У меня есть такой код в моем основном классе GUI:

$modal = $factory->modal()
        ->roundtrip("title"), $this->getModalContent()
        ->withActionButtons([
            $factory->button()->standard("save", $this->ctrl->getLinkTargetByClass(myGUIClass::class, "save"))
        ]);
$modalbutton = $factory->button()->standard("open modal", "")->withOnClick($modal->getShowSignal());
$mytemplate->setVariable("SOMEVARIABLE", $renderer->render([$modalbutton, $modal]));

И функция getModalContent делает некоторые вещи, а затем запрашивает таблицу html:

$tab = new ilMyGUIClassModalTableGUI($this, "parentCmd");
$html = $tab->getHTML();

$modalContent = $factory->legacy($html);
return $modalContent;

Класс GUI таблицы выглядит следующим образом:

 function __construct($a_parent_obj, $a_parent_cmd)
 {
     global $DIC;

     $this->ctrl = $DIC->ctrl();
     $this->lng = $DIC->language();
     $this->access = $DIC->access();
     $this->user = $DIC->user();

     $ilUser = $DIC->user();

     $this->parent_obj = $a_parent_obj;
     $this->cur_id = //an_arbitrary_old_id;

     parent::__construct($a_parent_obj, $a_parent_cmd);
     $this->setData($this->getData());
     $this->setTitle("some title");
     $this->setLimit(9999);

     $this->addColumn("", "", "", true);
     $this->addColumn("column1");
     $this->addColumn("column2");

     $this->setEnableHeader(true);
     $this->setRowTemplate("tpl.template.html", "tplPath");
     $this->disable("footer");
     $this->setEnableTitle(true);

     $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
 }

 function getData()
 {
     return //an array with id, value_column_1, value_column_2;
 }

 protected function fillRow($a_set)
 {
     if ($this->cur_id == $a_set["id"])
     {
         $this->tpl->setVariable("CHECKED", "checked='checked'");
     }

     $this->tpl->setVariable("ID", $a_set["id"]);
     $this->tpl->setVariable("COLUMN1", $a_set["column1"]);
     $this->tpl->setVariable("COLUMN2", $a_set["column2"]);
     $this->ctrl->setParameter($this->parent_obj, "my_postvar", $a_set["id"]);
 }

Теперь, когда я нажимаю кнопку сохранения, она получает только последний заданный параметр, а не тот из столбца, который я выбрал в переменной $_GET.

Есть ли возможность иметь выбранный столбец в переменной post или, если нет, как правильно установить переменную get для моего основного класса графического интерфейса?

Большое спасибо!

1 ответ

Решение

Хороший вопрос, я сначала как-то пропустил, но лучше поздно, чем никогда;-).

Проблема в том, что в компонентах пользовательского интерфейса еще нет реализации Table, которую вы можете использовать для этого сценария. Как вы только что поняли, реализация старой таблицы не работает так гладко с модалами.

То, что делает ваша таблица, она создает форму для публикации ваших значений с помощью кнопки отправки форм (в вашем случае, кнопки, добавленной addCommandButton). Однако, поскольку вам не нужна эта кнопка, вам нужно обойти это. В современных браузерах вы можете обойти свой путь, используя форму атрибута, чтобы иметь кнопку отправки за пределами форм, однако у вас все равно будут проблемы с обработкой этого в модальном режиме.

Поэтому я рекомендую вам добавить несколько JS к кнопке модели, читая публикацию значений форм (таблиц) при отправке). Будет выглядеть примерно так:

$modal = $factory->modal()
        ->roundtrip("title"), $this->getModalContent()
        ->withActionButtons([
            $factory->button()->standard("save", "#")
            ->withOnLoadCode(function($id) {
              return "$(\"#$id\").click(function({
                        $(\"#$id_of_your_tables_form\").submit();
                     });";
        })
]); 

Обратите внимание, что функция getId() вашей таблицы, вероятно, поможет вам найти идентификатор вашей таблицы. Если нет, используйте любой селектор, чтобы найти форму таблиц в DOM.

Другие вопросы по тегам