【问题标题】:How do you update a backend form after adding a relation using the relationRender in OctoberCMS?在 OctoberCMS 中使用关系渲染添加关系后如何更新后端表单?
【发布时间】:2019-08-05 10:49:35
【问题描述】:

我有 2 个模型 Booking 和 Attendee 具有多对多关系

我还有一个 BookingAttendee 枢轴模型 - 所以我可以利用这些具有的 afterCreate 方法。

在我想要添加与会者的预订的后端表单中 - 我正在使用部分来呈现与 <?= $this->relationRender('attendees') ?> 的关系,并且一切正常。

每次添加或删除参与者时,我都希望在页面上更新预订的一些价格属性。

relationWidget 上是否有任何类型的方法在创建关系后发生,可以让我更新页面上的 div?

根据文档,我可以使用这 4 种方法在 RelationController 上进行扩展

relationExtendViewWidget()
relationExtendManageWidget()
relationExtendPivotWidget()
relationExtendRefreshResults()

问题是我不知道如何使用这些来更新页面上的内容。

【问题讨论】:

  • 仅供参考,您不能在 Pivot 模型上使用 afterSave。我在您的 github 存储库中看到了一条评论,您想知道为什么。 Pivot 模型不像普通模型那样具有事件前后的挂钩。这是一个已知问题github.com/octobercms/october/issues/2747

标签: pivot octobercms octobercms-plugins octobercms-backend octobercms-widgets


【解决方案1】:

您必须在关系渲染中添加一个具有唯一 ID 的 div。 例如:

<div id="delegates-relation">
    <?= $this->relationRender('delegates') ?>
</div>

然后在您的控制器中,您必须添加relationExtendRefreshResults($field) 方法并使用上面定义的 id 从关系渲染中返回您的新 html。

/**
 * Update fields after a relation has changed
 *
 * @param $field the relation field that has changed.
 * @return array|null
 */
public function relationExtendRefreshResults($field):? array
{
    if ($field !== 'yourField') { // here you can check which field was updated.
        return null;
    }

    return [
        '#delegates-relation'=> $this->relationRender('delegates'),
    ];
}

【讨论】:

  • 我认为这不能解决我的问题,除非我误解了。我不需要再次呈现关系。在预订表格上,我有一个#total-price div,一旦在预订中添加或删除了与会者,我想用新的总价更新它。我认为我无法在 relationExtendRefreshResults() 方法中访问 Booking 模型 - 只有当与会者被移除时才会被解雇。未添加。 ://
  • @NeilCarpenter 对我来说,创建新项目时会触发表单。如果您在刷新结果方法中的预订控制器中,则可以获取预订模型。 /** @var Form $formWidget */$formWidget = $this-&gt;formGetWidget();/** @var $model your model*/$model = $this-&gt;formGetModel();
  • 将参加者添加到预订时,我仍然没有触发 relationExtendRefreshResults()。流程是,我单击“添加与会者”按钮,显示一个弹出窗口,我选择要添加的与会者,然后显示一个数据透视表。然后我点击添加按钮。我敢肯定,我不可能是唯一一个试图解决这个问题的人
  • github.com/neilcarpenter007/ncarps-bookings - 他是我试图实现 Jacob 的剥离支持版本
  • @NeilCarpenter 我已经尝试修复它,但它看起来像是 OctoberCMS 中的一个错误。我认为您应该询问论坛或在 github 上创建问题。如果你也在那里分享你的插件,也许有人可以提供帮助。
猜你喜欢
  • 2021-09-22
  • 2017-07-10
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2020-01-15
相关资源
最近更新 更多