By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.

分类 - OctoberCMS

October CMS    2018-10-24 13:09:22    149    0    0

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

【database】

【Models】

【Models】——【Forms】

【Models】——【Lists】

【Models】——【Backend Menu】

【Models】——【Contro

2018-10-24 13:06:47    292    0    0

在上一节中我们是使用repeater字段存储演员信息的,当然这不是最佳的方式,我们希望,演员的信息能够存储在单独的表中,而且演员的信息可能需要更多的字段进行存储。然后将演员表和其他表进行关联,就好像视频表和风格表之间的关联一样。

只是我们不得不使用类似于上面的方式,采用复选框的形式进行风格的选择。这个肯定不是让你最满意的方式,在这一节和下一节,我们将讨论如何自定义表单控件,并将小部件连

2018-10-24 13:04:21    233    0    0

Repeater字段是采取Json数据存储多条数据的字段。

【Builder】——【Database】——【raiseinfo_movies_】
为表添加一个新的列:actors

【Models】——【Movie】——【Forms】

分别添加演员姓名和年龄

编辑视频信息:增加演员信息

提示错误

编辑:pluginsraiseinfomoviesmodelsMovie.php

protected $jsonable = ['actors'];

再说保存则错误消失。这样演员信息就被保存到了数据库的actors字段中,以Json格式存储。
查看数据库即可印证上述的结论。

Repeater数据存储到数据中后,如何在前段显示这些数据呢
themesraiseinfopagesmovie-single.htm

<h3>演员</h3>
{% for actor in record.actors %}
    {{ actor.actor_name }}
{% endfor %}

这样就显示了视频的演员信息了,但是,这不是最佳的存储演员信息的方法,我们将到后面使用数据库表的方式存储演员的信息。这里通过这个例子只是说明repeater这种字段的用法。

October CMS    2018-10-23 12:45:33    56    0    0


视频的详细信息里面列出了影片的风格,能不能在点击这些风格的时候,可以显示所有对应这个风格的视频呢?这就涉及反向的多对多关系。

下面创建风格页面,来显示某一风格对应的所有视频的信息。

为视频详情页添加风格的链接

{% for genre in record.genres %}
    <a href="/genres/{{ genre.slug }}">
    {{ genre.genre_title }}
    </a>
{% endfor %}

现在点击这些链接,结果是:

下面我们将对genre.htm进行修改

{% for movie in record.movies %}
<a href="/genres/{{ genre.slug }}">
    test
</a>
{% endfor %}

我们将循环体设置为movies查看输出结果:

你会发现什么都没有显示,这是因为,我们没有对genre设置反向关系。为了让他显示所有的视频信息,我们需要设置反向关联。

File:pluginsraiseinfomoviesmodelsGenre.php

    public $belongsToMany = [
        'movies' => [
            'Raiseinfo\Movies\Models\Movie',    // 模型
            'table' => 'raiseinfo_movies_movies_genres',    // 中间表
            'order' => 'name'
        ]
    ];

再次刷新页面

{% for movie in record.movies %}
<p>
    <a href="/genres/{{ genre.slug }}">
        <h3>{{ movie.name }}</h3>
    </a>
    <p>{{ movie.description|raw }}</p>
</p>
{% endfor %}

 

October CMS    2018-10-23 12:42:13    140    0    0

在上一节中,我们使用一对一、一对多的关系,用于给movies表附加图片和相册图集。这一节我们将创建类似标签的表,用来描述视频的类型。通过这个例子了解多多的关系。

创建数据库表

创建模型

添加后台菜单

创建控制器

创建风格条目

到此为止,我们为视频风格创建了表及相关的models、controller等,并输入了数据,存储了若干条目。那么,如何才能给电影设置视频风格呢,在视频编辑界面中,没有关于风格的设置。

创建中间表

用于movies表和genres表之间的关联,这个表里面分别存储两者的id。

为Models——Movie——Forms——fields添加部件【Relation】

打开【视频】菜单,编辑视频的时候,会出现如下错误

这个错误非常熟悉吧,pluginsraiseinfomoviesmodelsMovie.php

    public $belongsToMany = [
        'genres' => [
            'Raiseinfo\Movies\Models\Genre',    // 模型
            'table' => 'raiseinfo_movies_movies_genres',    // 中间表
            'order' => 'genre_title'
        ]
    ];

保存后刷新:

前端显示风格

<h3>风格</h3>

{% for genre in record.genres %}
<label class="label label-success">{{ genre.genre_title }}</label>
{% endfor %}
 

 

October CMS    2018-10-23 11:11:32    120    0    0

这一部分我们将为影片创建图片和图片库
首先我们将分页改为每页10个影片

设置图片

下面,我们将设置图片,点击菜单【builder】选择【Movies】选择【Models】选择【Forms】中的fields.yaml
添加一个上传表单,而且我们不需要为此创建数据库字段,October会自动处理

现在我们点击【视频】菜单,选择一个视频编辑

会出现如下错误说明没有定义poster

我们需要在代码编辑器中,修改文件:pluginsraiseinfomoviesmodelsMovie.php

为poster添加一个关系,关联到系统的图片表,把图片附加到视频表上。

    /**
     * 关系,用于将图片附加到Movies表上
     */
    public $attachOne = [
        'poster' => 'System\Models\File'
    ];

再次刷新页面,现在可以进行图片上传了。

如何显示上传的图片:
themesraiseinfopagesmovie-single.htm

{{ record.poster }}
{% if record %}
<!--{{ attribute(record, displayColumn) }}-->
<h2>{{ record.name }}</h2>

{{ record.poster }}

<h4>{{ record.year }}</h4>

<h3>简介</h3>

<p>
    {{ record.description|raw }}
</p>

{% else %}
    {{ notFoundMessage }}
{% endif %}

查看视频页面:http://octobermovie.dev.raise...

会出现上面图片显示的信息,图片并没有显示出来。

如果我们使用{{ record.poster.path }}
则显示图片地址,到这里,你或许就明白了,我们需要构建一个img标签,把这个地址作为img的标签属性即可。

<img src="{{ record.poster.path }}" alt="">

再次刷新:

但是,我们发现图片太大了。好的,我们可以继续设置。

<img src="{{ record.poster.thumb(200,auto) }}" alt="">

再比如:对图像进行200x20

October CMS    2018-10-23 11:06:43    291    0    0

在显示影片详情的时候,我们采用id作为链接到详情页面。这次我们将采用slug的方式链接到详情页面。另外我们将对分页进行讲解。

添加slug字段

首先打开Builder,选择原来创建的Movies插件。


添加一个新的列【slug】

修改表单

打开Models,选择Forms中的fields

修改记录

点击【视频】菜单

修改Movies页面

打开内容管理系统,打开Movies single

打开Movies

保存后刷新页面:
可以发现影片的链接地址变成诸如下面的样式
http://octobermovie.dev.raise...
不再是以id为参数的了。

创建分页

打开内容管理系统,打开Movies页面,设置每页大小为1.

刷新页面,会出现分页导航栏,但是,如果点击页码则不会有任何变化。

因此,我们需要再做些设置

刷新页面,则会出现如下提示,这是因为我们缺少了参数page,而page是必须的参数,不能省略,所以才出现如下错误。

下面我们试试:http://octobermovie.dev.raise...

这样就验证了上述的解释。作为解决办法进行如下操作,在page后加?,表示可选参数

分页代码在:themesraiseinfopagesmovies.htm

{% if records.lastPage > 1 %}
    <ul class="pagination">
        {% if records.currentPage > 1 %}
            <li><a href="{{ this.page.baseFileName|page({ (pageParam): (records.currentPage-1) }) }}">← Prev</a></li>
        {% endif %}

        {% for page in 1..records.lastPage %}
            <li class="{{ records.currentPage == page ? 'active' : null }}">
                <a href="{{ this.page.baseFileName|page({ (pageParam): page }) }}">{{ page }}</a>
            </li>
        {