分类 - OctoberCMS

2018-11-06 15:18:03    93    0    0

Making websites with October CMS

In this video series we are going to get familiar with October CMS. A great Laravel based CMS. We are going to be creating themes, plugins, learn about administr

2018-10-24 13:24:10    113    0    0

 

我们将利用上一节学习的表单,为movies添加一个表单组件。

首先准备目录,我们将复制contact插件中的contactform组件:

重命名和目录/文件: \plugins\raiseinfo\movies\components\contactform \plugins\raiseinfo\movies\components\ContactForm.php 到: \plugins\raiseinfo\movies\components\actorform \plugins\raiseinfo\movies\components\ActorForm.php

下面修改拷贝过来的文件: \plugins\raiseinfo\movies\components\ActorForm.php

namespace Raiseinfo\Movies\Components;

use Cms\Classes\ComponentBase;


class ActorForm extends ComponentBase
{

    public function componentDetails()
    {
        return [
          'name' => 'Actor Form',
          'description' => 'Enter actor form'
        ];
    }

    public function onSave()
    {
    }

}

\plugins\raiseinfo\movies\components\actorform\default.htm

<form data-request="onSave">

    <label>Name:</label>
    <input type="text" name="name" class="form-control">
    
    <label>Last name:</label>
    <input type="text" name="lastname" class="form-control">
    
    <button type="submit" class="btn btn-success form-control">Save<
2018-10-24 13:23:08    66    0    0

针对上一节的表单添加验证功能

File:plugins\raiseinfo\contact\components\ContactForm.php

use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Redirect;

...

public function onSend()
    {

        $validator = Validator::make(
            [
                'name' => Input::get('name'),
                'email' => Input::get('email')
            ],
            [
                'name' => 'required|min:5',
                'email' => 'required|email'
            ]
        );


        if($validator->fails()){

            return Redirect::back()->withErrors($validator);

        }else{
            $vars = [
                'name' => Input::get('name'),
                'email' => Input::get('email'),
                'content' => Input::get('content')
            ];

            // views/mail/message/htm
            Mail::send('raiseinfo.contact::mail.message', $vars, function($message) {

                $message->to('tian5258@gmail.com', 'Admin Person');

                $message->sub
2018-10-24 13:21:56    61    0    0

邮件设置:config/mail.php;设置为smtp。

创建插件Contact

打开编辑器,在contact插件目录下创建components目录,并在目录下创建表单文件:ContactForm.php

定义组件

File:plugins\raiseinfo\contact\components\ContactForm.php 

<?php
namespace Raiseinfo\Contact\Components;
use Cms\Classes\ComponentBase;
class ContactForm extends ComponentBase
{
    public function componentDetails()
    {
        // TODO: Implement componentDetails() method.
        return [
          'name' => 'Contact Form',
          'description' => 'Simple contact form'
        ];
    }
}

File:pluginsraiseinfocontactPlugin.php

<?php namespace Raiseinfo\Contact;

use System\Classes\PluginBase;

class Plugin extends PluginBase
{
    public function registerComponents()
    {
        return [
          'Raiseinfo\Contact\Components\ContactForm' => 'contactform',
        ];
    }

    public function registerSettings()
    {
    }
}

增加新页面:

查看页面前端,确认已经生效,只是插件没有定义htm,所以没有内容可以显示。

下面编辑表单内容:

File:plugins\raiseinfo\contact\components\contactform\default.htm

<form action="" class="form-group
2018-10-24 13:20:06    72    0    0

上一节我们通过actor组件为首页添加了组件,显示了演员的列表。
下面我们将为组件添加一些属性:defineProperties
这个函数会返回一个数组,数组里面的每个数组将返回的是每个选项

添加显示演员个数限制的选项

File:plugins\raiseinfo\movies\components\Actors.php

    public function defineProperties()
    {
        return [
          'results' =>  [
              'title' => '显示演员的个数',
              'description' => '您希望显示多少个演员?',
              'default' => 0,
              'validationPattern' => '^[0-9]+$',
              'validationMessage' => '只允许输入数字。'
          ]
        ];
    }

但是,我们只是设置了选项,这个选项并没有对数据进行控制。下面解决使用这个选项控制数据的显示:

File:plugins\raiseinfo\movies\components\Actors.php

    protected function loadActors()
    {
        $query = Actor::all();
        if($this->property('results') > 0){
            $query = $query->take($this->property('results'));
        }
        return $query;
    }

控制演员排序规则

File:plugins\raiseinfo\movies\components\Actors.php

    public function defineProperties()
    {
        return [
          'results' =>  [
              'title' => '显示演员的个数',
              
2018-10-24 13:18:21    69    0    0

本节将创建有关actor的组件:
首先创建一下目录结构

首先创建插件的基本功能raiseinfo/movies/components/Actors.php

<?php 
namespace Raiseinfo\Movies\Components;

use Cms\Classes\ComponentBase;
use Raiseinfo\Movies\Models\Actor;


2018-10-24 13:16:17    54    0    0

我们试着直接在Select中输入新的演员

点击保存

如何实现随时在Select中输入新的演员。我们将采用Ajax方式完成,在提交保存视频之前,通过Ajax方式实现提前于保存视频之前,保存演员信息。这样就不会出现上述的错误。

File:plugins/raiseinfo/movies/formwidgets/Actorbox.php

    public function get
October CMS    2018-10-24 13:09:22    76    0    0

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

【database】

【Models】

【Models】——【Forms】

【Models】——【Lists】

【Models】——【Backend Menu】

【Models】——【Contro

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

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

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

2018-10-24 13:04:21    39    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这种字段的用法。