当前位置: 首页 > 后端技术 > PHP

十月CMS-快速入门14保存FormWidget的数据

时间:2023-03-29 21:29:21 PHP

.select2-container{width:100%!important;显示:块;}上一节我们只是搭建了一个小widget,但是数据是模拟的,我们要存储数据,那么我们需要把数据和视频关联起来table通过关联表并保存,让我们打开Builder并创建一个cast[database][Models][Models]-[Forms][Models]-[Lists][Models]-[BackendMenu][Models]-[Controllers][模特]——[后台菜单]设置url刷新页面,然后选择视频进入演员编辑页面:添加演员数据:因为我们前期使用了repeater字段来存储演员信息,所以这个届时我们将使用数据库来存储演员信息。所以演员字段需要从视频表中删除。接下来,我们将创建一个中间表作为视频和演员之间的中间表,以实现多对多关系。接下来,我们需要建立视频和演员之间的多对多关系。File:pluginsraiseinfomoviesmodelsMovie.phppublic$belongsToMany=['genres'=>['Raiseinfo\Movies\Models\Genre',//模型'table'=>'raiseinfo_movies_movies_genres',//中间表'order'=>'genre_title'],'actors'=>['Raiseinfo\Movies\Models\Actor',//模型'table'=>'raiseinfo_movies_actors_movies',//中间表'order'=>'name']];File:pluginsraiseinfomoviesmodelsActor.phppublic$belongsToMany=['movies'=>['Raiseinfo\Movies\Models\Movie',//模型'table'=>'raiseinfo_movies_actors_movies',//中间表'order'=>'name']];通过上面的代码修改,实现了Movies表和Actors表之间的多对多的连接关系。接下来,修改组件以保存数据。首先,您需要准备数据变量,并为小部件使用文件:pluginsraiseinfomoviesformwidgetsActorbox.phppublicfunctionrender(){$this->prepareVars();转储($this->vars[‘actors’]);返回$this->makePartial('widget');}publicfunctionprepareVars(){$this->vars['id']=$this->model->id;$this->vars['actors']=Actor::all()->lists('name','id');}接下来可以修改插件pluginsraiseinfomoviesformwidgetsactorboxpartials_widget.htm.select2-container{width:100%!important;显示:块;}$value):?>">现在显示演员列表中所有演员的名字,但不显示所有演员的姓氏。我们需要在Actor中做适当的改动:pluginsraiseinfomoviesmodelsActor.php/***accessor的名称对应full_name*@returnstring*/publicfunctiongetFullNameAttribute(){return$this->name."".$this->lastname;}File:pluginsraiseinfomoviesformwidgetsActorbox.phppublicfunctionprepareVars(){$this->vars['id']=$this->model->id;$this->vars['actors']=Actor::all()->lists('full_name','id');}这将向上显示名字和姓氏。为了在前端页面显示演员信息,我们需要设置selectFile:pluginsraiseinfomoviesformwidgetsActorbox.phppublicfunctionprepareVars(){$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"多个>$value):?>"><?phpendforeach;?>File:themesraiseinfopagesmovie-single.htm

Actor

{%foractorinrecord.actors%}{{actor.name}}{{actor.lastname}}{%endfor%}刷新前端页面:通过上面的测试,我们已经知道数据库中已经存入了演员信息,前端也会显示出来。接下来我们刷新后台页面,打开编辑视频信息。我们发现存储的actor信息在Select中没有显示出来。这是因为我们还没有设置显示选中的值。文件:pluginsraiseinfomoviesformwidgetsActorbox.phppublicfunctionprepareVars(){$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"multiple>$value):?>">好了,现在我们可以显示选中的演员了,但是如果我们编辑一个没有设置演员的视频:问题的解决方法是:File:pluginsraiseinfomoviesformwidgetsActorbox.phppublicfunctionprepareVars(){$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']=[];}}