3

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

创建插件Contact

clipboard.png

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

clipboard.png

定义组件

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()
    {
    }
}

增加新页面:

clipboard.png

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

clipboard.png

下面编辑表单内容:

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

<form action="" class="form-group">
    <label for="">姓名:</label>
    <input type="text" name="name" class="form-control">

    <label for="">邮件地址:</label>
    <input type="text" name="email" class="form-control">

    <label for="">信息:</label>
    <textarea name="content" id="" cols="30" rows="10" class="form-control"></textarea>

    <button type="submit" class="btn btn-success form-control">发送</button>

</form>

clipboard.png

实现功能:
上面的表单没有功能,甚至都没有设置表单提交的目标是什么,现在首先实现表单提交的方法:

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

<?php

namespace Raiseinfo\Contact\Components;

use Cms\Classes\ComponentBase;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Mail;


class ContactForm extends ComponentBase
{

    public function componentDetails()
    {
        return [
          'name' => 'Contact Form',
          'description' => 'Simple contact form'
        ];
    }

    public function onSend()
    {
        $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->subject('从联系人表单提交的邮件');

        });
    }
    
}

其中'raiseinfo.contact::mail.message'是邮件模板,我们需要创建邮件模板目录及文件,结构如下:

plugins\raiseinfo\contact\views
plugins\raiseinfo\contact\views\mail
plugins\raiseinfo\contact\views\mail\message.htm

编辑模板:

File:plugins\raiseinfo\contact\views\mail\message.htm
<p>

    You got a new message from {{ name }} at {{ email }}
    
</p>

<strong> Message </strong>

<p>

    {{ content }}

</p>

最后修改form的action,这里我们采用data方法

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


<form data-request="onSend">

    <label>姓名:</label>
    <input type="text" name="name" class="form-control">

    <label>邮件地址:</label>
    <input type="email" name="email" class="form-control">

    <label>信息:</label>
    <textarea name="content" class="form-control"></textarea>

    <button type="submit" class="btn btn-success form-control">发送</button>

</form>

测试

clipboard.png

clipboard.png


后山人
272 声望39 粉丝

这个是一个典型的,前后端分离的开发框架,而且很多前后端代码,都可以很好的生成,无需写代码,大大减少程序员编写代码的数量。提高效率,降低成本!