关键词:thinkcmf;内容管理框架;上手教程;通俗易懂;实用;案例;基础报错及解决办法;
毕业没多久开始上班,应公司要求学习thinkcmf,这是我和它的第一次接触。但是发现,这里面好多坑啊,而且基本不能面向百度编程了,越是比较高级的知识面人就越少,在网上写博客作回答的人就更少了。所以,看文档才是程序员的必备技能嘛。于是我开始看他的官方文档,因为之前学过thinkphp5,所以我便只看了模板和插件部分。但说实在的,这手册写的真粗略(或者说对新手十分不友好),导致我踩了很多雷区,现在写出来分享一下,方便大家能够快速入门。
1.使用
在设置里面有个模板管理,如下图
刚开始默认是第一个模板default,如果你之前弄了门户应用安装的话会出现simpleboot3模板,建议先使用simpleboot3模板,点击启用即可,那个操作里面的设计和文件列表可以改变模板的一些内容,启用之后再点击后台页面左上角那个网站首页便可看到效果。
2.模板导入
如果不满意这两个模板也可以到官网里的市场去下载,大部分要钱,也有免费的,下载完之后操作如下图
安装完模板点击启用再点网站首页便可看到效果,不过有的免费模板可能会出问题,要么是不能安装要么是用了之后打开报错,这种情况看你能力了,我一般直接换一个能用的模板。
插件这里面的坑比较多,但是后端对这个也用的多,继续。
1.插件安装
打开后台插件中心,点击插件列表。刚开始默认有一个插件演示插件,如下图
其中操作里的设置就是对插件内容的一些设置,有的插件可能没有设置选项,使用下面再讲。
如果需要更多的插件可以去插件列表旁边的插件市场或者官网的市场去下载,然后把下好的插件按照如下图操作:
把下好的插件粘贴到指定目录下后刷新插件列表点击安装即可。
2.插件使用
如果你用的是simpleboot3模板,直接点击启用便可再网站前端看到效果,如果是下载的其他模板,还要做一些设置。如下。
第一步,首先找到你要使用的插件的根目录下的 插件名+Plugin.php 文件,打开并找到代码最后(一般写在最后,看情 况)的实现的钩子方法,如果函数名是驼峰式如footerStart,那么钩子名称就是footer_start,可能方法上面的注释会写。
第二步,在编辑器打开你启用的模板文件,一般是在 模板名\portal\index.html下,找到你想要插件出现的位置,加入一行
代码: ,footer_start是对应的钩子名称,大多数都是这个名字,看具体的插件。
最后刷新前端页面就可以看到效果了。
说千道万不如动手做,做出来了才是真的会了,例子很简单,就是用插件输出程序员世界的起源——hello world!
在这个例子中我会顺便再提示一些坑,因为网上有几篇类似的动手做小插件教程,但我照着写都失败了,因为一些莫名的
原因。
大致步骤如下图:
1.创建插件目录结构,如下图
比如我创建了一个my插件,最简单的插件就是一个插件目录再加上目录里的 插件名+Plugin.php 文件,在这里我弄得稍微复杂
一点。加上了config.php以及view文件夹下的widget.html文件。在这里要特别**注意:你的插件名一定要和 插件名+Plugin.php 这个文件名一致
**,比如上图,我的插件名是my,那写插件实现方法的php名字就是MyPlugin.php;如果你的插件名是my_test,则后者就是MyNamePlugin.php 。这个规则请严格执行,不然thinkcmf找不到你的插件,我当初卡在这里一个多小时。
config.php下放的主要是插件的内容配置,简单的可以不要,widget.html是插件的样式设置,也可以不写。
我们先把目录结构弄好,文件里面的内容可以先不写。
接下来我们就以my插件为例:
2.config.php和widget.html写法
其实这两文件一般配合使用,先说config,写法如下:
<?php
return [
'text' => [// 在后台插件配置表单中的键名 ,会是config[text]
'title' => '文本', // 表单的label标题
'type' => 'text', // 表单的类型:text,password,textarea,checkbox,radio,select等
'value' => 'hello,ThinkCMF!', // 表单的默认值
'tip' => '这是文本组件的演示', //表单的帮助提示
],
];
后面还可以再加数据,格式一样。
至于widget.html,是插件样式的设置,可以如下这样写:
<div style="width: 100px;height: 100px;background-color: pink;">
<b>插件:</b>{$text}
</div>
{$text}是对config里面数据的调用,也就是text中的value值——hello,ThinkCMF!
3.MyPlugin.php写法
<?php
/**
* Created by PhpStorm.
* User: hbx004
* Date: 2019/6/26
* Time: 14:30
*/
namespace plugins\my;//Demo插件英文名,改成你的插件英文就行了
use cmf\lib\Plugin;
class MyPlugin extends Plugin
{
public $info =[
'name' => 'My',//注意name 要与类名前部分完全一致,否则安装会出现:插件不存在
'title' =>'商城插件',
'description' =>'整合支付宝及发卡的商城插件',
'status' => 1,
'author' => 'eyunzhu',
'version' => '1.0',
];
public $has_admin=0;//插件是否有后台管理界面
public function install()
{
return true;//安装成功返回true,失败false
// TODO: Implement install() method.
}
public function uninstall()
{
return true;//卸载成功返回true,失败false
// TODO: Implement uninstall() method.
}
//实现的footer钩子方法
public function footerStart($param)
{
$config = $this->getConfig();
$this->assign($config);
var_dump(11);
echo $this->fetch('widget');
}
}
注意1:这里面的$info里面的 name 字段一定要和类名前部分一致,比如该类是MyPlugin,那么name值就是 My ,千万也别写成 MyPlugin ,如果写成后者,虽然插件列表能够读出来你的插件,但是安装不了,会报错:该插件不存在什么的。
注意2:如上代码,这里我的插件实现方法是footerStart,对应的钩子是footer_start ,这个方法名好像是 simpleboot3 模板自带的,不需要手动暴露给框架,如下图: 如果footer_start不存在或者想自己定义一个函数名,那么就需要把它暴露给thinkcmf了,详见下面
4. 在 portal 应用的hooks.php中暴露钩子
如果你新定义了一个插件实现方法——shopStart,那么 写法如下:
return [
'shop_start' => [
"type" => 3,//钩子类型(默认为应用钩子;2:应用钩子;3:模板钩子;4:后台模板钩子)
"name" => '商城开始', // 钩子名称
"description" => "商城在此开始", //钩子描述
"once" => 0 // 是否只执行一次
],
]
hooks.php在项目的\app\portal\hooks.php,这个你也要安装门户应用(如何安装见本文开始部分)
在hook.php里写好之后,然后去后台的插件中心的钩子管理同步一下钩子
便可以使用自定义的函数了,在模板中你想要插件出现的位置加上,运行如下图所示:
如果在最后一步你定义了,可能是数据库的问题。首先要先明白这个框架的运行过程,如下图:
我们再来看一下安装thinkcmf时自动帮我们安好的数据库中的cmf_hook_plugin表,如下图: