资讯专栏INFORMATION COLUMN

October CMS - 快速入门 14 保存Form Widget的数据

GT / 2651人阅读

摘要:下面修改部件,实现数据保存首先需要准备数据变量,给小部件使用接下来就可以修改插件了现在显示了演员表中的所有演员的名,但是,没有显示所有演员的姓。

上节我们只是建立了小插件,但是数据是模拟的,我们希望将数据存储起来,那么我们就需要通过关联表将数据与视频表关联并保存,下面我们打开Builder,创建演员表

【database】

【Models】

【Models】——【Forms】

【Models】——【Lists】

【Models】——【Backend Menu】

【Models】——【Controllers】

【Models】——【Backend Menu】设置URL

刷新页面,然后选择视频,可以进入演员编辑页面:

添加演员数据:

因为我们前期使用了repeater字段存储演员信息,这次我们将用数据库存储演员信息。所以需要将演员这个字段从视频表中删除。

下面我们将要建立一个中间表格作为视频和演员的中间表实现多对多的关联

接下来就需要建立视频和演员表的多对多的关系、

File:pluginsraiseinfomoviesmodelsMovie.php

public $belongsToMany = [
    "genres" => [
        "RaiseinfoMoviesModelsGenre",    // 模型
        "table" => "raiseinfo_movies_movies_genres",    // 中间表
        "order" => "genre_title"
    ],
    "actors" => [
        "RaiseinfoMoviesModelsActor",    // 模型
        "table" => "raiseinfo_movies_actors_movies",    // 中间表
        "order" => "name"
    ]
];

File:pluginsraiseinfomoviesmodelsActor.php

public $belongsToMany = [
    "movies" => [
        "RaiseinfoMoviesModelsMovie",    // 模型
        "table" => "raiseinfo_movies_actors_movies",    // 中间表
        "order" => "name"
    ]
];

通过上述的代码修改,就实现了Movies和Actors表的多对多的关联关系。

下面修改部件,实现数据保存

首先需要准备数据变量,给小部件使用
File:pluginsraiseinfomoviesformwidgetsActorbox.php

public function render()
{
    $this->prepareVars();
    dump($this->vars["actors"]);
    return $this->makePartial("widget");
}


public function prepareVars()
{
    $this->vars["id"] = $this->model->id;
    $this->vars["actors"] = Actor::all()->lists("name","id");
    
}

接下来就可以修改插件了pluginsraiseinfomoviesformwidgetsactorboxpartials_widget.htm






现在显示了演员表中的所有演员的名,但是,没有显示所有演员的姓。我们需要在Actor中做适当修改:pluginsraiseinfomoviesmodelsActor.php

/**
 * 访问器的命名对应的就是full_name
 * @return string
 */
public function getFullNameAttribute()
{
    return $this->name." ".$this->lastname;
}

File:pluginsraiseinfomoviesformwidgetsActorbox.php

public function prepareVars()
{
    $this->vars["id"] = $this->model->id;
    $this->vars["actors"] = Actor::all()->lists("full_name","id");
    
}

这样显示的就会有姓和名了。

为了在前端页面上显示演员的信息,我们需要对select进行设置
File:pluginsraiseinfomoviesformwidgetsActorbox.php

public function prepareVars()
{
    $this->vars["id"] = $this->model->id;
    $this->vars["actors"] = Actor::all()->lists("full_name","id");
    $this->vars["name"] = $this->formField->getName()."[]";
}

File:pluginsraiseinfomoviesformwidgetsactorboxpartials_widget.htm

File:themesraiseinfopagesmovie-single.htm

演员

{% for actor in record.actors %} {{ actor.name }} {{ actor.lastname }} {% endfor %}

刷新前端页面:

通过上面的测试,我们已经知道,演员信息已经存储到数据库了,在前端也显示出来。下面我们刷新后台页面,打开编辑视频信息。我们发现存储的演员信息并没有显示在Select中。

这是因为我们没有设置显示选定的值。
File:pluginsraiseinfomoviesformwidgetsActorbox.php

public function prepareVars()
{
    $this->vars["id"] = $this->model->id;
    $this->vars["actors"] = Actor::all()->lists("full_name","id");
    $this->vars["name"] = $this->formField->getName()."[]";
    // 下面一行
    $this->vars["selectedValues"] = $this->getLoadValue();
}

File:pluginsraiseinfomoviesformwidgetsactorboxpartials_widget.htm

好的,现在我们已经可以显示已选择的演员了,但是,我们如果编辑一个没有设置演员的视频:

解决问题的办法是:
File:pluginsraiseinfomoviesformwidgetsActorbox.php

public function prepareVars()
{
    $this->vars["id"] = $this->model->id;
    $this->vars["actors"] = Actor::all()->lists("full_name","id");
    $this->vars["name"] = $this->formField->getName()."[]";
    if(!empty($this->getLoadValue())){
        $this->vars["selectedValues"] = $this->getLoadValue();
    }else{
        $this->vars["selectedValues"] = [];
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28880.html

相关文章

  • October CMS - 快速入门 15 - 通过Form Widget添加新数据

    摘要:我们将采用方式完成,在提交保存视频之前,通过方式实现提前于保存视频之前,保存演员信息。我们再在数据库中确认一下下面,我们对输入的用户姓名进行分离。 我们试着直接在Select中输入新的演员showImg(https://segmentfault.com/img/bVbcqpZ?w=386&h=276); 点击保存 showImg(https://segmentfault.com/img...

    wing324 评论0 收藏0
  • October CMS - 快速入门 5 创建插件

    摘要:创建插件对于来讲是很简单的事情,因为,提供了一个插件构建器具体步骤这里就不赘述了。安装完成后,会出现上图所示的菜单创建自己的插件的方法是点击如下图所示的小按钮。 创建插件对于October来讲是很简单的事情,因为,October提供了一个插件构建器:RainLab.Builder showImg(https://segmentfault.com/img/bVbcoxL?w=1266&h...

    macg0406 评论0 收藏0
  • October CMS - 快速入门 13 建立自定义Form Widgets

    摘要:所以,实际上我们没有办法保存这些信息。下一节我们将解决这个问题。 在上一节中我们是使用repeater字段存储演员信息的,当然这不是最佳的方式,我们希望,演员的信息能够存储在单独的表中,而且演员的信息可能需要更多的字段进行存储。然后将演员表和其他表进行关联,就好像视频表和风格表之间的关联一样。 showImg(https://segmentfault.com/img/bVbcpEb?w...

    myshell 评论0 收藏0
  • October CMS - 快速入门 12 Repeater字段

    摘要:字段是采取数据存储多条数据的字段。这样演员信息就被保存到了数据库的字段中,以格式存储。查看数据库即可印证上述的结论。这里通过这个例子只是说明这种字段的用法。 Repeater字段是采取Json数据存储多条数据的字段。 【Builder】——【Database】——【raiseinfo_movies_】为表添加一个新的列:actorsshowImg(https://segmentfaul...

    Richard_Gao 评论0 收藏0
  • October CMS - 快速入门 6 基本模板

    摘要:本节将编写一些实现对页面中内容的控制。将内容放入容器文件添加类,让输出的内容在一个容器中。创建菜单编辑点击菜单此页没有头和尾,是因为我们没有给这个页面使用布局再次查看页面,则显示正常了为当前页面菜单添加样式 本节将编写一些css实现对页面中内容的控制。 将内容放入容器 文件:themesraiseinfolayoutsdefault.htm ...

    littleGrow 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<