<?php
/**
* Created by PhpStorm.
* Zc 模版调用标签用于模版直接调用数据
* Versions: 1.0.0
* User: ZhangChao
* Date: 2017年10月20日
* Time: 15:36
* Qq: 2776332953
* Email: 2776332953@qq.com
*/
namespace think\template\taglib;
//namespace app\common\taglib;
use think\template\TagLib;
use think\Db;
class Zc extends TagLib {
/**
* 定义标签列表
*/
protected $tags
= [
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
// 内容标签
'db' => [
'attr' => 'table,cateid,num,order,ispagi,return',
'close' => 0
]
];
/**
* 解析标签属性返回Php 原生代码
* @param $tag array 标签属性
* @return string 返回解析后的 Php 原生代码
*/
public function tagDb($tag) {
$tables = !empty($tag['table']) ? trim($tag['table']) : '';
$cateid = !empty($tag['cateid']) ? trim($tag['cateid']) : 0;
$num = !empty($tag['num']) ? intval(trim($tag['num'])) : 10;
$order = !empty($tag['order']) ? trim($tag['order']) : 'id desc';
$ispagi = !empty($tag['ispagi']) ? '1' : '0';
$return = !empty($tag['return']) ? trim($tag['return']) : 'datas';
$parse = '<?php ';
$parse .= '$ChaoChao = new \think\template\taglib\Zc($this);';
$parse .= '$ChaoChaoResult = $ChaoChao->getData("' . $tables . '",' . $cateid . ',' . $num . ', "' .
$order . '","' . $ispagi . '");';
$parse .= '$' . $return . ' = $ChaoChaoResult[\'data\'];';
$parse .= '$pages = $ChaoChaoResult[\'pages\'];';
$parse .= '$ChaoChao = null;';
$parse .= '$ChaoChaoResult = null;';
$parse .= '?>';
return $parse;
}
/**
* 获取列表数据
* @param $tables string 表名称,包括文章表与栏目表的名称,文章表里面的(栏目id)字段名称(一般为 cateid),栏目表里的(父栏目 id)字段名称(一般为 pid)
* @param $cateid number 当前栏目id
* @param $num number 显示的数量
* @param $order string 排序方式
* @param $ispagi string 是否分页
* @return array 返回数据与分页
*/
public function getData($tables, $cateid, $num, $order, $ispagi) {
if (empty($tables)) {
$article = 'article';
$articleCateName = 'cateid';
$category = 'category';
$categoryPidName = 'pid';
} else {
$tables = explode(',', $tables);
$articles = explode('.', $tables[0]);
$article = $articles[0];
$articleCateName = $articles[1];
$categories = explode('.', $tables[1]);
$category = $categories[0];
$categoryPidName = $categories[1];
}
// 获取所有当前栏目的子栏目的id
$cateIds = $this->getCateChildIds($category, $categoryPidName, $cateid);
array_push($cateIds, $cateid);
// 如果分页
if ($ispagi == '1') {
$data = Db::name($article)
->where($articleCateName, 'in', $cateIds)
->order($order)
->paginate(intval($num));
$pages = $data->render();
return [
'data' => $data,
'pages' => $pages
];
} else if ($ispagi == '0') {
$data = Db::name($article)
->where($articleCateName, 'in', $cateIds)
->order($order)
->limit(intval($num))
->select();
return [
'data' => $data,
'pages' => ''
];
}
}
/**
* 获取当前栏目id的所有子栏目的id
* @param $category string 栏目表名称
* @param $categoryPidName string 栏目表 父栏目id 字段的名称
* @param $cateid integer 当前栏目id
* @return array
*/
protected function getCateChildIds($category, $categoryPidName, $cateid) {
static $arrIds = array();
$result = Db::name($category)
->where($categoryPidName, intval($cateid))
->select();
if ($result) {
foreach ($result as $k => $v) {
$arrIds[] = $v['id'];
$this->getCateChildIds($category, $categoryPidName, $v['id']);
}
}
return $arrIds;
}
}
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。