Builder插件通过部分设置标识符值

时间:2018-07-19 01:55:29

标签: builder octobercms

我正在尝试使用通过“记录详细信息”组件通过构建器插件设置的输出数据,并遇到一些问题。

在我创建的插件Schools中,我有讲师(设置为与我单独创建的讲师插件的关系)。可能有多个讲师,因此他们以数组的形式存储在数据库中。像这样:

[{"instructor":"69"},{"instructor":"79"},{"instructor":"80"},{"instructor":"96"}]

数字代表教师表的行ID

在我的CMS中,我可以将所有School信息恰好拉到部分(Builder Details)中,并且可以拉出教师的数组,但是我正在努力传递此数组以查找ID并获取教师信息。我现在的想法是像这样将其发送到另一个部分:

{% "school/instructor" insProfile = instructorID %}

部分学校/教师的ID很好。我已经包括了“构建器详细信息”组件,并使用以下内容对其进行了设置:

Alias: builderDetails
ModelClass: Instructors Plugin
Identifier value: insProfile 
Key Column: id 
Display Column: member_name

我正在获取未找到结果的记录。对于如何设置标识符值以匹配我通过我的部分传递的值,我感到困惑。在运行{%set record = ...%}之前,我尝试过{%set identifierValue = insProfile%},但这也不起作用。

我不能使用:slug,因为它已经生成了School页面所需的内容。在TLDR中,看来我最终希望通过另一个部分标签和另一个标签来复制此功能。

仍然学习10月,因此不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为原始文章有点冗长,最终我想做的就是将变量传递到组件中。如:

{% component 'builderDetails' identifierValue=dynamicVar %}

这似乎不起作用,因为构建器详细信息组件在页面加载中产生的距离太长而无法获取变量更改。

根据OctoberCMS文档,对我而言,最好的解决方案是创建自己的组件,该组件将在使用onRender()函数处理页面之前接受该变量。

    public function onRender()
{
    // This code will be executed before the default component
    // markup is rendered on the page or layout.
    $this->profileID = $this->property('insProfile');
    $this->ins = $this->getUserInfo($this->profileID);
}  

这使我可以将组件放入部分,并使用变量'insProfile'请求该部分。该组件将在页面/插件生成之前使用insProfile属性,并使用该变量代替默认变量。

然后我设置另一个函数来查询所需的正确用户信息(getUserInfo)

如果构建器插件的组件可以以我不需要这样做的方式进行更新,那将是很好的,因为构建器插件相当广泛。

将其发布以防其他人遇到此问题,并且不确定将局部变量传递到组件中的位置/方式。