PHP code example of githen / cmsengine
1. Go to this page and download the library: Download githen/cmsengine library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
githen / cmsengine example snippets
return [
// 基础配置
'config' => [
'namespace' => 'eol', // 标记名
'tagstart' => '{', // 标记开始符
'tagend' => '}', // 标记结束符
'tagmaxlen' => 60, // 标签名最长长度
'tolow' => TRUE, // 标签大小写不敏感
'home' => storage_path('template'), // 模板根目录
'disk' => 'local', // 存储引擎
' 'page' => ['type' => 'page', 'taget' => 'cms.page'],
],
];
$tpl = clone app('html.tpl');
// 参数支持类名或实例化后的类
// 若标签标记的方法名为abc, {eol:global.resource_url function='abc(@)' /}
// 那么在此类中必须有abc方法,并且参数要兼容模板中配置的abc的参数
$tpl->->setFunctions(Functions::class);
$tpl = clone app('html.tpl');
$tpl->setNameSpace('eol', '{', '}')->loadTemplate('index.html');
// 获取渲染后的html
$html = $tpl->fetch();
// 渲染后的html直接保存到文件()
// 需要在config/filesystems.php中声明 cms.php中定义 的 disk 驱动
$tpl->saveTo('index.html');
//分页调用,直接返回需要页面的html代码
$html = $tpl->fetch(2);
// 遍历生成文件, {page}将会生成对应的页码数,
// 如果存在第二个参数,则首页的文件将为此参数的值,其它页的文件名不变
$tpl->saveTo('aa/list{page}.html', 'new.html');
// 数据获取服务提供者,自我声明服务提供者,并在config/app.php中加载
/**
* Register services.
*
* @return void
*/
public function register()
{
// 注册服务方式
$this->app->singleton('cms.field', function ($app) {
return new Fields();
});
$this->app->singleton('cms.list', function ($app) {
return new Lists();
});
$this->app->singleton('cms.page', function ($app) {
return new Pages();
});
}
class Fields
{
/**
* 缓存数据
*/
private $cache;
/**
* @param $tag
* @param $linkData
*/
public function data($tag, $linkData)
{
// 获取标签指定数据
return $this->{$tag->tagName}($tag, $linkData);
}
/**
* 获取值数据,直接填充
*/
private function site($tag, $linkData)
{
// 获取站点缓存类
$cacheKey = $linkData['site_id'].'.site';
if(! $site = data_get($this->cache, $cacheKey, false)){
$site = Site::select('name','school_id', 'domain', 'title', 'keywords', 'description')->where('id', $linkData['site_id'])->first();
data_set($this->cache, $cacheKey, $site);
dump("查询了下site:".$linkData['site_id']);
}
return $site->{$tag->getAttribute('name')};
}
}
class Lists
{
/**
* 缓存数据
*/
private $cache;
/**
* @param $tag
* @param $linkData
*/
public function data($tag, $linkData)
{
// 获取标签指定数据
return $this->{$tag->tagName}($tag, $linkData);
}
/**
* 获取列表数据
*
*/
private function arclist($tag, $linkData)
{
// 必要参数检测
// code ...
// 获取站点缓存类
$unikey = "{$tag->getAttribute('id')}_{$tag->getAttribute('row')}";
$cacheKey = $linkData['site_id'].'.arclist.'.$unikey;
if(! $arclist = data_get($this->cache, $cacheKey, false)){
$arclist = News::select('type','title', 'cover', 'content', 'created_at', 'description')->where('category_id', $tag->getAttribute('id'))->limit($tag->getAttribute('row'))->get();
data_set($this->cache, $cacheKey, $arclist);
dump("查询了下栏目id为".$tag->getAttribute('id').'下面的文章,site_news');
}
return $arclist->toArray();
}
}
namespace App\Extend\Cmss;
use App\Models\School;
use App\Models\Site;
class Pages
{
/**
* 缓存数据
*/
private $cache;
/**
* @param $tag
* @param $linkData
*/
public function data($tag, $linkData)
{
// 获取标签指定数据
return $this->{$tag->tagName}($tag, $linkData);
}
/**
* 获取列表数据
*/
private function list($tag, $linkData)
{
// 必要参数检测
// code ...
// 栏目ID是否填写,学校id,站点id是否有权限等
// 需要生成分页的第几页
$page = $linkData['page_index'];
// 获取站点缓存类
$unikey = "{$tag->getAttribute('size')}_{$tag->getAttribute('per')}_{$page}";
$cacheKey = $linkData['site_id'].'.list.'.$unikey;
if(! $data = data_get($this->cache, $cacheKey, false)){
// 获取总条数
$count = News::where('category_id', $linkData['category_id'])->count();
$arclist = News::select('type','title', 'cover', 'content', 'created_at', 'description')
->where('category_id', $linkData['category_id'])
->skip(($page-1) * $tag->getAttribute('per'))
->take($tag->getAttribute('per'))->get();
// 伪造数据,为测试foreach标签
$arclist = $arclist->map(function ($item, $key){
$item->setAttribute('test', ['a' => '1'.$item->title, 'b' =>'2'.$item->title]);
return $item;
});
$data = [
'total' => (int)$count, // 总条数
'size' => (int)$tag->getAttribute('per'), // 每页
'items' => $arclist->toArray() // 当前页列表数据
];
data_set($this->cache, $cacheKey, $arclist);
dump("查询了下栏目id为".$linkData['category_id'].'下面的文章分页,page:'.$page);
}
return $data;
}
}
html
{eol:global.resource_url function='limit(@, 10, ...)' /}