首页 > 解决方案 > 具有可重新分配变量/动态状态的十月 CMS 插件

问题描述

我正在尝试创建一个十月 CMS 插件,其中包含可以更改和更新的变量。该应用程序使用 API 来预订服务,因此我试图保留的“状态”是购物车中的项目,同时客户应该继续搜索可用项目并添加它们,同时插件“记住”什么是存储在购物车中。当一个项目被添加到购物车时,插件必须记住购物车中已经存在的内容,而不仅仅是正在添加的内容。我找不到任何方法在插件组件中存储信息。我不想使用数据库/模型来存储数据,因为它应该只被临时存储。

我试图在我的类定义中重新分配变量但没有成功,我试图引用页面中的变量但没有成功。

$current_value = $this->page['var']; //returns nothing

但是我不能用这个来引用任何东西,我只能设置页面变量,不能读取它们。

我的 Plugin.php 文件:

use Cms\Classes\ComponentBase;
class MyPlugin extends ComponentBase
{
    public $var;
    public $var_new;

    public function componentDetails()
    {...}
    public function defineProperties()
    {...}
    public function init()
    {
      $this->var = "value 1";
      $this->var_new = "value 2";
    }
    public function onAddItem()
    {
      $this->page['var'] = $this->var_new;
      $this->var_new = "value 3";
    }

我的 default.htm 文件:

{% set var = __SELF__.var %}

<form  data-request="{{__SELF__}}::onAddItem" data-request-update="'{{__SELF__}}::update': '#retrieved_events'">
  <input type="submit" value="Update Value">
</form>

<ul id="retrieved_events">
  {% partial __SELF__~'::update'  var=var %}
</ul>

我的 update.htm 文件:

<p>{{var}}</p>

当页面加载时,页面上“var”的初始值为“value 1”,正如我所期望的那样。然后我单击提交按钮并将其更改为“值 2”,然后我想第三次单击它,值应该是“值 3”,但它仍然是值 2。有没有办法做到这一点?在方法中重新分配对象参数似乎什么都不做,似乎我只使用函数的本地范围和对象的初始设置值,并且我没有任何持久性可以使用。

标签: octobercms

解决方案


推荐阅读