1

我目前正在为 Ilias 开发一个插件,我希望有一个模态表,每列都有一个单选按钮,在按下“保存”按钮后,我希望发布所选列的 id我的储蓄功能。

我正在处理的问题是,保存按钮必须在模式页脚中(往返模式的约定,实际上比使用命令按钮更漂亮),所以我不能对表格使用 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 变量中包含选定的列,或者如果没有,如何为我的主 gui 类正确设置 get 变量?

非常感谢!

4

1 回答 1

0

好问题,我最初以某种方式错过了它,但迟到总比没有好;-)。

这里的问题是,UI 组件中还没有 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() 函数可能会帮助您找到您的表 id。如果没有,请使用任何选择器在 dom 中查找表格形式。

于 2019-05-01T07:16:45.200 回答