移除测试相关模块

pull/8/head
pppscn 2018-11-27 21:49:30 +08:00
parent bc71a3e2d1
commit d5173c95b3
177 changed files with 0 additions and 12239 deletions

BIN
application/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@ -1,214 +0,0 @@
<?php
namespace app\admin\controller;
use addons\docs\library\Service;
use app\common\controller\Backend;
use fast\Http;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use think\Exception;
use think\Validate;
use ZipArchive;
/**
*
* 文档管理
* @icon fa fa-circle-o
*/
class Docs extends Backend
{
protected $docs = [];
public function _initialize()
{
parent::_initialize();
$this->docsdata = Service::getDocsData();
}
/**
* 查看
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
$search = $this->request->request("search");
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = [];
foreach ($this->docsdata as $type => $pages)
{
foreach ($pages as $index => $page)
{
if (!$search || stripos($page['relative'], $search) !== false || stripos($page['title'], $search) !== false)
{
$page['relativeurl'] = addon_url("docs/index/index") . "?md={$page['relative']}";
$list[] = $page;
}
}
}
$total = count($list);
$result = array("total" => $total, "rows" => array_slice($list, $offset, $limit));
return json($result);
}
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
{
if ($this->request->isPost())
{
$params = $this->request->post("row/a");
if ($params)
{
try
{
if (!$params['md'])
{
throw new Exception("MD文件不能为空");
}
$config = get_addon_config('docs');
//未设置后缀
if (stripos($params['md'], ".{$config['suffix']}") === false)
{
$params['md'] .= ".{$config['suffix']}";
}
if (mb_substr_count($params['md'], "/") > 1)
{
throw new Exception("MD文件中只能包含一个/字符");
}
if (!Validate::is($params['md'], "/^[A-Za-z0-9\-\_\.]+$/"))
{
throw new Exception("MD文件只能是字母数字下划线");
}
$row = Service::getMarkdownData($params['md']);
if ($row)
{
throw new Exception("对应的MD文件已经存在");
}
Service::setMarkdownData($params['md'], $params);
$this->success();
}
catch (Exception $e)
{
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* 编辑
*/
public function edit($ids = NULL)
{
$row = Service::getMarkdownData($ids, true, false);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost())
{
$params = $this->request->post("row/a");
if ($params)
{
try
{
Service::setMarkdownData($ids, $params);
$this->success();
}
catch (Exception $e)
{
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->view->assign("row", $row);
return $this->view->fetch();
}
/**
* 删除
*/
public function del($ids = "")
{
if ($ids)
{
$row = Service::getMarkdownData($ids, false, false);
if (!$row)
$this->error(__('No Results were found'));
try
{
unlink(Service::getDocsSourceDir() . $row['relative']);
Service::refreshDocsData();
$this->success();
}
catch (Exception $e)
{
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
/**
* 刷新
*/
public function refresh()
{
Service::refreshDocsData();
$this->success();
}
/**
* 导出
*/
public function export()
{
//重新生成一次文档
Service::build();
$distDir = Service::getDocsDistDir();
$zipFile = RUNTIME_PATH . 'addons' . DS . 'export-docs-' . date('YmdHis') . '.zip';
$rootPath = realpath($distDir);
$zip = new ZipArchive();
$zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file)
{
if (!$file->isDir())
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
Http::sendToBrowser($zipFile);
}
/**
* 批量更新
* @internal
*/
public function multi($ids = "")
{
return;
}
}

View File

@ -1,50 +0,0 @@
<?php
namespace app\admin\controller;
use app\common\controller\Backend;
/**
* 测试管理
*
* @icon fa fa-circle-o
*/
class Test extends Backend
{
/**
* Test模型对象
* @var \app\admin\model\Test
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\Test;
$this->view->assign("weekList", $this->model->getWeekList());
$this->view->assign("flagList", $this->model->getFlagList());
$this->view->assign("genderdataList", $this->model->getGenderdataList());
$this->view->assign("hobbydataList", $this->model->getHobbydataList());
$this->view->assign("statusList", $this->model->getStatusList());
$this->view->assign("stateList", $this->model->getStateList());
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 导入
*/
/*
public function import()
{
return parent::import();
}
*/
}

View File

@ -1,59 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\admin\model\Channel;
use app\common\controller\Backend;
use fast\Tree;
use think\db\Query;
/**
* Ajax
*
* @icon fa fa-circle-o
* @internal
*/
class Ajax extends Backend
{
/**
* 模型对象
*/
protected $model = null;
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
}
/**
* 获取模板列表
* @internal
*/
public function get_template_list()
{
$files = [];
$keyValue = $this->request->request("keyValue");
if (!$keyValue) {
$name = $this->request->request("name");
if ($name) {
$files[] = ['name' => $name . '.html'];
}
//设置过滤方法
$this->request->filter(['strip_tags']);
$config = get_addon_config('cms');
$themeDir = ADDON_PATH . 'cms' . DS . 'view' . DS . $config['theme'] . DS;
$dh = opendir($themeDir);
while (false !== ($filename = readdir($dh))) {
if ($filename == '.' || $filename == '..')
continue;
$files[] = ['name' => $filename];
}
} else {
$files[] = ['name' => $keyValue];
}
return $result = ['total' => count($files), 'list' => $files];
}
}

View File

@ -1,363 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\admin\model\Channel;
use app\common\controller\Backend;
use fast\Tree;
use think\Db;
use think\db\Query;
/**
* 内容表
*
* @icon fa fa-circle-o
*/
class Archives extends Backend
{
/**
* Archives模型对象
*/
protected $model = null;
protected $noNeedRight = ['get_channel_fields', 'check_element_available'];
public function _initialize()
{
parent::_initialize();
$this->model = model('Archives');
$channelList = [];
$disabledIds = [];
$all = collection(Channel::order("weigh desc,id desc")->select())->toArray();
foreach ($all as $k => $v) {
$state = ['opened' => true];
if ($v['type'] != 'list') {
$disabledIds[] = $v['id'];
}
if ($v['type'] == 'link') {
$state['checkbox_disabled'] = true;
}
$channelList[] = [
'id' => $v['id'],
'parent' => $v['parent_id'] ? $v['parent_id'] : '#',
'text' => __($v['name']),
'type' => $v['type'],
'state' => $state
];
}
$tree = Tree::instance()->init($all, 'parent_id');
$channelOptions = $tree->getTree(0, "<option value=@id @selected @disabled>@spacer@name</option>", '', $disabledIds);
$this->view->assign('channelOptions', $channelOptions);
$this->assignconfig('channelList', $channelList);
$this->view->assign("flagList", $this->model->getFlagList());
$this->view->assign("statusList", $this->model->getStatusList());
}
/**
* 查看
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax()) {
$this->relationSearch = TRUE;
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->with('Channel')
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->with('Channel')
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
$modelList = \app\admin\model\Modelx::all();
$this->view->assign('modelList', $modelList);
return $this->view->fetch();
}
/**
* 副表内容
*/
public function content($model_id = null)
{
$model = \app\admin\model\Modelx::get($model_id);
if (!$model) {
$this->error('未找到对应模型');
}
$fieldsList = \app\admin\model\Fields::where('model_id', $model['id'])->where('type', '<>', 'text')->select();
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
$fields = [];
foreach ($fieldsList as $index => $item) {
$fields[] = "addon." . $item['name'];
}
$table = $this->model->getTable();
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$sort = 'main.id';
$total = Db::table($table)
->alias('main')
->join('cms_channel channel', 'channel.id=main.channel_id', 'LEFT')
->join($model['table'] . ' addon', 'addon.id=main.id', 'LEFT')
->field('main.id,main.channel_id,main.title,channel.name as channel_name,addon.id as aid' . ($fields ? ',' . implode(',', $fields) : ''))
->where($where)
->order($sort, $order)
->count();
$list = Db::table($table)
->alias('main')
->join('cms_channel channel', 'channel.id=main.channel_id', 'LEFT')
->join($model['table'] . ' addon', 'addon.id=main.id', 'LEFT')
->field('main.id,main.channel_id,main.title,channel.name as channel_name,addon.id as aid' . ($fields ? ',' . implode(',', $fields) : ''))
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
$fields = [];
foreach ($fieldsList as $index => $item) {
$fields[] = ['field' => $item['name'], 'title' => $item['title'], 'type' => $item['type'], 'content' => $item['content_list']];
}
$this->assignconfig('fields', $fields);
$this->view->assign('fieldsList', $fieldsList);
$this->view->assign('model', $model);
$this->assignconfig('model_id', $model_id);
$modelList = \app\admin\model\Modelx::all();
$this->view->assign('modelList', $modelList);
return $this->view->fetch();
}
/**
* 编辑
*
* @param mixed $ids
*/
public function edit($ids = NULL)
{
$row = $this->model->get($ids);
if (!$row)
$this->error(__('No Results were found'));
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
if (!in_array($row[$this->dataLimitField], $adminIds)) {
$this->error(__('You have no permission'));
}
}
if ($this->request->isPost()) {
return parent::edit($ids);
}
$channel = Channel::get($row['channel_id']);
if (!$channel) {
$this->error(__('No specified channel found'));
}
$model = \app\admin\model\Modelx::get($channel['model_id']);
if (!$model) {
$this->error(__('No specified model found'));
}
$addon = db($model['table'])->where('id', $row['id'])->find();
if ($addon) {
$row = array_merge($row->toArray(), $addon);
}
$all = collection(Channel::order("weigh desc,id desc")->select())->toArray();
foreach ($all as $k => $v) {
if ($v['type'] != 'list' || $v['model_id'] != $channel['model_id']) {
$disabledIds[] = $v['id'];
}
}
$tree = Tree::instance()->init($all, 'parent_id');
$channelOptions = $tree->getTree(0, "<option value=@id @selected @disabled>@spacer@name</option>", $row['channel_id'], $disabledIds);
$this->view->assign('channelOptions', $channelOptions);
$this->view->assign("row", $row);
return $this->view->fetch();
}
/**
* 删除
* @param mixed $ids
*/
public function del($ids = "")
{
\app\admin\model\Archives::event('after_delete', function ($row) {
Channel::where('id', $row['channel_id'])->where('items', '>', 0)->setDec('items');
});
return parent::del($ids);
}
/**
* 还原
* @param mixed $ids
*/
public function restore($ids = "")
{
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$this->model->where($this->dataLimitField, 'in', $adminIds);
}
if ($ids) {
$this->model->where($pk, 'in', $ids);
}
$archivesChannelIds = $this->model->onlyTrashed()->column('id,channel_id');
$archivesChannelIds = array_filter($archivesChannelIds);
$this->model->where('id', 'in', array_keys($archivesChannelIds));
$count = $this->model->restore('1=1');
if ($count) {
$channelNums = array_count_values($archivesChannelIds);
foreach ($channelNums as $k => $v) {
Channel::where('id', $k)->setInc('items', $v);
}
$this->success();
}
$this->error(__('No rows were updated'));
}
/**
* 移动
*/
public function move($ids = "")
{
if ($ids) {
$channel_id = $this->request->post('channel_id');
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$this->model->where($this->dataLimitField, 'in', $adminIds);
}
$this->model->where($pk, 'in', $ids);
$channel = Channel::get($channel_id);
if ($channel && $channel['type'] === 'list') {
$channelNums = \app\admin\model\Archives::
with('channel')
->where('archives.' . $pk, 'in', $ids)
->where('channel_id', '<>', $channel['id'])
->field('channel_id,COUNT(*) AS nums')
->group('channel_id')
->select();
$result = $this->model
->where('model_id', '=', $channel['model_id'])
->where('channel_id', '<>', $channel['id'])
->update(['channel_id' => $channel_id]);
if ($result) {
$count = 0;
foreach ($channelNums as $k => $v) {
if ($v['channel']) {
Channel::where('id', $v['channel_id'])->where('items', '>', 0)->setDec('items', min($v['channel']['items'], $v['nums']));
}
$count += $v['nums'];
}
Channel::where('id', $channel_id)->setInc('items', $count);
$this->success();
} else {
$this->error(__('No rows were updated'));
}
} else {
$this->error(__('No rows were updated'));
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
}
/**
* 获取栏目列表
* @internal
*/
public function get_channel_fields()
{
$this->view->engine->layout(false);
$channel_id = $this->request->post('channel_id');
$archives_id = $this->request->post('archives_id');
$channel = Channel::get($channel_id, 'model');
if ($channel && $channel['type'] === 'list') {
$values = [];
if ($archives_id) {
$values = db($channel['model']['table'])->where('id', $archives_id)->find();
}
$fields = \app\admin\model\Fields::where('model_id', $channel['model_id'])
->order('weigh desc,id desc')
->select();
foreach ($fields as $k => $v) {
//优先取编辑的值,再次取默认值
$v->value = isset($values[$v['name']]) ? $values[$v['name']] : (is_null($v['defaultvalue']) ? '' : $v['defaultvalue']);
$v->rule = str_replace(',', '; ', $v->rule);
if (in_array($v->type, ['checkbox', 'lists', 'images'])) {
$checked = '';
if ($v['minimum'] && $v['maximum'])
$checked = "{$v['minimum']}~{$v['maximum']}";
else if ($v['minimum'])
$checked = "{$v['minimum']}~";
else if ($v['maximum'])
$checked = "~{$v['maximum']}";
if ($checked)
$v->rule .= (';checked(' . $checked . ')');
}
if (in_array($v->type, ['checkbox', 'radio']) && stripos($v->rule, 'required') !== false) {
$v->rule = str_replace('required', 'checked', $v->rule);
}
if (in_array($v->type, ['selects'])) {
$v->extend .= (' ' . 'data-max-options="' . $v['maximum'] . '"');
}
}
$this->view->assign('fields', $fields);
$this->view->assign('values', $values);
$this->success('', null, ['html' => $this->view->fetch('fields')]);
} else {
$this->error(__('Please select channel'));
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
/**
* 检测元素是否可用
* @internal
*/
public function check_element_available()
{
$id = $this->request->request('id');
$name = $this->request->request('name');
$value = $this->request->request('value');
$name = substr($name, 4, -1);
if (!$name) {
$this->error(__('Parameter %s can not be empty', 'name'));
}
if ($id) {
$this->model->where('id', '<>', $id);
}
$exist = $this->model->where($name, $value)->find();
if ($exist) {
$this->error(__('The data already exist'));
} else {
$this->success();
}
}
}

View File

@ -1,55 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 区块表
*
* @icon fa fa-circle-o
*/
class Block extends Backend
{
/**
* Block模型对象
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('Block');
$this->view->assign("statusList", $this->model->getStatusList());
}
public function selectpage_type()
{
$list = [];
$word = (array)$this->request->request("q_word/a");
$field = $this->request->request('showField');
$keyValue = $this->request->request('keyValue');
if (!$keyValue) {
if (array_filter($word)) {
foreach ($word as $k => $v) {
$list[] = ['id' => $v, $field => $v];
}
}
$typeArr = \app\admin\model\Block::column('type');
$typeArr = array_unique($typeArr);
foreach ($typeArr as $index => $item) {
$list[] = ['id' => $item, $field => $item];
}
} else {
$list[] = ['id' => $keyValue, $field => $keyValue];
}
return json(['total' => count($list), 'list' => $list]);
}
public function import()
{
return parent::import();
}
}

View File

@ -1,181 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
use app\admin\model\Channel as ChannelModel;
use fast\Tree;
/**
* 栏目表
*
* @icon fa fa-circle-o
*/
class Channel extends Backend
{
protected $channelList = [];
protected $modelList = [];
protected $multiFields = ['weigh', 'status'];
/**
* Channel模型对象
*/
protected $model = null;
protected $noNeedRight = ['check_element_available'];
public function _initialize()
{
parent::_initialize();
$this->request->filter(['strip_tags']);
$this->model = model('Channel');
$tree = Tree::instance();
$tree->init(collection($this->model->order('weigh desc,id desc')->select())->toArray(), 'parent_id');
$this->channelList = $tree->getTreeList($tree->getTreeArray(0), 'name');
$this->modelList = \app\admin\model\Modelx::order('id asc')->select();
$this->view->assign("modelList", $this->modelList);
$this->view->assign("channelList", $this->channelList);
$this->view->assign("typeList", ChannelModel::getTypeList());
$this->view->assign("statusList", ChannelModel::getStatusList());
}
/**
* 查看
*/
public function index()
{
if ($this->request->isAjax()) {
$search = $this->request->request("search");
$model_id = $this->request->request("model_id");
//构造父类select列表选项数据
$list = [];
if ($search) {
foreach ($this->channelList as $k => $v) {
if (stripos($v['name'], $search) !== false || stripos($v['nickname'], $search) !== false) {
$list[] = $v;
}
}
} else {
$list = $this->channelList;
}
foreach ($list as $index => $item) {
if ($model_id && $model_id != $item['model_id']) {
unset($list[$index]);
}
}
$list = array_values($list);
$modelNameArr = [];
foreach ($this->modelList as $k => $v) {
$modelNameArr[$v['id']] = $v['name'];
}
foreach ($list as $k => &$v) {
$v['model_name'] = $v['model_id'] && isset($modelNameArr[$v['model_id']]) ? $modelNameArr[$v['model_id']] : __('None');
}
$total = count($list);
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
{
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
$params[$this->dataLimitField] = $this->auth->id;
}
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = basename(str_replace('\\', '/', get_class($this->model)));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
$this->model->validate($validate);
}
$nameArr = array_filter(explode("\n", str_replace("\r\n", "\n", $params['name'])));
if (count($nameArr) > 1) {
foreach ($nameArr as $index => $item) {
$itemArr = array_filter(explode('|', $item));
$params['name'] = $itemArr[0];
$params['diyname'] = isset($itemArr[1]) ? $itemArr[1] : '';
$result = $this->model->allowField(true)->isUpdate(false)->data($params)->save();
}
} else {
$result = $this->model->allowField(true)->save($params);
}
if ($result !== false) {
$this->success();
} else {
$this->error($this->model->getError());
}
} catch (\think\exception\PDOException $e) {
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* Selectpage搜索
*
* @internal
*/
public function selectpage()
{
return parent::selectpage();
}
/**
* 检测元素是否可用
* @internal
*/
public function check_element_available()
{
$id = $this->request->request('id');
$name = $this->request->request('name');
$value = $this->request->request('value');
$name = substr($name, 4, -1);
if (!$name) {
$this->error(__('Parameter %s can not be empty', 'name'));
}
if ($name == 'diyname') {
if ($id) {
$this->model->where('id', '<>', $id);
}
$exist = $this->model->where($name, $value)->find();
if ($exist) {
$this->error(__('The data already exist'));
} else {
$this->success();
}
} else if ($name == 'name') {
$nameArr = array_filter(explode("\n", str_replace("\r\n", "\n", $value)));
if (count($nameArr) > 1) {
foreach ($nameArr as $index => $item) {
$itemArr = array_filter(explode('|', $item));
if (!isset($itemArr[1])) {
$this->error('格式:分类名称|自定义名称');
}
$exist = \app\admin\model\Channel::getByDiyname($itemArr[1]);
if ($exist) {
$this->error('自定义名称[' . $itemArr[1] . ']已经存在');
}
}
$this->success();
} else {
$this->success();
}
}
}
}

View File

@ -1,64 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 评论管理
*
* @icon fa fa-comment
*/
class Comment extends Backend
{
/**
* Comment模型对象
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('Comment');
$this->view->assign("typeList", $this->model->getTypeList());
$this->view->assign("statusList", $this->model->getStatusList());
}
/**
* 查看
*/
public function index()
{
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->with('archives')
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->with('archives')
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$list = collection($list)->toArray();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
}

View File

@ -1,178 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 自定义表单数据表
*
* @icon fa fa-circle-o
*/
class Diydata extends Backend
{
/**
* 自定义表单模型对象
*/
protected $diyform = null;
/**
* 定义表单数据表模型
* @var null
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$diyform_id = $this->request->param('diyform_id');
$this->diyform = \app\admin\model\Diyform::get($diyform_id);
if (!$this->diyform) {
$this->error('未找到对应自定义表单');
}
$this->model = \think\Db::name($this->diyform['table']);
$this->assignconfig('diyform_id', $diyform_id);
}
/**
* 查看
*/
public function index()
{
$fieldsList = \app\admin\model\Fields::where('diyform_id', $this->diyform['id'])->where('type', '<>', 'text')->select();
$fields = [];
foreach ($fieldsList as $index => $item) {
$fields[] = ['field' => $item['name'], 'title' => $item['title'], 'type' => $item['type'], 'content' => $item['content_list']];
}
$this->assignconfig('fields', $fields);
$diyformList = \app\admin\model\Diyform::all();
$this->view->assign('diyform', $this->diyform);
$this->view->assign('diyformList', $diyformList);
return parent::index();
}
/**
* 添加
*/
public function add()
{
$this->assignFields();
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
$params[$this->dataLimitField] = $this->auth->id;
}
try {
$result = $this->model->insert($params);
if ($result !== false) {
$this->success();
} else {
$this->error($this->model->getError());
}
} catch (\think\exception\PDOException $e) {
$this->error($e->getMessage());
} catch (\think\Exception $e) {
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* 编辑
*/
public function edit($ids = NULL)
{
$row = $this->model->where('id', $ids)->find();
if (!$row)
$this->error(__('No Results were found'));
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
if (!in_array($row[$this->dataLimitField], $adminIds)) {
$this->error(__('You have no permission'));
}
}
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
try {
$result = $this->model->where('id', $ids)->update($params);
if ($result !== false) {
$this->success();
} else {
$this->error($row->getError());
}
} catch (\think\exception\PDOException $e) {
$this->error($e->getMessage());
} catch (\think\Exception $e) {
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->assignFields($ids);
$this->view->assign("row", $row);
return $this->view->fetch();
}
/**
* 删除
*/
public function del($ids = "")
{
if ($ids) {
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$count = $this->model->where($this->dataLimitField, 'in', $adminIds);
}
$count = $this->model->where($pk, 'in', $ids)->delete();
if ($count) {
$this->success();
} else {
$this->error(__('No rows were deleted'));
}
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
private function assignFields($diydata_id = 0)
{
$values = [];
if ($diydata_id) {
$values = db($this->diyform['table'])->where('id', $diydata_id)->find();
}
$fields = \app\admin\model\Fields::where('diyform_id', $this->diyform['id'])
->order('weigh desc,id desc')
->select();
foreach ($fields as $k => $v) {
$v->value = isset($values[$v['name']]) ? $values[$v['name']] : '';
$v->rule = str_replace(',', '; ', $v->rule);
if (in_array($v->type, ['checkbox', 'lists', 'images'])) {
$checked = '';
if ($v['minimum'] && $v['maximum'])
$checked = "{$v['minimum']}~{$v['maximum']}";
else if ($v['minimum'])
$checked = "{$v['minimum']}~";
else if ($v['maximum'])
$checked = "~{$v['maximum']}";
if ($checked)
$v->rule .= (';checked(' . $checked . ')');
}
if (in_array($v->type, ['checkbox', 'radio']) && stripos($v->rule, 'required') !== false) {
$v->rule = str_replace('required', 'checked', $v->rule);
}
if (in_array($v->type, ['selects'])) {
$v->extend .= (' ' . 'data-max-options="' . $v['maximum'] . '"');
}
}
$this->view->assign('fields', $fields);
$this->view->assign('values', $values);
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 自定义表单表
*
* @icon fa fa-circle-o
*/
class Diyform extends Backend
{
/**
* Model模型对象
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('Diyform');
$this->view->assign("statusList", $this->model->getStatusList());
}
}

View File

@ -1,114 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
use app\common\model\Config;
/**
* 模型字段表
*
* @icon fa fa-circle-o
*/
class Fields extends Backend
{
/**
* Fields模型对象
*/
protected $model = null;
protected $modelValidate = true;
protected $modelSceneValidate = true;
protected $noNeedRight = ['rulelist'];
public function _initialize()
{
parent::_initialize();
$this->model = model('Fields');
$this->view->assign("statusList", $this->model->getStatusList());
$this->view->assign('typeList', Config::getTypeList());
$this->view->assign('regexList', Config::getRegexList());
}
/**
* 查看
*/
public function index()
{
$model_id = $this->request->param('model_id', 0);
$diyform_id = $this->request->param('diyform_id', 0);
$condition = $model_id ? ['model_id' => $model_id] : ['diyform_id' => $diyform_id];
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax()) {
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->where($condition)
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($condition)
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
$this->assignconfig('model_id', $model_id);
$this->assignconfig('diyform_id', $diyform_id);
$this->view->assign('model_id', $model_id);
$this->view->assign('diyform_id', $diyform_id);
$model = $model_id ? \app\admin\model\Modelx::get($model_id) : \app\admin\model\Diyform::get($diyform_id);
$this->view->assign('model', $model);
$modelList = $model_id ? \app\admin\model\Modelx::all() : \app\admin\model\Diyform::all();
$this->view->assign('modelList', $modelList);
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
{
$model_id = $this->request->param('model_id', 0);
$diyform_id = $this->request->param('diyform_id', 0);
$this->view->assign('model_id', $model_id);
$this->view->assign('diyform_id', $diyform_id);
return parent::add();
}
/**
* 规则列表
* @internal
*/
public function rulelist()
{
//主键
$primarykey = $this->request->request("keyField");
//主键值
$keyValue = $this->request->request("keyValue", "");
$keyValueArr = array_filter(explode(',', $keyValue));
$regexList = Config::getRegexList();
$list = [];
foreach ($regexList as $k => $v) {
if ($keyValueArr) {
if (in_array($k, $keyValueArr)) {
$list[] = ['id' => $k, 'name' => $v];
}
} else {
$list[] = ['id' => $k, 'name' => $v];
}
}
return json(['list' => $list]);
}
}

View File

@ -1,26 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 内容模型表
*
* @icon fa fa-circle-o
*/
class Modelx extends Backend
{
/**
* Model模型对象
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('Modelx');
}
}

View File

@ -1,63 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 单页表
*
* @icon fa fa-circle-o
*/
class Page extends Backend
{
/**
* Page模型对象
*/
protected $model = null;
protected $noNeedRight = ['selectpage_type'];
public function _initialize()
{
parent::_initialize();
$this->model = model('Page');
$this->view->assign("flagList", $this->model->getFlagList());
$this->view->assign("statusList", $this->model->getStatusList());
}
public function index()
{
$typeArr = \app\admin\model\Page::column('type');
$this->view->assign('typeList', $typeArr);
return parent::index();
}
/**
* 动态下拉选择类型
* @internal
*/
public function selectpage_type()
{
$list = [];
$word = (array)$this->request->request("q_word/a");
$field = $this->request->request('showField');
$keyValue = $this->request->request('keyValue');
if (!$keyValue) {
if (array_filter($word)) {
foreach ($word as $k => $v) {
$list[] = ['id' => $v, $field => $v];
}
}
$typeArr = \app\admin\model\Page::column('type');
$typeArr = array_unique($typeArr);
foreach ($typeArr as $index => $item) {
$list[] = ['id' => $item, $field => $item];
}
} else {
$list[] = ['id' => $keyValue, $field => $keyValue];
}
return json(['total' => count($list), 'list' => $list]);
}
}

View File

@ -1,46 +0,0 @@
<?php
namespace app\admin\controller\cms;
use app\common\controller\Backend;
/**
* 标签表
*
* @icon tags
*/
class Tags extends Backend
{
/**
* Tags模型对象
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('Tags');
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个方法
* 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
public function selectpage()
{
$response = parent::selectpage();
$word = (array)$this->request->request("q_word/a");
if (array_filter($word)) {
$result = $response->getData();
foreach ($word as $k => $v) {
array_unshift($result['list'], ['id' => $v, 'name' => $v]);
$result['total']++;
}
$response->data($result);
}
return $response;
}
}

View File

@ -1,41 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 百度地图
*
* @icon fa fa-map
* @remark 可以搜索百度位置调用百度地图的相关API
*/
class Baidumap extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
/**
* 查找地图
*/
public function map()
{
return $this->view->fetch();
}
/**
* 搜索列表
*/
public function selectpage()
{
$this->model = model('Area');
return parent::selectpage();
}
}

View File

@ -1,121 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 表格完整示例
*
* @icon fa fa-table
* @remark 在使用Bootstrap-table中的常用方式,更多使用方式可查看:http://bootstrap-table.wenzhixin.net.cn/zh-cn/
*/
class Bootstraptable extends Backend
{
protected $model = null;
protected $noNeedRight = ['start', 'pause', 'change', 'detail', 'cxselect', 'searchlist'];
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
/**
* 查看
*/
public function index()
{
if ($this->request->isAjax()) {
list($where, $sort, $order, $offset, $limit) = $this->buildparams(NULL);
$total = $this->model
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list, "extend" => ['money' => mt_rand(100000,999999), 'price' => 200]);
return json($result);
}
return $this->view->fetch();
}
/**
* 详情
*/
public function detail($ids)
{
$row = $this->model->get(['id' => $ids]);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isAjax()) {
$this->success("Ajax请求成功", null, ['id' => $ids]);
}
$this->view->assign("row", $row->toArray());
return $this->view->fetch();
}
/**
* 启用
*/
public function start($ids = '')
{
$this->success("模拟启动成功");
}
/**
* 暂停
*/
public function pause($ids = '')
{
$this->success("模拟暂停成功");
}
/**
* 切换
*/
public function change($ids = '')
{
$this->success("模拟切换成功");
}
/**
* 联动搜索
*/
public function cxselect()
{
$type = $this->request->get('type');
$group_id = $this->request->get('group_id');
$list = null;
if ($group_id !== '') {
if ($type == 'group') {
$groupIds = $this->auth->getChildrenGroupIds(true);
$list = \app\admin\model\AuthGroup::where('id', 'in', $groupIds)->field('id as value, name')->select();
} else {
$adminIds = \app\admin\model\AuthGroupAccess::where('group_id', 'in', $group_id)->column('uid');
$list = \app\admin\model\Admin::where('id', 'in', $adminIds)->field('id as value, username AS name')->select();
}
}
$this->success('', null, $list);
}
/**
* 搜索下拉列表
*/
public function searchlist()
{
$result = $this->model->limit(10)->select();
$searchlist = [];
foreach ($result as $key => $value) {
$searchlist[] = ['id' => $value['url'], 'name' => $value['url']];
}
$data = ['searchlist' => $searchlist];
$this->success('', null, $data);
}
}

View File

@ -1,24 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 彩色角标
*
* @icon fa fa-table
* @remark 在JS端控制角标的显示与隐藏,请注意左侧菜单栏角标的数值变化
*/
class Colorbadge extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
}

View File

@ -1,24 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 控制器间跳转
*
* @icon fa fa-table
* @remark FastAdmin支持在控制器间跳转,点击后将切换到另外一个TAB中,无需刷新当前页面
*/
class Controllerjump extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
}

View File

@ -1,26 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 自定义搜索
*
* @icon fa fa-search
* @remark 自定义列表的搜索
*/
class Customsearch extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
$ipList = $this->model->whereTime('createtime', '-37 days')->group("ip")->column("ip,ip as aa");
$this->view->assign("ipList", $ipList);
}
}

View File

@ -1,23 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 多级联动
*
* @icon fa fa-table
* @remark FastAdmin使用了jQuery-cxselect实现多级联动,更多文档请参考https://github.com/karsonzhang/cxSelect
*/
class Cxselect extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
}
}

View File

@ -1,95 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 多表格示例
*
* @icon fa fa-table
* @remark 当一个页面上存在多个Bootstrap-table时该如何控制按钮和表格
*/
class Multitable extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
}
/**
* 查看
*/
public function index()
{
$this->loadlang('general/attachment');
$this->loadlang('general/crontab');
return $this->view->fetch();
}
public function table1()
{
$this->model = model('Attachment');
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch('index');
}
public function table2()
{
$this->model = model('AdminLog');
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch('index');
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 关联模型
*
* @icon fa fa-table
* @remark 当使用到关联模型时需要重载index方法
*/
class Relationmodel extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
/**
* 查看
*/
public function index()
{
$this->relationSearch = true;
$this->searchFields = "admin.username,id";
if ($this->request->isAjax())
{
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->with("admin")
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->with("admin")
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
}

View File

@ -1,60 +0,0 @@
<?php
namespace app\admin\controller\example;
use app\common\controller\Backend;
/**
* 表格模板示例
*
* @icon fa fa-table
* @remark 可以通过使用表格模板将表格中的行渲染成一样的展现方式,基于此功能可以任意定制自己想要的展示列表
*/
class Tabletemplate extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('AdminLog');
}
/**
* 查看
*/
public function index()
{
if ($this->request->isAjax())
{
list($where, $sort, $order, $offset, $limit) = $this->buildparams(NULL);
$total = $this->model
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
/**
* 详情
*/
public function detail($ids)
{
$row = $this->model->get(['id' => $ids]);
if (!$row)
$this->error(__('No Results were found'));
$this->view->assign("row", $row->toArray());
return $this->view->fetch();
}
}

View File

@ -1,290 +0,0 @@
<?php
namespace app\admin\controller\general;
use addons\database\library\Backup;
use app\common\controller\Backend;
use think\Db;
use think\Debug;
use think\Exception;
use think\exception\PDOException;
use ZipArchive;
/**
* 数据库管理
*
* @icon fa fa-database
* @remark 可在线进行一些简单的数据库表优化或修复,查看表结构和数据。也可以进行SQL语句的操作
*/
class Database extends Backend
{
protected $noNeedRight = ['backuplist'];
/**
* 查看
*/
function index()
{
$tables_data_length = $tables_index_length = $tables_free_length = $tables_data_count = 0;
$tables = $list = [];
$list = Db::query("SHOW TABLES");
foreach ($list as $key => $row) {
$tables[] = ['name' => reset($row), 'rows' => 0];
}
$data['tables'] = $tables;
$data['saved_sql'] = [];
$this->view->assign($data);
return $this->view->fetch();
}
/**
* SQL查询
*/
public function query()
{
$do_action = $this->request->post('do_action');
echo '<style type="text/css">
xmp,body{margin:0;padding:0;line-height:18px;font-size:12px;font-family:"Helvetica Neue", Helvetica, Microsoft Yahei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif;}
hr{height:1px;margin:5px 1px;background:#e3e3e3;border:none;}
</style>';
if ($do_action == '')
exit(__('Invalid parameters'));
$tablename = $this->request->post("tablename/a");
if (in_array($do_action, array('doquery', 'optimizeall', 'repairall'))) {
$this->$do_action();
} else if (count($tablename) == 0) {
exit(__('Invalid parameters'));
} else {
foreach ($tablename as $table) {
$this->$do_action($table);
echo "<br />";
}
}
}
/**
* 备份列表
* @internal
*/
public function backuplist()
{
$config = get_addon_config('database');
$backupDir = ROOT_PATH . 'public' . DS . $config['backupDir'];
$backuplist = [];
foreach (glob($backupDir . "*.zip") as $filename) {
$time = filemtime($filename);
$backuplist[$time] =
[
'file' => str_replace($backupDir, '', $filename),
'date' => date("Y-m-d H:i:s", $time),
'size' => format_bytes(filesize($filename))
];
}
krsort($backuplist);
$this->success("", null, ['backuplist' => array_values($backuplist)]);
}
/**
* 还原
*/
public function restore($ids = '')
{
$config = get_addon_config('database');
$backupDir = ROOT_PATH . 'public' . DS . $config['backupDir'];
if ($this->request->isPost()) {
$action = $this->request->request('action');
$file = $this->request->request('file');
$file = $backupDir . $file;
if ($action == 'restore') {
try {
$dir = RUNTIME_PATH . 'database' . DS;
if (!is_dir($dir)) {
mkdir($dir, 0755);
}
if (class_exists('ZipArchive')) {
$zip = new ZipArchive;
if ($zip->open($file) !== TRUE) {
throw new Exception(__('Can not open zip file'));
}
if (!$zip->extractTo($dir)) {
$zip->close();
throw new Exception(__('Can not unzip file'));
}
$zip->close();
$filename = basename($file);
$sqlFile = $dir . str_replace('.zip', '.sql', $filename);
if (!is_file($sqlFile)) {
throw new Exception(__('Sql file not found'));
}
$filesize = filesize($sqlFile);
$list = Db::query('SELECT @@global.max_allowed_packet');
if (isset($list[0]['@@global.max_allowed_packet']) && $filesize >= $list[0]['@@global.max_allowed_packet']) {
Db::execute('SET @@global.max_allowed_packet = ' . ($filesize + 1024));
//throw new Exception('备份文件超过配置max_allowed_packet大小请修改Mysql服务器配置');
}
$sql = file_get_contents($sqlFile);
Db::clear();
//必须重连一次
Db::connect([], true)->query("select 1");
Db::getPdo()->exec($sql);
}
} catch (Exception $e) {
$this->error($e->getMessage());
} catch (PDOException $e) {
$this->error($e->getMessage());
}
$this->success(__('Restore successful'));
} else if ($action == 'delete') {
unlink($file);
$this->success(__('Delete successful'));
}
}
}
/**
* 备份
*/
public function backup()
{
$config = get_addon_config('database');
$backupDir = ROOT_PATH . 'public' . DS . $config['backupDir'];
if ($this->request->isPost()) {
$database = config('database');
try {
$backup = new Backup($database['hostname'], $database['username'], $database['database'], $database['password'], $database['hostport']);
$backup->setIgnoreTable($config['backupIgnoreTables'])->backup($backupDir);
} catch (Exception $e) {
$this->error($e->getMessage());
}
$this->success(__('Backup successful'));
}
return;
}
private function viewinfo($name)
{
$row = Db::query("SHOW CREATE TABLE `{$name}`");
$row = array_values($row[0]);
$info = $row[1];
echo "<xmp>{$info};</xmp>";
}
private function viewdata($name = '')
{
$sqlquery = "SELECT * FROM `{$name}`";
$this->doquery($sqlquery);
}
private function optimize($name = '')
{
if (Db::execute("OPTIMIZE TABLE `{$name}`")) {
echo __('Optimize table %s done', $name);
} else {
echo __('Optimize table %s fail', $name);
}
}
private function optimizeall($name = '')
{
$list = Db::query("SHOW TABLES");
foreach ($list as $key => $row) {
$name = reset($row);
if (Db::execute("OPTIMIZE TABLE {$name}")) {
echo __('Optimize table %s done', $name);
} else {
echo __('Optimize table %s fail', $name);
}
echo "<br />";
}
}
private function repair($name = '')
{
if (Db::execute("REPAIR TABLE `{$name}`")) {
echo __('Repair table %s done', $name);
} else {
echo __('Repair table %s fail', $name);
}
}
private function repairall($name = '')
{
$list = Db::query("SHOW TABLES");
foreach ($list as $key => $row) {
$name = reset($row);
if (Db::execute("REPAIR TABLE {$name}")) {
echo __('Repair table %s done', $name);
} else {
echo __('Repair table %s fail', $name);
}
echo "<br />";
}
}
private function doquery($sql = null)
{
$sqlquery = $sql ? $sql : $this->request->post('sqlquery');
if ($sqlquery == '')
exit(__('SQL can not be empty'));
$sqlquery = str_replace("\r", "", $sqlquery);
$sqls = preg_split("/;[ \t]{0,}\n/i", $sqlquery);
$maxreturn = 100;
$r = '';
foreach ($sqls as $key => $val) {
if (trim($val) == '')
continue;
$val = rtrim($val, ';');
$r .= "SQL<span style='color:green;'>{$val}</span> ";
if (preg_match("/^(select|explain)(.*)/i ", $val)) {
Debug::remark("begin");
$limit = stripos(strtolower($val), "limit") !== false ? true : false;
$count = Db::execute($val);
if ($count > 0) {
$resultlist = Db::query($val . (!$limit && $count > $maxreturn ? ' LIMIT ' . $maxreturn : ''));
} else {
$resultlist = [];
}
Debug::remark("end");
$time = Debug::getRangeTime('begin', 'end', 4);
$usedseconds = __('Query took %s seconds', $time) . "<br />";
if ($count <= 0) {
$r .= __('Query returned an empty result');
} else {
$r .= (__('Total:%s', $count) . (!$limit && $count > $maxreturn ? ',' . __('Max output:%s', $maxreturn) : ""));
}
$r = $r . ',' . $usedseconds;
$j = 0;
foreach ($resultlist as $m => $n) {
$j++;
if (!$limit && $j > $maxreturn)
break;
$r .= "<hr/>";
$r .= "<font color='red'>" . __('Row:%s', $j) . "</font><br />";
foreach ($n as $k => $v) {
$r .= "<font color='blue'>{$k}</font>{$v}<br/>\r\n";
}
}
} else {
Debug::remark("begin");
$count = Db::execute($val);
Debug::remark("end");
$time = Debug::getRangeTime('begin', 'end', 4);
$r .= __('Query affected %s rows and took %s seconds', $count, $time) . "<br />";
}
}
echo $r;
}
}

View File

@ -1,67 +0,0 @@
<?php
namespace app\admin\controller\wechat;
use app\common\controller\Backend;
use app\common\model\WechatResponse;
/**
* 微信自动回复管理
*
* @icon fa fa-circle-o
*/
class Autoreply extends Backend
{
protected $model = null;
protected $noNeedRight = ['check_text_unique'];
public function _initialize()
{
parent::_initialize();
$this->model = model('WechatAutoreply');
}
/**
* 编辑
*/
public function edit($ids = NULL)
{
$row = $this->model->get(['id' => $ids]);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
$row->save($params);
$this->success();
}
$this->error();
}
$response = WechatResponse::get(['eventkey' => $row['eventkey']]);
$this->view->assign("response", $response);
$this->view->assign("row", $row);
return $this->view->fetch();
}
/**
* 判断文本是否唯一
* @internal
*/
public function check_text_unique()
{
$row = $this->request->post("row/a");
$except = $this->request->post("except");
$text = isset($row['text']) ? $row['text'] : '';
if ($this->model->where('text', $text)->where(function ($query) use ($except) {
if ($except) {
$query->where('text', '<>', $except);
}
})->count() == 0) {
$this->success();
} else {
$this->error(__('Text already exists'));
}
}
}

View File

@ -1,126 +0,0 @@
<?php
namespace app\admin\controller\wechat;
use app\common\controller\Backend;
use think\Controller;
use think\Request;
/**
* 微信配置管理
*
* @icon fa fa-circle-o
*/
class Config extends Backend
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = model('WechatConfig');
}
/**
* 添加
*/
public function add()
{
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
foreach ($params as $k => &$v) {
$v = is_array($v) ? implode(',', $v) : $v;
}
if ($params['mode'] == 'json') {
//JSON字段
$fieldarr = $valuearr = [];
$field = $this->request->post('field/a');
$value = $this->request->post('value/a');
foreach ($field as $k => $v) {
if ($v != '') {
$fieldarr[] = $field[$k];
$valuearr[] = $value[$k];
}
}
$params['value'] = json_encode(array_combine($fieldarr, $valuearr), JSON_UNESCAPED_UNICODE);
}
unset($params['mode']);
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = basename(str_replace('\\', '/', get_class($this->model)));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
$this->model->validate($validate);
}
$result = $this->model->save($params);
if ($result !== false) {
$this->success();
} else {
$this->error($this->model->getError());
}
} catch (\think\exception\PDOException $e) {
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* 编辑
*/
public function edit($ids = NULL)
{
$row = $this->model->get($ids);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
foreach ($params as $k => &$v) {
$v = is_array($v) ? implode(',', $v) : $v;
}
if ($params['mode'] == 'json') {
//JSON字段
$fieldarr = $valuearr = [];
$field = $this->request->post('field/a');
$value = $this->request->post('value/a');
foreach ($field as $k => $v) {
if ($v != '') {
$fieldarr[] = $field[$k];
$valuearr[] = $value[$k];
}
}
$params['value'] = json_encode(array_combine($fieldarr, $valuearr), JSON_UNESCAPED_UNICODE);
}
unset($params['mode']);
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = basename(str_replace('\\', '/', get_class($this->model)));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
$row->validate($validate);
}
$result = $row->save($params);
if ($result !== false) {
$this->success();
} else {
$this->error($row->getError());
}
} catch (\think\exception\PDOException $e) {
$this->error($e->getMessage());
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->view->assign("row", $row);
$this->view->assign("value", (array)json_decode($row->value, true));
return $this->view->fetch();
}
}

View File

@ -1,90 +0,0 @@
<?php
namespace app\admin\controller\wechat;
use app\common\controller\Backend;
use app\common\model\WechatResponse;
use EasyWeChat\Foundation\Application;
use think\Exception;
/**
* 菜单管理
*
* @icon fa fa-list-alt
*/
class Menu extends Backend
{
protected $wechatcfg = NULL;
public function _initialize()
{
parent::_initialize();
$this->wechatcfg = \app\common\model\WechatConfig::get(['name' => 'menu']);
}
/**
* 查看
*/
public function index()
{
$responselist = array();
$all = WechatResponse::all();
foreach ($all as $k => $v) {
$responselist[$v['eventkey']] = $v['title'];
}
$this->view->assign('responselist', $responselist);
$this->view->assign('menu', (array)json_decode($this->wechatcfg->value, TRUE));
return $this->view->fetch();
}
/**
* 修改
*/
public function edit($ids = NULL)
{
$menu = $this->request->post("menu");
$menu = (array)json_decode($menu, TRUE);
$this->wechatcfg->value = json_encode($menu, JSON_UNESCAPED_UNICODE);
$this->wechatcfg->save();
$this->success();
}
/**
* 同步
*/
public function sync($ids = NULL)
{
$app = new Application(get_addon_config('wechat'));
try {
$hasError = false;
$menu = json_decode($this->wechatcfg->value, TRUE);
foreach ($menu as $k => $v) {
if (isset($v['sub_button'])) {
foreach ($v['sub_button'] as $m => $n) {
if (isset($n['key']) && !$n['key']) {
$hasError = true;
break 2;
}
}
} else if (isset($v['key']) && !$v['key']) {
$hasError = true;
break;
}
}
if (!$hasError) {
$ret = $app->menu->add($menu);
if ($ret->errcode == 0) {
$this->success();
} else {
$this->error($ret->errmsg);
}
} else {
$this->error(__('Invalid parameters'));
}
} catch (Exception $e) {
$this->error($e->getMessage());
}
}
}

View File

@ -1,79 +0,0 @@
<?php
namespace app\admin\controller\wechat;
use app\common\controller\Backend;
use addons\wechat\library\Wechat;
/**
* 资源管理
*
* @icon fa fa-list-alt
*/
class Response extends Backend
{
protected $model = null;
protected $searchFields = 'id,title';
public function _initialize()
{
parent::_initialize();
$this->model = model('WechatResponse');
}
/**
* 选择素材
*/
public function select()
{
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
{
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
$params['eventkey'] = isset($params['eventkey']) && $params['eventkey'] ? $params['eventkey'] : uniqid();
$params['content'] = json_encode($params['content']);
$params['createtime'] = time();
if ($params) {
$this->model->save($params);
$this->success();
$this->content = $params;
}
$this->error();
}
$appConfig = Wechat::appConfig();
$this->view->applist = $appConfig;
return $this->view->fetch();
}
/**
* 编辑
*/
public function edit($ids = NULL)
{
$row = $this->model->get($ids);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
$params['eventkey'] = isset($params['eventkey']) && $params['eventkey'] ? $params['eventkey'] : uniqid();
$params['content'] = json_encode($params['content']);
if ($params) {
$row->save($params);
$this->success();
}
$this->error();
}
$this->view->assign("row", $row);
$appConfig = Wechat::appConfig();
$this->view->applist = $appConfig;
return $this->view->fetch();
}
}

View File

@ -1,48 +0,0 @@
<?php
return [
'Channel' => '栏目',
'Channel_id' => '栏目ID',
'Channel_name' => '栏目名称',
'Channel list' => '栏目列表',
'Addon list' => '副表列表',
'Model' => '模型',
'Model_id' => '模型ID',
'User_id' => '发布会员',
'Title' => '文章标题',
'Flag' => '标志',
'Image' => '缩略图',
'Keywords' => '关键字',
'Description' => '描述',
'Tags' => 'TAG',
'Weigh' => '权重',
'Views' => '浏览',
'Comments' => '评论',
'Likes' => '点赞',
'Dislikes' => '点踩',
'Diyname' => '自定义URL',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Deletetime' => '删除时间',
'Recycle bin' => '回收站',
'Restore' => '还原',
'Restore all' => '还原全部',
'Destroy' => '销毁',
'Destroy all' => '清空回收站',
'Nothing need restore' => '没有需要还原的数据',
'Move tips' => '只能将数据移动到相同模型的栏目下,不同模型的数据移动将被忽略',
'Are you sure you want to truncate?' => '确认清空回收站?',
'Can not be digital' => '不能为数字',
'Please select channel' => '请选择分类',
'The data already exist' => '已经存在',
'Status' => '状态',
'Status normal' => '正常',
'Status hidden' => '隐藏',
'Status rejected' => '已拒绝',
'Status pulloff' => '已下线',
'Set to rejected' => '设为拒绝',
'Set to pulloff' => '设为下线',
'Array key' => '键',
'Array value' => '值',
'Publish' => '发布'
];

View File

@ -1,13 +0,0 @@
<?php
return [
'Type' => '类型',
'Name' => '名称',
'Title' => '标题',
'Image' => '图片',
'Url' => '链接',
'Content' => '内容',
'Createtime' => '添加时间',
'Updatetime' => '更新时间',
'Status' => '状态'
];

View File

@ -1,30 +0,0 @@
<?php
return [
'Type' => '类型',
'Model_id' => '模型ID',
'Model_name' => '模型名称',
'Parent_id' => '父ID',
'Parent_ids' => '父ID集合',
'Child_ids' => '子ID集合',
'Name' => '名称',
'Image' => '图片',
'Keywords' => '关键字',
'Description' => '描述',
'Diyname' => '自定义名称',
'Outlink' => '外部链接',
'Items' => '文章数量',
'Weigh' => '权重',
'Channeltpl' => '栏目页模板',
'Listtpl' => '列表页模板',
'Showtpl' => '详情页模板',
'Pagesize' => '分页大小',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'The data already exist' => '已经存在',
'Iscontribute' => '是否允许投稿',
'Status' => '状态',
'Channel' => '栏目',
'List' => '列表',
'Link' => '外部链接'
];

View File

@ -1,19 +0,0 @@
<?php
return [
'Id' => 'ID',
'Type' => '类型',
'Archives' => '文档',
'Page' => '单页',
'Aid' => '关联ID',
'Pid' => '父ID',
'User_id' => '会员ID',
'Content' => '内容',
'Comments' => '评论数',
'Ip' => 'IP',
'Useragent' => 'User Agent',
'Subscribe' => '订阅',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Status' => '状态'
];

View File

@ -1,8 +0,0 @@
<?php
return [
'User_id' => '会员ID',
'Createtime' => '添加时间',
'Updatetime' => '更新时间',
'Status' => '状态'
];

View File

@ -1,16 +0,0 @@
<?php
return [
'Type' => '类型',
'Name' => '名称',
'Table' => '表名',
'Keywords' => '关键字',
'Description' => '描述',
'Successtips' => '成功提交提示文字',
'Diyname' => '自定义名称',
'Needlogin' => '是否需要登录',
'Formtpl' => '表单模板',
'Createtime' => '添加时间',
'Updatetime' => '更新时间',
'Status' => '状态'
];

View File

@ -1,45 +0,0 @@
<?php
return [
'Model_id' => '模型ID',
'Name' => '名称',
'Type' => '类型',
'Title' => '标题',
'Content' => '条目列表',
'Rule' => '验证规则',
'Validate Msg' => '错误消息',
'Validate Ok' => '成功消息',
'Validate Tip' => '提示消息',
'Extend' => '扩展信息',
'Weigh' => '排序',
'Setting' => '字段设置',
'Length' => '字段长度',
'Decimals' => '小数点长度',
'Minimum' => '最少选择',
'Maximum' => '最大选择',
'Defaultvalue' => '默认值',
'Iscontribute' => '是否可投稿',
'Isfilter' => '是否列表筛选',
'String' => '字符',
'Text' => '文本',
'Editor' => '编辑器',
'Number' => '数字',
'Date' => '日期',
'Time' => '时间',
'Datetime' => '日期时间',
'Image' => '图片',
'Images' => '图片(多)',
'File' => '文件',
'Files' => '文件(多)',
'Select' => '列表',
'Selects' => '列表(多选)',
'Switch' => '开关',
'Checkbox' => '复选',
'Radio' => '单选',
'Array' => '数组',
'Array key' => '键名',
'Array value' => '键值',
'Createtime' => '添加时间',
'Updatetime' => '更新时间',
'Status' => '状态'
];

View File

@ -1,15 +0,0 @@
<?php
return [
'Name' => '模型名称',
'Table' => '表名',
'Fields' => '字段列表',
'Channeltpl' => '栏目页模板',
'Listtpl' => '列表页模板',
'Showtpl' => '详情页模板',
'Main list' => '主表列表',
'Addon list' => '副表列表',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Setting' => '配置'
];

View File

@ -1,22 +0,0 @@
<?php
return [
'Id' => 'ID',
'Category_id' => '分类ID',
'Type' => '类型',
'Title' => '标题',
'Keywords' => '关键字',
'Description' => '描述',
'Flag' => '标志',
'Image' => '图片',
'Content' => '内容',
'Icon' => '图标',
'Views' => '点击',
'Comments' => '评论',
'Diyname' => '自定义',
'Showtpl' => '视图模板',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Weigh' => '权重',
'Status' => '状态'
];

View File

@ -1,7 +0,0 @@
<?php
return [
'Name' => '标签名称',
'Archives' => '文档ID集合',
'Nums' => '文档数量'
];

View File

@ -1,8 +0,0 @@
<?php
return [
'Id' => 'ID',
'Name' => '标签名称',
'Tenant_ids' => '租客集合',
'Nums' => '租客数量'
];

View File

@ -1,17 +0,0 @@
<?php
return [
'name' => '名称',
'title' => '标题',
'type' => '分类',
'sort' => '排序',
'relative' => '文件位置',
'contributeurl' => '贡献URL',
'source' => 'MD源内容',
'preview' => '预览',
'order' => '排序',
'isnew' => '新标识',
'markdown file' => 'MD文件名称',
'refresh docs' => '刷新缓存',
'export html' => '导出HTML',
];

View File

@ -1,43 +0,0 @@
<?php
return [
'SQL Result' => '查询结果',
'Basic query' => '基础查询',
'View structure' => '查看表结构',
'View data' => '查看表数据',
'Backup and Restore' => '备份与还原',
'Backup now' => '立即备份',
'File' => '文件',
'Size' => '大小',
'Date' => '备份日期',
'Restore' => '还原',
'Delete' => '删除',
'Optimize' => '优化表',
'Repair' => '修复表',
'Optimize all' => '优化全部表',
'Repair all' => '修复全部表',
'Backup successful' => '备份成功',
'Restore successful' => '还原成功',
'Delete successful' => '删除成功',
'Can not open zip file' => '无法打开备份文件',
'Can not unzip file' => '无法解压备份文件',
'Sql file not found' => '未找到SQL文件',
'Table:%s' => '总计:%s个表',
'Record:%s' => '记录:%s条',
'Data:%s' => '占用:%s',
'Index:%s' => '索引:%s',
'SQL Result:' => '查询结果:',
'SQL can not be empty' => 'SQL语句不能为空',
'Max output:%s' => '最大返回%s条',
'Total:%s' => '共有%s条记录! ',
'Row:%s' => '记录:%s',
'Executes one or multiple queries which are concatenated by a semicolon' => '请输入SQL语句支持批量查询多条SQL以分号(;)分格',
'Query affected %s rows and took %s seconds' => '共影响%s条记录! 耗时:%s秒!',
'Query returned an empty result' => '返回结果为空!',
'Query took %s seconds' => '耗时%s秒!',
'Optimize table %s done' => '优化表[%s]成功',
'Repair table %s done' => '修复表[%s]成功',
'Optimize table %s fail' => '优化表[%s]失败',
'Repair table %s fail' => '修复表[%s]失败'
];

View File

@ -1,47 +0,0 @@
<?php
return [
'Id' => 'ID',
'Admin_id' => '管理员ID',
'Category_id' => '分类ID(单选)',
'Category_ids' => '分类ID(多选)',
'Week' => '星期(单选)',
'Week monday' => '星期一',
'Week tuesday' => '星期二',
'Week wednesday' => '星期三',
'Flag' => '标志(多选)',
'Flag hot' => '热门',
'Flag index' => '首页',
'Flag recommend' => '推荐',
'Genderdata' => '性别(单选)',
'Genderdata male' => '男',
'Genderdata female' => '女',
'Hobbydata' => '爱好(多选)',
'Hobbydata music' => '音乐',
'Hobbydata reading' => '读书',
'Hobbydata swimming' => '游泳',
'Title' => '标题',
'Content' => '内容',
'Image' => '图片',
'Images' => '图片组',
'Attachfile' => '附件',
'Keywords' => '关键字',
'Description' => '描述',
'City' => '省市',
'Price' => '价格',
'Views' => '点击',
'Startdate' => '开始日期',
'Activitytime' => '活动时间(datetime)',
'Year' => '年',
'Times' => '时间',
'Refreshtime' => '刷新时间(int)',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Weigh' => '权重',
'Switch' => '开关',
'Status' => '状态',
'State' => '状态值',
'State 0' => '禁用',
'State 1' => '正常',
'State 2' => '推荐',
];

View File

@ -1,8 +0,0 @@
<?php
return [
'Text' => '文本',
'Event key' => '响应标识',
'Remark' => '备注',
'Text already exists' => '文本已经存在',
];

View File

@ -1,10 +0,0 @@
<?php
return [
'name' => '配置名称',
'value' => '配置值',
'Json key' => '键',
'Json value' => '值',
'createtime' => '创建时间',
'updatetime' => '更新时间'
];

View File

@ -1,8 +0,0 @@
<?php
return [
'Resource title' => '资源标题',
'Event key' => '事件标识',
'Text' => '文本',
'App' => '应用',
];

View File

@ -1,138 +0,0 @@
<?php
namespace app\admin\model;
use app\admin\model\Channel;
use app\admin\model\Tags;
use app\common\model\Config;
use think\Model;
use traits\model\SoftDelete;
class Archives extends Model
{
use SoftDelete;
// 表名
protected $name = 'cms_archives';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
'flag_text',
'status_text',
'publishtime_text',
'url',
];
public function getUrlAttr($value, $data)
{
$diyname = $data['diyname'] ? $data['diyname'] : $data['id'];
return addon_url('cms/archives/index', [':id' => $data['id'], ':diyname' => $diyname, ':channel' => $data['channel_id']]);
}
protected static function init()
{
self::afterInsert(function ($row) {
$pk = $row->getPk();
$channel = Channel::get($row['channel_id']);
$row->getQuery()->where($pk, $row[$pk])->update(['model_id' => $channel ? $channel['model_id'] : 0, 'weigh' => $row[$pk]]);
Channel::where('id', $row['channel_id'])->setInc('items');
});
self::beforeWrite(function ($row) {
//在更新之前对数组进行处理
foreach ($row->getData() as $k => $value) {
if (is_array($value) && isset($value['field'])) {
$value = json_encode(Config::getArrayData($value), JSON_UNESCAPED_UNICODE);
} else {
$value = is_array($value) ? implode(',', $value) : $value;
}
$row->$k = $value;
}
});
self::afterWrite(function ($row) {
if (isset($row['channel_id'])) {
//在更新成功后刷新副表、TAGS表数据、栏目表
$channel = Channel::get($row->channel_id);
if ($channel) {
$model = Modelx::get($channel['model_id']);
if ($model && isset($row['content'])) {
$values = array_intersect_key($row->getData(), array_flip($model->fields));
$values['id'] = $row['id'];
$values['content'] = $row['content'];
db($model['table'])->insert($values, TRUE);
}
}
}
if (isset($row['tags'])) {
$tags = array_filter(explode(',', $row['tags']));
if ($tags) {
$tagslist = Tags::where('name', 'in', $tags)->select();
foreach ($tagslist as $k => $v) {
$archives = explode(',', $v['archives']);
if (!in_array($row['id'], $archives)) {
$archives[] = $row['id'];
$v->archives = implode(',', $archives);
$v->nums++;
$v->save();
}
$tags = array_diff($tags, [$v['name']]);
}
$list = [];
foreach ($tags as $k => $v) {
$list[] = ['name' => $v, 'archives' => $row['id'], 'nums' => 1];
}
if ($list) {
(new Tags())->saveAll($list);
}
}
}
});
}
public function getFlagList()
{
return ['hot' => __('Hot'), 'new' => __('New'), 'recommend' => __('Recommend')];
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden'), 'rejected' => __('Status rejected'), 'pulloff' => __('Status pulloff')];
}
public function getFlagTextAttr($value, $data)
{
$value = $value ? $value : $data['flag'];
$valueArr = $value ? explode(',', $value) : [];
$list = $this->getFlagList();
return implode(',', array_intersect_key($list, array_flip($valueArr)));
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getPublishtimeTextAttr($value, $data)
{
$value = $value ? $value : $data['publishtime'];
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
protected function setPublishtimeAttr($value)
{
return $value && !is_numeric($value) ? strtotime($value) : $value;
}
public function channel()
{
return $this->belongsTo('Channel', 'channel_id', '', [], 'LEFT')->setEagerlyType(0);
}
}

View File

@ -1,16 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Area extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = false;
// 定义时间戳字段名
protected $createTime = false;
protected $updateTime = false;
}

View File

@ -1,34 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Block extends Model
{
// 表名
protected $name = 'cms_block';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'status_text'
];
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
}

View File

@ -1,97 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Channel extends Model
{
// 表名
protected $name = 'cms_channel';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'type_text',
'status_text',
'url'
];
public function getUrlAttr($value, $data)
{
$diyname = $data['diyname'] ? $data['diyname'] : $data['id'];
return isset($data['type']) && isset($data['outlink']) && $data['type'] == 'link' ? $data['outlink'] : addon_url('cms/channel/index', [':id' => $data['id'], ':diyname' => $diyname]);
}
protected static function init()
{
self::afterInsert(function ($row) {
//创建时自动添加权重值
$pk = $row->getPk();
$row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
});
self::afterDelete(function ($row) {
//删除时,删除子节点,同时将所有相关文档移入回收站
static $tree;
if (!$tree) {
$tree = \fast\Tree::instance();
$tree->init(collection(Channel::order('weigh desc,id desc')->field('id,parent_id,name,type,diyname,status')->select())->toArray(), 'parent_id');
}
$childIds = $tree->getChildrenIds($row['id']);
if ($childIds) {
Channel::destroy(function ($query) use ($childIds) {
$query->where('id', 'in', $childIds);
});
}
$childIds[] = $row['id'];
db('cms_archives')->where('channel_id', 'in', $childIds)->update(['deletetime' => time()]);
});
self::afterWrite(function ($row) {
$changed = $row->getChangedData();
//隐藏时判断是否有子节点,有则隐藏
if (isset($changed['status']) && $changed['status'] == 'hidden') {
static $tree;
if (!$tree) {
$tree = \fast\Tree::instance();
$tree->init(collection(Channel::order('weigh desc,id desc')->field('id,parent_id,name,type,diyname,status')->select())->toArray(), 'parent_id');
}
$childIds = $tree->getChildrenIds($row['id']);
db('cms_channel')->where('id', 'in', $childIds)->update(['status' => 'hidden']);
}
});
}
public static function getTypeList()
{
return ['channel' => __('Channel'), 'list' => __('List'), 'link' => __('Link')];
}
public static function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getTypeTextAttr($value, $data)
{
$value = $value ? $value : $data['type'];
$list = $this->getTypeList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function model()
{
return $this->belongsTo('Modelx', 'model_id')->setEagerlyType(0);
}
}

View File

@ -1,58 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Comment extends Model
{
// 表名
protected $name = 'cms_comment';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'type_text',
'status_text'
];
public function getTypeList()
{
return ['archives' => __('Archives'), 'page' => __('Page')];
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getTypeTextAttr($value, $data)
{
$value = $value ? $value : $data['type'];
$list = $this->getTypeList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function archives()
{
return $this->belongsTo('Archives', 'aid', '', [], 'LEFT')->setEagerlyType(0);
}
}

View File

@ -1,59 +0,0 @@
<?php
namespace app\admin\model;
use think\Config;
use think\Model;
class Diyform extends Model
{
// 表名
protected $name = 'cms_diyform';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'url'
];
public static function init()
{
self::afterInsert(function ($row) {
$prefix = Config::get('database.prefix');
$sql = "CREATE TABLE `{$prefix}{$row['table']}` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` int(10) DEFAULT NULL COMMENT '会员ID',
`createtime` int(10) DEFAULT NULL COMMENT '添加时间',
`updatetime` int(10) DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='{$row['name']}'";
db()->query($sql);
});
}
public function getUrlAttr($value, $data)
{
$diyname = $data['diyname'] ? $data['diyname'] : $data['id'];
return addon_url('cms/diyform/index', [':id' => $data['id'], ':diyname' => $diyname]);
}
public function getFieldsAttr($value, $data)
{
return is_array($value) ? $value : ($value ? explode(',', $value) : []);
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
}

View File

@ -1,143 +0,0 @@
<?php
namespace app\admin\model;
use addons\cms\library\Alter;
use app\admin\model\Modelx;
use app\admin\model\Diyform;
use app\common\model\Config;
use think\Exception;
use think\exception\PDOException;
use think\Model;
class Fields extends Model
{
// 表名
protected $name = 'cms_fields';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'status_text',
'content_list',
];
protected static $listField = ['select', 'selects', 'checkbox', 'radio', 'array'];
public function setError($error)
{
$this->error = $error;
}
protected static function init()
{
$beforeUpdateCallback = function ($row) {
};
$afterInsertCallback = function ($row) {
//为了避免引起更新的事件回调这里采用直接执行SQL的写法
$row->query($row->fetchSql(true)->update(['id' => $row['id'], 'weigh' => $row['id']]));
$field = $row['model_id'] ? 'model_id' : 'diyform_id';
$model = $row['model_id'] ? Modelx::get($row[$field]) : Diyform::get($row[$field]);
if ($model) {
$sql = Alter::instance()
->setTable($model['table'])
->setName($row['name'])
->setLength($row['length'])
->setContent($row['content'])
->setDecimals($row['decimals'])
->setDefaultvalue($row['defaultvalue'])
->setComment($row['title'])
->setType($row['type'])
->getAddSql();
try {
db()->query($sql);
$fields = Fields::where($field, $model['id'])->field('name')->column('name');
$model->fields = implode(',', $fields);
$model->save();
} catch (PDOException $e) {
$row->getQuery()->where('id', $row->id)->delete();
throw new Exception($e->getMessage());
}
}
};
$afterUpdateCallback = function ($row) {
$field = $row['model_id'] ? 'model_id' : 'diyform_id';
$model = $row['model_id'] ? Modelx::get($row[$field]) : Diyform::get($row[$field]);
if ($model) {
$alter = Alter::instance();
if (isset($row['oldname']) && $row['oldname'] != $row['name']) {
$alter->setOldname($row['oldname']);
}
$sql = $alter
->setTable($model['table'])
->setName($row['name'])
->setLength($row['length'])
->setContent($row['content'])
->setDecimals($row['decimals'])
->setDefaultvalue($row['defaultvalue'])
->setComment($row['title'])
->setType($row['type'])
->getModifySql();
db()->query($sql);
$fields = Fields::where($field, $model['id'])->field('name')->column('name');
$model->fields = implode(',', $fields);
$model->save();
}
};
self::beforeInsert($beforeUpdateCallback);
self::beforeUpdate($beforeUpdateCallback);
self::afterInsert($afterInsertCallback);
self::afterUpdate($afterUpdateCallback);
self::afterDelete(function ($row) {
$field = $row['model_id'] ? 'model_id' : 'diyform_id';
$model = $row['model_id'] ? Modelx::get($row[$field]) : Diyform::get($row[$field]);
if ($model) {
$sql = Alter::instance()
->setTable($model['table'])
->setName($row['name'])
->getDropSql();
try {
db()->query($sql);
} catch (PDOException $e) {
}
}
});
}
public function getContentListAttr($value, $data)
{
return in_array($data['type'], self::$listField) ? Config::decode($data['content']) : $data['content'];
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function model()
{
return $this->belongsTo('Modelx', 'model_id')->setEagerlyType(0);
}
public function diyform()
{
return $this->belongsTo('Diyform', 'diyform_id')->setEagerlyType(0);
}
}

View File

@ -1,36 +0,0 @@
<?php
namespace app\admin\model;
use think\Config;
use think\Model;
class Modelx extends Model
{
// 表名
protected $name = 'cms_model';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
];
public static function init()
{
self::afterInsert(function ($row) {
$prefix = Config::get('database.prefix');
$sql = "CREATE TABLE `{$prefix}{$row['table']}` (`id` int(10) NOT NULL,`content` longtext NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='{$row['name']}'";
db()->query($sql);
});
}
public function getFieldsAttr($value, $data)
{
return is_array($value) ? $value : ($value ? explode(',', $value) : []);
}
}

View File

@ -1,61 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Page extends Model
{
// 表名
protected $name = 'cms_page';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'flag_text',
'status_text',
'url'
];
protected static function init()
{
self::afterInsert(function ($row) {
$row->save(['weigh' => $row['id']]);
});
}
public function getUrlAttr($value, $data)
{
return addon_url('cms/page/index', [':diyname' => $data['diyname']]);
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getFlagList()
{
return ['hot' => __('Hot'), 'index' => __('Index'), 'recommend' => __('Recommend')];
}
public function getFlagTextAttr($value, $data)
{
$value = $value ? $value : $data['flag'];
$valueArr = explode(',', $value);
$list = $this->getFlagList();
return implode(',', array_intersect_key($list, array_flip($valueArr)));
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Tags extends Model
{
// 表名
protected $name = 'cms_tags';
// 自动写入时间戳字段
protected $autoWriteTimestamp = false;
// 定义时间戳字段名
protected $createTime = false;
protected $updateTime = false;
// 追加属性
protected $append = [
'url'
];
public function getUrlAttr($value, $data)
{
return addon_url('cms/tags/index', [':name' => $data['name']]);
}
}

View File

@ -1,143 +0,0 @@
<?php
namespace app\admin\model;
use think\Model;
class Test extends Model
{
// 表名
protected $name = 'test';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
'week_text',
'flag_text',
'genderdata_text',
'hobbydata_text',
'refreshtime_text',
'status_text',
'state_text'
];
protected static function init()
{
self::afterInsert(function ($row) {
$pk = $row->getPk();
$row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
});
}
public function getWeekList()
{
return ['monday' => __('Week monday'), 'tuesday' => __('Week tuesday'), 'wednesday' => __('Week wednesday')];
}
public function getFlagList()
{
return ['hot' => __('Flag hot'), 'index' => __('Flag index'), 'recommend' => __('Flag recommend')];
}
public function getGenderdataList()
{
return ['male' => __('Genderdata male'), 'female' => __('Genderdata female')];
}
public function getHobbydataList()
{
return ['music' => __('Hobbydata music'), 'reading' => __('Hobbydata reading'), 'swimming' => __('Hobbydata swimming')];
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function getStateList()
{
return ['0' => __('State 0'), '1' => __('State 1'), '2' => __('State 2')];
}
public function getWeekTextAttr($value, $data)
{
$value = $value ? $value : $data['week'];
$list = $this->getWeekList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getFlagTextAttr($value, $data)
{
$value = $value ? $value : $data['flag'];
$valueArr = explode(',', $value);
$list = $this->getFlagList();
return implode(',', array_intersect_key($list, array_flip($valueArr)));
}
public function getGenderdataTextAttr($value, $data)
{
$value = $value ? $value : $data['genderdata'];
$list = $this->getGenderdataList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getHobbydataTextAttr($value, $data)
{
$value = $value ? $value : $data['hobbydata'];
$valueArr = explode(',', $value);
$list = $this->getHobbydataList();
return implode(',', array_intersect_key($list, array_flip($valueArr)));
}
public function getRefreshtimeTextAttr($value, $data)
{
$value = $value ? $value : $data['refreshtime'];
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : $data['status'];
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getStateTextAttr($value, $data)
{
$value = $value ? $value : $data['state'];
$list = $this->getStateList();
return isset($list[$value]) ? $list[$value] : '';
}
protected function setFlagAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
protected function setHobbydataAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
protected function setRefreshtimeAttr($value)
{
return $value && !is_numeric($value) ? strtotime($value) : $value;
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Archives extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Block extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Channel extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Comment extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class CrmTenant extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class CrmTenantTags extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,49 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Fields extends Validate
{
/**
* 验证规则
*/
protected $rule = [
'name|名称' => 'require|unique:fields,model_id^name',
'title|管理员' => 'require',
'model_id|模型ID' => 'require|integer',
'status|状态' => 'require|in:normal,hidden',
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [
'name', 'title', 'model_id', 'status'
],
'edit' => [
'name', 'title', 'model_id', 'status'
],
];
public function __construct(array $rules = array(), $message = array(), $field = array())
{
//如果是编辑模式,则排除下主键
$ids = request()->param("ids");
if ($ids)
{
$this->rule['name|名称'] .= ",{$ids}";
}
parent::__construct($rules, $message, $field);
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Modelx extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Page extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Tags extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,27 +0,0 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Test extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -1,198 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="row">
<div class="col-md-9 col-sm-12">
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<ul class="nav nav-tabs">
<li class="active"><a href="#basic" data-toggle="tab">基础信息</a></li>
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="basic">
<div class="form-group">
<label for="c-channel_id" class="control-label col-xs-12 col-sm-2">{:__('Channel_id')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-channel_id" data-rule="required" class="form-control selectpicker" data-live-search="true" name="row[channel_id]">
{$channelOptions}
</select>
</div>
</div>
<div class="form-group">
<label for="c-channel_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control selectpage" data-source="user/user/index" placeholder="发布会员,可为空" data-field="nickname" name="row[user_id]" />
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-tags" class="control-label col-xs-12 col-sm-2">{:__('Tags')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tags" data-rule="" class="form-control selectpage" placeholder="请手动输入或选择标签" data-source="cms/tags/selectpage" data-primary-key="name" data-multiple="true" name="row[tags]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">{:addon_url('cms/archives/index', [':diyname'=>''])}</button>
</div>
<input type="text" id="c-diyname" data-rule="diyname" name="row[diyname]" class="form-control" placeholder="请输入自定义的名称,为空将使用主键ID" />
</div>
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" name="row[content]" rows="15" ></textarea>
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" cols="60" rows="5" data-rule="" class="form-control" name="row[description]"></textarea>
</div>
</div>
<div id="extend"></div>
</div>
</div>
<div class="form-group normal-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-12">
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<div class="panel-lead"><em>相关信息</em></div>
</div>
<div class="panel-body">
<div class="tab-content">
<div class="tab-pane fade active in">
<div class="form-group">
<label for="c-views" class="control-label col-xs-12 col-sm-3">{:__('Views')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-views" data-rule="required" class="form-control" name="row[views]" placeholder="{:__('Views')}" type="number" value="0">
<span class="input-group-addon"><i class="fa fa-eye text-success"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-comments" class="control-label col-xs-12 col-sm-3">{:__('Comments')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-comments" data-rule="required" class="form-control" name="row[comments]" placeholder="{:__('Comments')}" type="number" value="0">
<span class="input-group-addon"><i class="fa fa-comment text-info"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-likes" class="control-label col-xs-12 col-sm-3">{:__('Likes')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-likes" data-rule="required" class="form-control" name="row[likes]" placeholder="{:__('Likes')}" type="number" value="0">
<span class="input-group-addon"><i class="fa fa-thumbs-up text-danger"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-dislikes" class="control-label col-xs-12 col-sm-3">{:__('Dislikes')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-dislikes" data-rule="required" class="form-control" name="row[dislikes]" placeholder="{:__('Dislikes')}" type="number" value="0">
<span class="input-group-addon"><i class="fa fa-thumbs-down text-gray"></i></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<div class="panel-lead"><em>状态</em></div>
</div>
<div class="panel-body">
<div class="tab-content">
<div class="tab-pane fade active in">
<div class="form-group">
<label for="c-flag" class="control-label col-xs-12 col-sm-3">{:__('Flag')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
{foreach name="flagList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-status" class="form-control selectpicker" name="row[status]">
{foreach name="statusList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Publish')}:</label>
<div class="col-xs-12 col-sm-8">
<div class='input-group date'>
<input type='text' name="row[publishtime]" data-date-format="YYYY-MM-DD 00:00:00" value="{:date('Y-m-d H:i:s')}" class="form-control datetimepicker" />
<span class="input-group-addon">
<span class="fa fa-calendar"></span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>

View File

@ -1,29 +0,0 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="main.model_id">
{foreach name="modelList" item="vo"}
<li class="{:$model['id']==$vo['id']?'active':''}"><a href="cms/archives/content/model_id/{$vo.id}" data-value="{$vo.id}">{$vo.name}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,edit,del')}
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/model/edit')}"
data-operate-del="{:$auth->check('cms/model/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,207 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<input type="hidden" value="{$row.id}" id="archive-id" />
<div class="row">
<div class="col-md-9 col-sm-12">
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<ul class="nav nav-tabs">
<li class="active"><a href="#basic" data-toggle="tab">基础信息</a></li>
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="basic">
<div class="form-group">
<label for="c-channel_id" class="control-label col-xs-12 col-sm-2">{:__('Channel_id')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-channel_id" data-rule="required" class="form-control selectpicker" data-live-search="true" name="row[channel_id]">
{$channelOptions}
</select>
</div>
</div>
<div class="form-group">
<label for="c-channel_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control selectpage" data-source="user/user/index" placeholder="发布会员,可为空" data-field="nickname" name="row[user_id]" value="{$row.user_id}" />
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-tags" class="control-label col-xs-12 col-sm-2">{:__('Tags')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tags" data-rule="" class="form-control selectpage" placeholder="请手动输入或选择标签" data-source="cms/tags/selectpage" data-primary-key="name" data-multiple="true" name="row[tags]" type="text" value="{$row.tags}">
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">{:addon_url('cms/archives/index', [':diyname'=>''])}</button>
</div>
<input type="text" id="c-diyname" data-rule="diyname" name="row[diyname]" class="form-control" placeholder="请输入自定义的名称,为空将使用主键ID" value="{$row.diyname}" />
</div>
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" name="row[content]" rows="15" >{$row.content}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" cols="60" rows="5" data-rule="" class="form-control" name="row[description]">{$row.description}</textarea>
</div>
</div>
<div id="extend"></div>
</div>
</div>
<div class="form-group normal-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-12">
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<div class="panel-lead"><em>相关信息</em></div>
</div>
<div class="panel-body">
<div class="tab-content">
<div class="tab-pane fade active in">
<div class="form-group">
<label for="c-views" class="control-label col-xs-12 col-sm-3">{:__('Views')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-views" data-rule="required" class="form-control" name="row[views]" placeholder="{:__('Views')}" type="number" value="{$row.views}">
<span class="input-group-addon"><i class="fa fa-eye text-success"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-comments" class="control-label col-xs-12 col-sm-3">{:__('Comments')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-comments" data-rule="required" class="form-control" name="row[comments]" placeholder="{:__('Comments')}" type="number" value="{$row.comments}">
<span class="input-group-addon"><i class="fa fa-comment text-info"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-likes" class="control-label col-xs-12 col-sm-3">{:__('Likes')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-likes" data-rule="required" class="form-control" name="row[likes]" placeholder="{:__('Likes')}" type="number" value="{$row.likes}">
<span class="input-group-addon"><i class="fa fa-thumbs-up text-danger"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-dislikes" class="control-label col-xs-12 col-sm-3">{:__('Dislikes')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-dislikes" data-rule="required" class="form-control" name="row[dislikes]" placeholder="{:__('Dislikes')}" type="number" value="{$row.dislikes}">
<span class="input-group-addon"><i class="fa fa-thumbs-down text-gray"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-3">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group margin-bottom-sm">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" placeholder="{:__('Weigh')}" type="number" value="{$row.weigh}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<div class="panel-lead"><em>状态</em></div>
</div>
<div class="panel-body">
<div class="tab-content">
<div class="tab-pane fade active in">
<div class="form-group">
<label for="c-flag" class="control-label col-xs-12 col-sm-3">{:__('Flag')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
{foreach name="flagList" item="vo"}
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-status" class="form-control selectpicker" name="row[status]">
{foreach name="statusList" item="vo"}
<option value="{$key}" {in name="key" value="$row.status"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Publish')}:</label>
<div class="col-xs-12 col-sm-8">
<div class='input-group date datetimepicker'>
<input type='text' name="row[publishtime]" data-date-format="YYYY-MM-DD 00:00:00" value="{$row.publishtime_text}" class="form-control datetimepicker" />
<span class="input-group-addon">
<span class="fa fa-calendar"></span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>

View File

@ -1,102 +0,0 @@
{foreach $fields as $item}
<div class="form-group">
<div class="control-label col-xs-12 col-sm-2">{$item.title}</div>
<div class="col-xs-12 col-sm-8">
{switch $item.type}
{case string}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}" {$item.extend} />
{/case}
{case value="text" break="0"}{/case}
{case editor}
<textarea name="row[{$item.name}]" id="c-{$item.name}" class="form-control {eq name='$item.type' value='editor'}editor{/eq}" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}" {$item.extend}>{$item.value}</textarea>
{/case}
{case array}
{php}$arrList=isset($values[$item['name']])?(array)json_decode($item['value'],true):$item['content_list'];{/php}
<dl class="fieldlist" rel="{$arrList|count}" data-name="row[{$item.name}]">
<dd>
<ins>{:__('Array key')}</ins>
<ins>{:__('Array value')}</ins>
</dd>
{foreach $arrList as $key => $vo}
<dd class="form-inline">
<input type="text" name="row[{$item.name}][field][{$key}]" class="form-control" value="{$key}" size="10" />
<input type="text" name="row[{$item.name}][value][{$key}]" class="form-control" value="{$vo}" size="40" />
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
<span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
</dd>
{/foreach}
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
</dl>
{/case}
{case date}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case time}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case datetime}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case number}
<input type="number" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case checkbox}
{foreach name="item.content_list" item="vo"}
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-rule="{$item.rule}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
{/foreach}
{/case}
{case radio}
{foreach name="item.content_list" item="vo"}
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-rule="{$item.rule}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
{/foreach}
{/case}
{case value="select" break="0"}{/case}
{case value="selects"}
<select name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-rule="{$item.rule}" data-tip="{$item.tip}" {$item.extend} {$item.type=='selects'?'multiple':''}>
{foreach name="item.content_list" item="vo"}
<option value="{$key}" {in name="key" value="$item.value"}selected{/in}>{$vo}</option>
{/foreach}
</select>
{/case}
{case value="image" break="0"}{/case}
{case value="images"}
<div class="input-group">
<input id="c-{$item.name}" class="form-control" name="row[{$item.name}]" type="text" value="{$item.value}" data-rule="{$item.rule}" data-tip="{$item.tip}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-preview-id="p-{$item.name}" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-preview-id="p-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name}"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
{/case}
{case value="file" break="0"}{/case}
{case value="files"}
<div class="input-group">
<input id="c-{$item.name}" class="form-control" name="row[{$item.name}]" type="text" value="{$item.value}" data-rule="{$item.rule}" data-tip="{$item.tip}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name}"></span>
</div>
{/case}
{case switch}
<input id="c-{$item.name}" name="row[{$item.name}]" type="hidden" value="{:$item.value?1:0}">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-{$item.name}" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success {if !$item.value}fa-flip-horizontal text-gray{/if} fa-2x"></i>
</a>
{/case}
{case bool}
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
{/case}
{case custom}
{$item.content}
{/case}
{/switch}
</div>
</div>
{/foreach}

View File

@ -1,93 +0,0 @@
<style>
.form-commonsearch .form-group{
margin-left:0;margin-right:0;padding:0;
}
form.form-commonsearch .control-label {
padding-right:0;
}
.tdtitle {
margin-bottom:5px;
font-weight: 600;
}
</style>
<div class="row">
<div class="col-md-3 hidden-xs hidden-sm" id="channelbar" style="padding-right:0;">
<div class="panel panel-default panel-intro">
<div class="panel-heading">
<div class="panel-lead">
<em>{:__('Channel list')}</em>
</div>
</div>
<div class="panel-body">
<span class="text-muted"><input type="checkbox" name="" id="checkall" /> <label for="checkall"><small>{:__('Check all')}</small></label></span>
<span class="text-muted"><input type="checkbox" name="" id="expandall" checked="" /> <label for="expandall"><small>{:__('Expand all')}</small></label></span>
<div id="channeltree">
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-9" id="archivespanel">
<div class="panel panel-default panel-intro" style="background: #f1f4f6;padding-top: 0;padding-bottom: 0;box-shadow: none;">
{:build_heading()}
<div id="myTabContent" class="tab-content" style="background:#fff;padding:15px;">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,del',['add'=>[url('cms.archives/add'), 'btn btn-success btn-addtabs', 'fa fa-plus', __('Add'), __('Add')]])}
<a class="btn btn-info btn-move dropdown-toggle btn-disabled disabled"><i class="fa fa-arrow-right"></i> {:__('Move')}</a>
<div class="dropdown btn-group {:$auth->check('cms/archives/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=rejected"><i class="fa fa-exclamation-circle"></i> {:__('Set to rejected')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=pulloff"><i class="fa fa-arrow-circle-down"></i> {:__('Set to pulloff')}</a></li>
</ul>
</div>
<a class="btn btn-success btn-recyclebin btn-dialog" href="cms/archives/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
<div class="dropdown btn-group {:$auth->check('cms/archives/content')?'':'hide'}">
<a href="javascript:;" class="btn btn-info dropdown-toggle" title="{:__('Addon list')}" data-toggle="dropdown"><i class="fa fa-file"></i> {:__('Addon list')}</a>
<ul class="dropdown-menu text-left" role="menu">
{volist name="modelList" id="item"}
<li><a class="btn btn-link btn-addtabs" href="{:url('cms.archives/content')}/model_id/{$item.id}" title="{$item.name}"><i class="fa fa-file"></i> {$item.name}</a></li>
{/volist}
</ul>
</div>
<a href="javascript:;" class="btn btn-default btn-channel hidden-xs hidden-sm"><i class="fa fa-bars"></i></a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/archives/edit')}"
data-operate-del="{:$auth->check('cms/archives/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<script id="channeltpl" type="text/html">
<div class="box box-solid bg-red-gradient">
<div class="box-header ui-sortable-handle" style="cursor: move;">
{:__('Warning')}
</div>
<!-- /.box-header -->
<div class="box-body">
{:__('Move tips')}
</div>
<!-- /.box-body -->
<div class="box-footer text-black">
<div class="row">
<div class="col-sm-12">
<select name="channel" class="form-control" id="">
<option value="0">{:__('Please select channel')}</option>
{$channelOptions}
</select>
</div>
</div>
<!-- /.row -->
</div>
</div>
</script>

View File

@ -1,23 +0,0 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled" href="javascript:;" data-url="{:url('cms.archives/restore')}" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled" href="javascript:;" data-url="{:url('cms.archives/destroy')}" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall" href="{:url('cms.archives/restore')}" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall" href="{:url('cms.archives/destroy')}" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,66 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type" data-rule="required" class="form-control selectpage" data-source="cms/block/selectpage_type" placeholder="请手动输入或选择类型" data-primary-key="type" data-field="type" name="row[type]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text" value="">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-url" class="control-label col-xs-12 col-sm-2">{:__('Url')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-url" data-rule="" class="form-control" name="row[url]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="" class="form-control editor" rows="15" name="row[content]" cols="50"></textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,66 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type" data-rule="required" class="form-control selectpage" data-source="cms/block/selectpage_type" placeholder="请手动输入或选择类型" data-primary-key="type" data-field="type" name="row[type]" type="text" value="{$row.type}">
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-url" class="control-label col-xs-12 col-sm-2">{:__('Url')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-url" data-rule="" class="form-control" name="row[url]" type="text" value="{$row.url}">
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="" class="form-control editor" rows="15" name="row[content]" cols="50">{$row.content}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,28 +0,0 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
<div class="dropdown btn-group {:$auth->check('cms/block/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/block/edit')}"
data-operate-del="{:$auth->check('cms/block/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,130 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="typeList" item="vo"}
<label for="row[type]-{$key}"><input id="row[type]-{$key}" name="row[type]" type="radio" value="{$key}" {in name="key" value="channel"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
<div class="margin" style="margin-left:0;">
<div class="alert alert-dismissable bg-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>栏目</strong>: 栏目类型下不可以发布文章,但可以添加子栏目、列表、链接<br>
<strong>列表</strong>: 列表类型下可以发布文章,但不能添加子栏目<br>
<strong>链接</strong>: 链接类型下不可以发布文章和子级栏目<br>
</div>
</div>
</div>
</div>
<div class="form-group tf tf-list tf-channel">
<label for="c-model_id" class="control-label col-xs-12 col-sm-2">{:__('Model_id')}:</label>
<div class="col-xs-12 col-sm-8">
<select name="row[model_id]" id="c-model_id" class="form-control">
{foreach name="modelList" item="vo"}
<option value="{$vo.id}" data-channeltpl="{$vo.channeltpl}" data-listtpl="{$vo.listtpl}" data-showtpl="{$vo.showtpl}">{$vo.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="parent_id" class="control-label col-xs-12 col-sm-2">{:__('上级栏目')}:</label>
<div class="col-xs-12 col-sm-8">
<select name="row[parent_id]" data-rule="required" id="parent_id" class="form-control">
<option value="0">{:__('None')}</option>
{foreach name="channelList" item="vo"}
<option value="{$vo.id}" {if $vo.type=='link'}disabled{else /}data-model="{$vo.model_id}"{/if}>{$vo.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-name" data-rule="required; channelname" class="form-control" name="row[name]" data-toggle="tooltip" title="如果需要多个一次录入多个分类时请换行输入,录入多个时将忽略自定义名称,批量录入格式:分类名称|自定义名称"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group tf tf-channel tf tf-list">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text">
</div>
</div>
<div class="form-group tf tf-channel tf tf-list">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" data-rule="" class="form-control" name="row[description]"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-diyname" data-rule="required(single); diyname" class="form-control" name="row[diyname]" type="text">
</div>
</div>
<div class="form-group tf tf-link">
<label for="c-outlink" class="control-label col-xs-12 col-sm-2">{:__('Outlink')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-outlink" data-rule="required" class="form-control" name="row[outlink]" type="text">
</div>
</div>
<div class="form-group tf tf-channel">
<label for="c-channeltpl" class="control-label col-xs-12 col-sm-2">{:__('Channeltpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-channeltpl" data-rule="required" class="form-control selectpage" name="row[channeltpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-listtpl" class="control-label col-xs-12 col-sm-2">{:__('Listtpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-listtpl" data-rule="required" class="form-control selectpage" name="row[listtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-showtpl" data-rule="required" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-pagesize" class="control-label col-xs-12 col-sm-2">{:__('Pagesize')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-pagesize" data-rule="required" class="form-control" name="row[pagesize]" type="number" value="10">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,136 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<input type="hidden" value="{$row.id}" id="channel-id" />
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="typeList" item="vo"}
<label for="row[type]-{$key}"><input id="row[type]-{$key}" name="row[type]" disabled type="radio" value="{$key}" {in name="key" value="$row.type"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
<div class="margin" style="margin-left:0;">
<div class="alert alert-dismissable bg-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>栏目</strong>: 栏目类型下不可以发布文章,但可以添加子栏目、列表、链接<br>
<strong>列表</strong>: 列表类型下可以发布文章,但不能添加子栏目<br>
<strong>链接</strong>: 链接类型下不可以发布文章和子级栏目<br>
</div>
</div>
</div>
</div>
<div class="form-group tf tf-list tf-channel">
<label for="c-model_id" class="control-label col-xs-12 col-sm-2">{:__('Model_id')}:</label>
<div class="col-xs-12 col-sm-8">
<select name="row[model_id]" id="c-model_id" class="form-control " disabled>
{foreach name="modelList" item="vo"}
<option {in name="vo.id" value="$row.model_id"}selected="selected"{/in} value="{$vo.id}" data-channeltpl="{$vo.channeltpl}" data-listtpl="{$vo.listtpl}" data-showtpl="{$vo.showtpl}">{$vo.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="parent_id" class="control-label col-xs-12 col-sm-2">{:__('上级栏目')}:</label>
<div class="col-xs-12 col-sm-8">
<select name="row[parent_id]" data-rule="required" id="parent_id" class="form-control">
<option value="0">{:__('None')}</option>
{foreach name="channelList" item="vo"}
<option value="{$vo.id}" {if $vo.type!=='link'}data-model="{$vo.model_id}"{/if} {if $vo.type=='link' || $vo.id==$row.id || $vo.model_id!=$row.model_id}disabled{/if} {if $vo.id==$row.parent_id}selected{/if}>{$vo.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}" />
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group tf tf-channel tf tf-list">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
</div>
</div>
<div class="form-group tf tf-channel tf tf-list">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" data-rule="" class="form-control" name="row[description]">{$row.description}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-diyname" data-rule="required; diyname" class="form-control" name="row[diyname]" type="text" value="{$row.diyname}">
</div>
</div>
<div class="form-group tf tf-link">
<label for="c-outlink" class="control-label col-xs-12 col-sm-2">{:__('Outlink')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-outlink" data-rule="required" class="form-control" name="row[outlink]" type="text" value="{$row.outlink}">
</div>
</div>
<div class="form-group tf tf-channel">
<label for="c-channeltpl" class="control-label col-xs-12 col-sm-2">{:__('Channeltpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-channeltpl" data-rule="required" class="form-control selectpage" name="row[channeltpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.channeltpl}">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-listtpl" class="control-label col-xs-12 col-sm-2">{:__('Listtpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-listtpl" data-rule="required" class="form-control selectpage" name="row[listtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.listtpl}">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-showtpl" data-rule="required" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.showtpl}">
</div>
</div>
<div class="form-group tf tf-list">
<label for="c-pagesize" class="control-label col-xs-12 col-sm-2">{:__('Pagesize')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-pagesize" data-rule="required" class="form-control" name="row[pagesize]" type="number" value="{$row.pagesize}">
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,37 +0,0 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="model_id">
<li class="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="modelList" item="vo"}
<li><a href="#t-{$vo.id}" data-value="{$vo.id}" data-toggle="tab">{$vo.name}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
<div class="dropdown btn-group {:$auth->check('cms/channel/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/channel/edit')}"
data-operate-del="{:$auth->check('cms/channel/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,82 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value="archives"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-aid" class="control-label col-xs-12 col-sm-2">{:__('Aid')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-aid" data-rule="required" class="form-control" name="row[aid]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pid" data-rule="required" class="form-control" name="row[pid]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" class="form-control" name="row[user_id]" type="text" value="0">
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" rows="5" name="row[content]" cols="50"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-comments" class="control-label col-xs-12 col-sm-2">{:__('Comments')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-comments" data-rule="required" class="form-control" name="row[comments]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label for="c-ip" class="control-label col-xs-12 col-sm-2">{:__('Ip')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ip" data-rule="" class="form-control" name="row[ip]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-useragent" class="control-label col-xs-12 col-sm-2">{:__('Useragent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-useragent" data-rule="" class="form-control" name="row[useragent]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-subscribe" class="control-label col-xs-12 col-sm-2">{:__('Subscribe')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[subscribe]', [1=>'是', 0=>'否'])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,82 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-aid" class="control-label col-xs-12 col-sm-2">{:__('Aid')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-aid" data-rule="required" class="form-control" name="row[aid]" type="number" value="{$row.aid}">
</div>
</div>
<div class="form-group">
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pid" data-rule="required" class="form-control" name="row[pid]" type="number" value="{$row.pid}">
</div>
</div>
<div class="form-group">
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" class="form-control" name="row[user_id]" type="text" value="{$row.user_id}">
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-comments" class="control-label col-xs-12 col-sm-2">{:__('Comments')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-comments" data-rule="required" class="form-control" name="row[comments]" type="number" value="{$row.comments}">
</div>
</div>
<div class="form-group">
<label for="c-ip" class="control-label col-xs-12 col-sm-2">{:__('Ip')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ip" data-rule="required" class="form-control" name="row[ip]" type="text" value="{$row.ip}">
</div>
</div>
<div class="form-group">
<label for="c-useragent" class="control-label col-xs-12 col-sm-2">{:__('Useragent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-useragent" data-rule="required" class="form-control" name="row[useragent]" type="text" value="{$row.useragent}">
</div>
</div>
<div class="form-group">
<label for="c-subscribe" class="control-label col-xs-12 col-sm-2">{:__('Subscribe')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[subscribe]', [1=>'是', 0=>'否'], $row['subscribe'])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,32 +0,0 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('cms/comment/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('cms/comment/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('cms/comment/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<div class="dropdown btn-group {:$auth->check('cms/comment/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/comment/edit')}"
data-operate-del="{:$auth->check('cms/comment/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,17 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-source="user/user/index" data-field='nickname' class="form-control selectpage" name="row[user_id]" type="text" value="">
</div>
</div>
{include file="cms/diydata/fields"}
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,17 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-source="user/user/index" data-field='nickname' class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id}">
</div>
</div>
{include file="cms/diydata/fields"}
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,102 +0,0 @@
{foreach $fields as $item}
<div class="form-group">
<div class="control-label col-xs-12 col-sm-2">{$item.title}</div>
<div class="col-xs-12 col-sm-8">
{switch $item.type}
{case string}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}" {$item.extend} />
{/case}
{case value="text" break="0"}{/case}
{case editor}
<textarea name="row[{$item.name}]" id="c-{$item.name}" class="form-control {eq name='$item.type' value='editor'}editor{/eq}" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}" {$item.extend}>{$item.value}</textarea>
{/case}
{case array}
{php}$arrList=isset($values[$item['name']])?(array)json_decode($item['value'],true):$item['content_list'];{/php}
<dl class="fieldlist" rel="{$arrList|count}" data-name="row[{$item.name}]">
<dd>
<ins>{:__('Array key')}</ins>
<ins>{:__('Array value')}</ins>
</dd>
{foreach $arrList as $key => $vo}
<dd class="form-inline">
<input type="text" name="row[{$item.name}][field][{$key}]" class="form-control" value="{$key}" size="10" />
<input type="text" name="row[{$item.name}][value][{$key}]" class="form-control" value="{$vo}" size="40" />
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
<span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
</dd>
{/foreach}
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
</dl>
{/case}
{case date}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case time}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case datetime}
<input type="text" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case number}
<input type="number" name="row[{$item.name}]" id="c-{$item.name}" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
{/case}
{case checkbox}
{foreach name="item.content_list" item="vo"}
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-rule="{$item.rule}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
{/foreach}
{/case}
{case radio}
{foreach name="item.content_list" item="vo"}
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-rule="{$item.rule}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
{/foreach}
{/case}
{case value="select" break="0"}{/case}
{case value="selects"}
<select name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-rule="{$item.rule}" data-tip="{$item.tip}" {$item.extend} {$item.type=='selects'?'multiple':''}>
{foreach name="item.content_list" item="vo"}
<option value="{$key}" {in name="key" value="$item.value"}selected{/in}>{$vo}</option>
{/foreach}
</select>
{/case}
{case value="image" break="0"}{/case}
{case value="images"}
<div class="input-group">
<input id="c-{$item.name}" class="form-control" name="row[{$item.name}]" type="text" value="{$item.value}" data-rule="{$item.rule}" data-tip="{$item.tip}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-preview-id="p-{$item.name}" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-preview-id="p-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name}"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
{/case}
{case value="file" break="0"}{/case}
{case value="files"}
<div class="input-group">
<input id="c-{$item.name}" class="form-control" name="row[{$item.name}]" type="text" value="{$item.value}" data-rule="{$item.rule}" data-tip="{$item.tip}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}" {if $item.maximum}data-maxcount="{$item.maximum}"{/if}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name}"></span>
</div>
{/case}
{case switch}
<input id="c-{$item.name}" name="row[{$item.name}]" type="hidden" value="{:$item.value?1:0}">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-{$item.name}" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success {if !$item.value}fa-flip-horizontal text-gray{/if} fa-2x"></i>
</a>
{/case}
{case bool}
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
{/case}
{case custom}
{$item.content}
{/case}
{/switch}
</div>
</div>
{/foreach}

View File

@ -1,29 +0,0 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="diyform_id">
{foreach name="diyformList" item="vo"}
<li class="{:$diyform['id']==$vo['id']?'active':''}"><a href="{:url('cms.diydata/index')}/diyform_id/{$vo.id}" data-value="{$vo.id}">{$vo.name}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/block/edit')}"
data-operate-del="{:$auth->check('cms/block/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,79 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-table" class="control-label col-xs-12 col-sm-2">{:__('Table')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-table" data-rule="required" class="form-control" name="row[table]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-diyname" data-rule="" class="form-control" name="row[diyname]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" cols="60" rows="5" data-rule="" class="form-control" name="row[description]"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-successtips" class="control-label col-xs-12 col-sm-2">{:__('Successtips')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-successtips" cols="60" rows="5" data-rule="" class="form-control" name="row[successtips]"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-formtpl" class="control-label col-xs-12 col-sm-2">{:__('Formtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-formtpl" data-rule="required" class="form-control selectpage" name="row[formtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Needlogin')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-needlogin" name="row[needlogin]" type="hidden" value="0">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-needlogin" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal" }checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,79 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
</div>
</div>
<div class="form-group">
<label for="c-table" class="control-label col-xs-12 col-sm-2">{:__('Table')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-table" data-rule="required" class="form-control" name="row[table]" readonly="" type="text" value="{$row.table}">
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-diyname" data-rule="" class="form-control" name="row[diyname]" type="text" value="{$row.diyname}">
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" cols="60" rows="5" data-rule="" class="form-control" name="row[description]">{$row.description}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-successtips" class="control-label col-xs-12 col-sm-2">{:__('Successtips')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-successtips" cols="60" rows="5" data-rule="" class="form-control" name="row[successtips]">{$row.successtips}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-formtpl" class="control-label col-xs-12 col-sm-2">{:__('Formtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-formtpl" data-rule="required" class="form-control selectpage" name="row[formtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.formtpl}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Needlogin')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-iscontribute" name="row[needlogin]" type="hidden" value="{$row.needlogin}">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-needlogin" data-yes="1" data-no="0">
<i class="fa fa-toggle-on text-success {eq name=" $row.needlogin" value="0"}fa-flip-horizontal text-gray{/eq} fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status" }checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,24 +0,0 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-buttons-index="{:$auth->check('cms/archives/index')}"
data-buttons-content="{:$auth->check('cms/archives/content')}"
data-buttons-fields="{:$auth->check('cms/fields/index')}"
data-operate-edit="{:$auth->check('cms/model/edit')}"
data-operate-del="{:$auth->check('cms/model/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,66 +0,0 @@
<script>
var typelist = {$typeList|json_encode};
var contentlist = {$row.content??'[]'};
</script>
<style>
.iteminner {margin-bottom:15px;border-bottom:1px solid #ddd;background:#fff;}
</style>
<script id="itemtpl" type="text/html">
<div class="col-xs-6 iteminner">
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 类型</div>
<div class="col-xs-8">
<select name="row[content][<%=i%>][type]" <%=readonly?'readonly':''%> class="form-control">
<%for(var m in typelist){%>
<option value="<%=m%>" <%=m==type?'selected':''%>><%=typelist[m]%></option>
<%}%>
</select>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 变量名</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][name]" <%=readonly?'readonly':''%> class="form-control" value="<%=name%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 标题</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][title]" <%=readonly?'readonly':''%> class="form-control" value="<%=title%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">默认值</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][value]" class="form-control" value="<%=value%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">校验规则</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][rule]" <%=readonly?'readonly':''%> class="form-control" value="<%=rule%>" />
</div>
</div>
<div class="form-group multiple">
<div class="control-label col-xs-4">数据列表</div>
<div class="col-xs-8">
<textarea name="row[content][<%=i%>][content]" <%=['select','selects','checkbox','radio'].indexOf(type)>-1?'':'readonly'%> cols="30" rows="3" class="form-control" data-rule="required"><%=content%></textarea>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">扩展属性</div>
<div class="col-xs-8">
<textarea name="row[content][<%=i%>][extend]" id="extend" cols="30" rows="3" class="form-control"><%=extend%></textarea>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"></div>
<div class="col-xs-8">
<a href="javascript:;" class="btn btn-primary btn-dragsort btn-xs"><i class="fa fa-arrows"></i></a>
<%if(['mobile', 'name', 'gender', 'ethnic'].indexOf(name)==-1){%>
<a href="javascript:;" class="btn btn-danger btn-delone btn-xs"><i class="fa fa-trash"></i></a>
<%}%>
</div>
</div>
</div>
</script>

View File

@ -1,131 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<input type="hidden" name="row[model_id]" value="{$model_id}"/>
<input type="hidden" name="row[diyform_id]" value="{$diyform_id}"/>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-4">
<select name="row[type]" id="c-type" class="form-control selectpicker">
{volist name="typeList" id="type"}
<option value="{$key}">{$type}</option>
{/volist}
</select>
</div>
</div>
<div class="form-group hidden tf tf-number">
<label for="c-decimals" class="control-label col-xs-12 col-sm-2">{:__('Decimals')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-decimals" class="form-control" name="row[decimals]" type="number" value="0">
</div>
</div>
<div class="form-group hidden tf tf-checkbox">
<label for="c-minimum" class="control-label col-xs-12 col-sm-2">{:__('Minimum')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-minimum" class="form-control" name="row[minimum]" type="number">
</div>
</div>
<div class="form-group hidden tf tf-selects tf-images tf-files tf-checkbox">
<label for="c-maximum" class="control-label col-xs-12 col-sm-2">{:__('Maximum')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-maximum" class="form-control" name="row[maximum]" type="number">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text">
</div>
</div>
<div class="form-group hidden tf tf-select tf-selects tf-checkbox tf-radio tf-array tf-custom">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control" name="row[content]">value1|title1
value2|title2</textarea>
</div>
</div>
<div class="form-group">
<label for="c-defaultvalue" class="control-label col-xs-12 col-sm-2">{:__('Defaultvalue')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-defaultvalue" class="form-control" name="row[defaultvalue]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-rule" class="control-label col-xs-12 col-sm-2">{:__('Rule')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-rule" class="form-control selectpage" data-source="cms/fields/rulelist" data-multiple="true" name="row[rule]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-msg" class="control-label col-xs-12 col-sm-2">{:__('Validate Msg')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-msg" class="form-control" name="row[msg]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-ok" class="control-label col-xs-12 col-sm-2">{:__('Validate Ok')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ok" class="form-control" name="row[ok]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-tip" class="control-label col-xs-12 col-sm-2">{:__('Validate Tip')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tip" class="form-control" name="row[tip]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-length" class="control-label col-xs-12 col-sm-2">{:__('Length')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-length" data-rule="required" class="form-control" name="row[length]" type="number" value="255">
</div>
</div>
<div class="form-group hidden tf tf-select tf-selects tf-checkbox tf-radio tf-array">
<label class="control-label col-xs-12 col-sm-2">{:__('Isfilter')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-isfilter" name="row[isfilter]" type="hidden" value="0">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-isfilter" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Iscontribute')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-iscontribute" name="row[iscontribute]" type="hidden" value="0">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-iscontribute" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label for="c-extend" class="control-label col-xs-12 col-sm-2">{:__('Extend')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-extend" class="form-control" name="row[extend]"></textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal" }checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,132 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<input type="hidden" name="row[model_id]" value="{$row.model_id}"/>
<input type="hidden" name="row[diyform_id]" value="{$row.diyform_id}"/>
<input type="hidden" name="row[oldname]" value="{$row.name}"/>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
</div>
</div>
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-4">
<select name="row[type]" id="c-type" class="form-control selectpicker">
{volist name="typeList" id="type"}
<option value="{$key}" {if $row.type== $key}selected{
/if}>{$type}</option>
{/volist}
</select>
</div>
</div>
<div class="form-group hidden tf tf-number">
<label for="c-decimals" class="control-label col-xs-12 col-sm-2">{:__('Decimals')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-decimals" class="form-control" name="row[decimals]" type="number" value="{$row.decimals}">
</div>
</div>
<div class="form-group hidden tf tf-checkbox">
<label for="c-minimum" class="control-label col-xs-12 col-sm-2">{:__('Minimum')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-minimum" class="form-control" name="row[minimum]" type="number" value="{$row.minimum}">
</div>
</div>
<div class="form-group hidden tf tf-selects tf-images tf-files tf-checkbox">
<label for="c-maximum" class="control-label col-xs-12 col-sm-2">{:__('Maximum')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-maximum" class="form-control" name="row[maximum]" type="number" value="{$row.maximum}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
</div>
</div>
<div class="form-group hidden tf tf-select tf-selects tf-checkbox tf-radio">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control" name="row[content]">{$row.content}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-defaultvalue" class="control-label col-xs-12 col-sm-2">{:__('Defaultvalue')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-defaultvalue" class="form-control" name="row[defaultvalue]" type="text" value="{$row.defaultvalue}">
</div>
</div>
<div class="form-group">
<label for="c-rule" class="control-label col-xs-12 col-sm-2">{:__('Rule')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-rule" class="form-control selectpage" data-source="cms/fields/rulelist" data-multiple="true" name="row[rule]" type="text" value="{$row.rule}">
</div>
</div>
<div class="form-group">
<label for="c-msg" class="control-label col-xs-12 col-sm-2">{:__('Validate Msg')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-msg" class="form-control" name="row[msg]" type="text" value="{$row.msg}">
</div>
</div>
<div class="form-group">
<label for="c-ok" class="control-label col-xs-12 col-sm-2">{:__('Validate Ok')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ok" class="form-control" name="row[ok]" type="text" value="{$row.ok}">
</div>
</div>
<div class="form-group">
<label for="c-tip" class="control-label col-xs-12 col-sm-2">{:__('Validate Tip')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tip" class="form-control" name="row[tip]" type="text" value="{$row.tip}">
</div>
</div>
<div class="form-group">
<label for="c-length" class="control-label col-xs-12 col-sm-2">{:__('Length')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-length" data-rule="required" class="form-control" name="row[length]" type="number" value="{$row.length}">
</div>
</div>
<div class="form-group hidden tf tf-select tf-selects tf-checkbox tf-radio tf-array">
<label class="control-label col-xs-12 col-sm-2">{:__('Isfilter')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-isfilter" name="row[isfilter]" type="hidden" value="{$row.isfilter}">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-isfilter" data-yes="1" data-no="0">
<i class="fa fa-toggle-on text-success {eq name=" $row.isfilter" value="0"}fa-flip-horizontal text-gray{/eq} fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Iscontribute')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-iscontribute" name="row[iscontribute]" type="hidden" value="{$row.iscontribute}">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-iscontribute" data-yes="1" data-no="0">
<i class="fa fa-toggle-on text-success {eq name=" $row.iscontribute" value="0"}fa-flip-horizontal text-gray{/eq} fa-2x"></i>
</a>
</div>
</div>
<div class="form-group">
<label for="c-extend" class="control-label col-xs-12 col-sm-2">{:__('Extend')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-extend" class="form-control" name="row[extend]">{$row.extend}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status" }checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,36 +0,0 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="main.model_id">
{foreach name="modelList" item="vo"}
<li class="{:$model['id']==$vo['id']?'active':''}"><a href="{:url('cms.fields/index')}/{:$model_id?'model_id':'diyform_id'}/{$vo.id}" data-value="{$vo.id}">{$vo.name}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar()}
<div class="dropdown btn-group {:$auth->check('cms/fields/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('cms/fields/edit')}"
data-operate-del="{:$auth->check('cms/fields/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,40 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-table" class="control-label col-xs-12 col-sm-2">{:__('Table')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-table" data-rule="required" class="form-control" name="row[table]" placeholder="建议以 cms_addonxxx 格式命名" type="text">
</div>
</div>
<div class="form-group">
<label for="c-channeltpl" class="control-label col-xs-12 col-sm-2">{:__('Channeltpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-channeltpl" data-rule="" class="form-control selectpage" name="row[channeltpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-listtpl" class="control-label col-xs-12 col-sm-2">{:__('Listtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-listtpl" data-rule="required" class="form-control selectpage" name="row[listtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-showtpl" data-rule="required" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,40 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
</div>
</div>
<div class="form-group">
<label for="c-table" class="control-label col-xs-12 col-sm-2">{:__('Table')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-table" data-rule="required" class="form-control" name="row[table]" readonly="" type="text" value="{$row.table}">
</div>
</div>
<div class="form-group">
<label for="c-channeltpl" class="control-label col-xs-12 col-sm-2">{:__('Channeltpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-channeltpl" data-rule="" class="form-control selectpage" name="row[channeltpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.channeltpl}">
</div>
</div>
<div class="form-group">
<label for="c-listtpl" class="control-label col-xs-12 col-sm-2">{:__('Listtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-listtpl" data-rule="" class="form-control selectpage" name="row[listtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.listtpl}">
</div>
</div>
<div class="form-group">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-showtpl" data-rule="" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.showtpl}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,24 +0,0 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-buttons-index="{:$auth->check('cms/archives/index')}"
data-buttons-content="{:$auth->check('cms/archives/content')}"
data-buttons-fields="{:$auth->check('cms/fields/index')}"
data-operate-edit="{:$auth->check('cms/model/edit')}"
data-operate-del="{:$auth->check('cms/model/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,66 +0,0 @@
<script>
var typelist = {$typeList|json_encode};
var contentlist = {$row.content??'[]'};
</script>
<style>
.iteminner {margin-bottom:15px;border-bottom:1px solid #ddd;background:#fff;}
</style>
<script id="itemtpl" type="text/html">
<div class="col-xs-6 iteminner">
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 类型</div>
<div class="col-xs-8">
<select name="row[content][<%=i%>][type]" <%=readonly?'readonly':''%> class="form-control">
<%for(var m in typelist){%>
<option value="<%=m%>" <%=m==type?'selected':''%>><%=typelist[m]%></option>
<%}%>
</select>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 变量名</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][name]" <%=readonly?'readonly':''%> class="form-control" value="<%=name%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"><span class="text-danger">*</span> 标题</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][title]" <%=readonly?'readonly':''%> class="form-control" value="<%=title%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">默认值</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][value]" class="form-control" value="<%=value%>" />
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">校验规则</div>
<div class="col-xs-8">
<input type="text" name="row[content][<%=i%>][rule]" <%=readonly?'readonly':''%> class="form-control" value="<%=rule%>" />
</div>
</div>
<div class="form-group multiple">
<div class="control-label col-xs-4">数据列表</div>
<div class="col-xs-8">
<textarea name="row[content][<%=i%>][content]" <%=['select','selects','checkbox','radio'].indexOf(type)>-1?'':'readonly'%> cols="30" rows="3" class="form-control" data-rule="required"><%=content%></textarea>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4">扩展属性</div>
<div class="col-xs-8">
<textarea name="row[content][<%=i%>][extend]" id="extend" cols="30" rows="3" class="form-control"><%=extend%></textarea>
</div>
</div>
<div class="form-group">
<div class="control-label col-xs-4"></div>
<div class="col-xs-8">
<a href="javascript:;" class="btn btn-primary btn-dragsort btn-xs"><i class="fa fa-arrows"></i></a>
<%if(['mobile', 'name', 'gender', 'ethnic'].indexOf(name)==-1){%>
<a href="javascript:;" class="btn btn-danger btn-delone btn-xs"><i class="fa fa-trash"></i></a>
<%}%>
</div>
</div>
</div>
</script>

View File

@ -1,96 +0,0 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type" data-rule="required" class="form-control selectpage" data-source="cms/page/selectpage_type" placeholder="类型为自定义,可任意输入" data-primary-key="type" data-field="type" name="row[type]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" data-rule="" class="form-control" name="row[description]"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-flag" data-rule="" class="form-control selectpicker" multiple="" name="row[flag][]">
{foreach name="flagList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text" value="">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="" class="form-control editor" rows="5" name="row[content]" cols="50"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-diyname" data-rule="required" class="form-control" name="row[diyname]" type="text">
</div>
</div>
<div class="form-group">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-showtpl" data-rule="required" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text">
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -1,107 +0,0 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type" data-rule="required" class="form-control selectpage" data-source="cms/page/selectpage_type" data-primary-key="type" data-field="type" name="row[type]" type="text" value="{$row.type}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
</div>
</div>
<div class="form-group">
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-keywords" data-rule="" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
</div>
</div>
<div class="form-group">
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-description" data-rule="" class="form-control" name="row[description]">{$row.description}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-flag" data-rule="" class="form-control selectpicker" multiple="" name="row[flag][]">
{foreach name="flagList" item="vo"}
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-image" data-rule="" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
<div class="form-group">
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-diyname" class="control-label col-xs-12 col-sm-2">{:__('Diyname')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-diyname" data-rule="required" class="form-control" name="row[diyname]" type="text" value="{$row.diyname}">
</div>
</div>
<div class="form-group">
<label for="c-showtpl" class="control-label col-xs-12 col-sm-2">{:__('Showtpl')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-showtpl" data-rule="required" class="form-control selectpage" name="row[showtpl]" data-source="cms/ajax/get_template_list" data-primary-key="name" data-field="name" type="text" value="{$row.showtpl}">
</div>
</div>
<div class="form-group">
<label for="c-views" class="control-label col-xs-12 col-sm-2">{:__('Views')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-views" data-rule="required" class="form-control" name="row[views]" type="number" value="{$row.views}">
</div>
</div>
<div class="form-group">
<label for="c-comments" class="control-label col-xs-12 col-sm-2">{:__('Comments')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-comments" data-rule="required" class="form-control" name="row[comments]" type="number" value="{$row.comments}">
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-4">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

Some files were not shown because too many files have changed in this diff Show More