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

2018-11-06 15:18:03    221    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    411    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    309    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    208    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    283    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    263    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    143    0    0

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

点击保存

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

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

    public function get