Initial project files: BESCMS full source

This commit is contained in:
bes
2026-08-13 23:37:46 +08:00
parent fa6cddb540
commit 2e26f85723
2166 changed files with 396625 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
{if $is_ajax_edit}
{template "header.html"}
<script type="text/javascript">
$(function() { //防止回车提交表单
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if (ev.keyCode==13) {
return false;
}
}
});
</script>
<style>
.mt-checkbox-single {
margin-right: 10px;
}
</style>
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{/if}
<div class="margin-bottom-5">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('访问')}
<input type="checkbox" class="checkboxes" {if $auth['category'][$mid]['show'] || !$auth['category'][$mid]} checked {/if} name="category[{$mid}][show]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('发布')}
<input type="checkbox" class="checkboxes" {if $auth['category'][$mid]['add']} checked {/if} name="category[{$mid}][add]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('修改')}
<input type="checkbox" class="checkboxes" {if $auth['category'][$mid]['edit']} checked {/if} name="category[{$mid}][edit]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('删除')}
<input type="checkbox" class="checkboxes" {if $auth['category'][$mid]['del']} checked {/if} name="category[{$mid}][del]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('验证码')}
<input type="checkbox" class="checkboxes" {if $auth['category'][$mid]['code']} checked {/if} name="category[{$mid}][code]" value="1" />
<span></span>
</label>
</div>
<div class="margin-bottom-15">
<label>
<select name="category[{$mid}][verify]" class="form-control">
<option value="0"> {dr_lang('不审核')} </option>
{loop $verify $v}
<option value="{$v.id}" {if $auth['category'][$mid]['verify'] == $v.id} selected{/if}> {dr_lang($v.name)} </option>
{/loop}
</select>
</label>
{if dr_is_app('explog')}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="category[{$mid}][exp]" value="{htmlspecialchars((string)$auth['category'][$mid]['exp'])}" class="form-control" placeholder="">
<span class="input-group-addon">+{SITE_EXPERIENCE}</span>
</div>
</div>
{/if}
{if dr_is_app('scorelog')}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="category[{$mid}][score]" value="{htmlspecialchars((string)$auth['category'][$mid]['score'])}" class="form-control" placeholder="">
<span class="input-group-addon">±{SITE_SCORE}</span>
</div>
</div>
{/if}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="category[{$mid}][money]" value="{htmlspecialchars((string)$auth['category'][$mid]['money'])}" class="form-control" placeholder="">
<span class="input-group-addon">±{dr_lang('金额')}</span>
</div>
</div>
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="category[{$mid}][day_post]" value="{htmlspecialchars((string)$auth['category'][$mid]['day_post'])}" class="form-control" placeholder="">
<span class="input-group-addon">{dr_lang('日投稿')}</span>
</div>
</div>
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="category[{$mid}][total_post]" value="{htmlspecialchars((string)$auth['category'][$mid]['total_post'])}" class="form-control" placeholder="">
<span class="input-group-addon">{dr_lang('投稿总数')}</span>
</div>
</div>
</div>
{loop $diy.category $d}
<div app="{$d.app}" class="margin-bottom-15">
{php $dfile=$d.file;}
{load "$dfile"}
</div>
{/loop}
<input type="hidden" name="category[{$mid}][test]" value="1">
{if $is_ajax_edit}
</form>
{/if}
@@ -0,0 +1,29 @@
{template "header.html"}
<script type="text/javascript">
$(function() { //防止回车提交表单
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if (ev.keyCode==13) {
return false;
}
}
});
</script>
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="form-body">
<div class="form-group">
<div class="col-xs-12">
{$select}
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
{dr_lang('可以将本栏目的权限规则复制到其他栏目中去')}
</div>
</div>
</div>
</form>
{template "footer.html"}
+29
View File
@@ -0,0 +1,29 @@
{template "header.html"}
<script type="text/javascript">
$(function() { //防止回车提交表单
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if (ev.keyCode==13) {
return false;
}
}
});
</script>
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="form-body">
<div class="form-group">
<div class="col-xs-12">
{$select}
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
{dr_lang('可以将本组的权限规则复制到其他组中去')}
</div>
</div>
</div>
</form>
{template "footer.html"}
+145
View File
@@ -0,0 +1,145 @@
{template "header.html"}
<form class="form-horizontal" method="post" name="myform" id="myform">
{dr_form_hidden(['page' => $page])}
<div class="portlet bordered light">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject bold uppercase"><i class="fa fa-table"></i> {dr_lang('内容权限')}</span>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模式选择')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input onclick="dr_auth_mode(0)" type="radio" name="auth_type" value="0" {if !$auth_type}checked=""{/if}> {dr_lang('按全局设置')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input onclick="dr_auth_mode(1)" type="radio" name="auth_type" value="1" {if $auth_type == 1}checked=""{/if}> {dr_lang('按用户组设置')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input onclick="dr_auth_mode(2)" type="radio" name="auth_type" value="2" {if $auth_type == 2}checked=""{/if}> {dr_lang('按用户组等级设置')} <span></span></label>
</div>
<span class="help-block">
{if !$auth_type}{dr_lang('全部用户共用同一套权限配置')}
{else if $auth_type == 1}{dr_lang('按用户组分别配置,可横向对比填写')}
{else}{dr_lang('按用户组等级分别配置,表头会标明所属用户组')}
{/if}
</span>
</div>
</div>
<div class="alert alert-info" style="margin:0 0 20px;">
<i class="fa fa-info-circle"></i>
{dr_lang('按模块分别设置访问与搜索权限;栏目发布、审核、投稿等请点击「设置」弹窗配置。用户侧权限请到用户系统配置。')}
</div>
</div>
</div>
</div>
<div class="portlet bordered light myfbody">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
{loop $tabs $tid $tab}
<li class="{if $page==$tid}active{/if}">
<a href="#tab_{$tid}" data-toggle="tab" onclick="$('#dr_page').val('{$tid}')">
<i class="{dr_icon($tab.icon)}"></i> {$tab.name}{if $tab.dirname} <span class="fc-auth-dir">[{$tab.dirname}]</span>{/if}
</a>
</li>
{/loop}
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
{loop $tabs $tid $tab}
<div class="tab-pane {if $page==$tid}active{/if}" id="tab_{$tid}">
{$tab.html}
</div>
{/loop}
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000')" class="btn green">
<i class="fa fa-save"></i> {dr_lang('保存权限配置')}
</button>
</div>
</div>
</form>
<script>
function dr_auth_mode(id) {
var loading = layer.load(2, {
shade: [0.3, '#fff'],
time: 100000000
});
var page = $('#dr_page').val() || 'site';
$.ajax({
type: "GET",
dataType: "json",
url: "{dr_url('cms/auth/save_edit')}&value=" + id,
success: function (json) {
layer.close(loading);
dr_cmf_tips(1, json.msg);
setTimeout(function () {
window.location.href = "{dr_url('cms/auth/index')}&page=" + page;
}, 500);
},
error: function (HttpRequest, ajaxOptions, thrownError) {
layer.close(loading);
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
}
</script>
<style>
.fc-auth-wrap { margin-bottom: 10px; }
.fc-auth-table { margin-bottom: 0; }
.fc-auth-table > thead > tr > th,
.fc-auth-table > tbody > tr > td {
vertical-align: middle !important;
}
.fc-auth-table .fc-auth-name {
width: 140px;
min-width: 140px;
background: #f9f9f9;
font-weight: 600;
white-space: nowrap;
position: sticky;
left: 0;
z-index: 2;
}
.fc-auth-table thead .fc-auth-name { z-index: 3; }
.fc-auth-table .fc-auth-col {
text-align: center;
min-width: 120px;
padding-top: 12px !important;
padding-bottom: 12px !important;
}
.fc-auth-table .fc-auth-check {
width: 16px;
height: 16px;
margin: 0;
padding: 0;
vertical-align: middle;
}
.fc-auth-table .fc-auth-gname {
display: block;
color: #999;
font-size: 12px;
font-weight: normal;
line-height: 1.3;
}
.fc-auth-table .fc-auth-lname {
display: block;
line-height: 1.4;
}
.fc-auth-dir {
color: #999;
font-size: 12px;
font-weight: normal;
}
</style>
{template "footer.html"}
+144
View File
@@ -0,0 +1,144 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{dr_form_hidden(['page' => $page])}
<div class="portlet bordered light myfbody">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject bold uppercase">
<i class="fa fa-cog"></i> {$page_name} - {dr_lang('栏目权限')}
</span>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
{if $is_share_page}
{if $share_categroy}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('共享栏目')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input onclick="rr('share_cat', this.value)" type="radio" name="data[home][is_category]" value="0" {if !$data.home.is_category}checked=""{/if}> {dr_lang('统一设置')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input onclick="rr('share_cat', this.value)" type="radio" name="data[home][is_category]" value="1" {if $data.home.is_category}checked=""{/if}> {dr_lang('按栏目设置')} <span></span></label>
</div>
<div id="rr_share_cat_0" style="display: none" class="margin-bottom-15">
<div class="table-scrollable" style="padding: 10px">
{template "auth_share_category.html"}
</div>
</div>
<div id="rr_share_cat_1" style="display: none">
<div class="table-scrollable">
<table class="fc-user-table table table-striped table-bordered table-checkable dataTable">
<thead>
<tr class="heading">
<th class="myselect">Id</th>
<th width="300">{dr_lang('栏目')}</th>
<th></th>
</tr>
</thead>
<tbody>
{loop $share_categroy $catid $cat}
<tr class="">
<td> {$cat.id}</td>
<td> {$cat.spacer} <a href="{$cat.url}" target="_blank">{$cat.name}</a></td>
<td>
<button onclick="dr_iframe('{dr_lang('[%s]权限', $cat.name)}', '{dr_url('cms/auth/edit', ['at' => 'share_category', 'aid'=>$aid, 'id'=>$catid])}', '700px', '300px', 'nogo')" type="button" class="btn blue btn-xs"> <i class="fa fa-cog"></i> {dr_lang('设置权限')}</button>
<button onclick="dr_iframe('{dr_lang('复制')}', '{dr_url('cms/auth/copy_edit', ['at'=>'share_category', 'aid'=>$aid, 'id'=>$catid])}')" type="button" class="btn red btn-xs"> <i class="fa fa-copy"></i> {dr_lang('同步到其他栏目')}</button>
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
</div>
</div>
</div>
{else}
<div class="alert alert-warning">{dr_lang('暂无共享栏目')}</div>
{/if}
{else}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块栏目')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input onclick="rr('module_cat', this.value)" type="radio" name="data[module][{$mid}][is_category]" value="0" {if !$data['module'][$mid]['is_category']}checked=""{/if}> {dr_lang('统一设置')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input onclick="rr('module_cat', this.value)" type="radio" name="data[module][{$mid}][is_category]" value="1" {if $data['module'][$mid]['is_category']}checked=""{/if}> {dr_lang('按栏目设置')} <span></span></label>
</div>
<div id="rr_module_cat_0" style="display: none" class="margin-bottom-15">
<div class="table-scrollable" style="padding: 10px">
{template "auth_category.html"}
</div>
</div>
<div id="rr_module_cat_1" style="display: none">
<div class="table-scrollable">
<table class="fc-user-table table table-striped table-bordered table-checkable dataTable">
<thead>
<tr class="heading">
<th class="myselect">Id</th>
<th width="300">{dr_lang('栏目')}</th>
<th></th>
</tr>
</thead>
<tbody>
{loop $m.category $catid $cat}
<tr class="">
<td> {$cat.id}</td>
<td> {$cat.spacer} <a href="{$cat.url}" target="_blank">{$cat.name}</a></td>
<td>
<button onclick="dr_iframe('{dr_lang('[%s]权限', $cat.name)}', '{dr_url('cms/auth/edit', ['at' => 'category', 'aid'=>$aid,'mid'=>$mid, 'id'=>$catid])}', '700px', '300px', 'nogo')" type="button" class="btn blue btn-xs"> <i class="fa fa-cog"></i> {dr_lang('设置权限')}</button>
<button onclick="dr_iframe('{dr_lang('复制')}', '{dr_url('cms/auth/copy_edit', ['at'=>'category', 'aid'=>$aid,'mid'=>$mid, 'id'=>$catid])}')" type="button" class="btn red btn-xs"> <i class="fa fa-copy"></i> {dr_lang('同步到其他栏目')}</button>
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
</div>
</div>
</div>
{loop $diy.module $d}
<div app="{$d.app}">
{php $dfile=$d.file;}
{load "$dfile"}
</div>
{/loop}
{/if}
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page={$page}', 'myform', '2000')" class="btn green"> <i class="fa fa-save"></i> {dr_lang('保存权限配置')}</button>
</div>
</div>
</form>
<script>
function rr(name, id) {
$('#rr_'+name+'_1').hide();
$('#rr_'+name+'_0').hide();
$('#rr_'+name+'_'+id).show();
}
$(function () {
{if $is_share_page}
rr('share_cat', {intval($data.home.is_category)});
{else}
rr('module_cat', {intval($data['module'][$mid]['is_category'])});
{/if}
});
</script>
<style>
.mt-checkbox-single {
margin-right: 10px;
}
</style>
{template "footer.html"}
@@ -0,0 +1,103 @@
{if $is_ajax_edit}
{template "header.html"}
<script type="text/javascript">
$(function() { //防止回车提交表单
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if (ev.keyCode==13) {
return false;
}
}
});
</script>
<style>
.mt-checkbox-single {
margin-right: 10px;
}
</style>
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{/if}
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('访问')}
<input type="checkbox" class="checkboxes" {if $auth['share_category']['show'] || !$auth['share_category']} checked {/if} name="share_category[show]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('发布')}
<input type="checkbox" class="checkboxes" {if $auth['share_category']['add']} checked {/if} name="share_category[add]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('修改')}
<input type="checkbox" class="checkboxes" {if $auth['share_category']['edit']} checked {/if} name="share_category[edit]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('删除')}
<input type="checkbox" class="checkboxes" {if $auth['share_category']['del']} checked {/if} name="share_category[del]" value="1" />
<span></span>
</label>
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
{dr_lang('验证码')}
<input type="checkbox" class="checkboxes" {if $auth['share_category']['code']} checked {/if} name="share_category[code]" value="1" />
<span></span>
</label>
<br>
<label>
<select name="share_category[verify]" class="form-control">
<option value="0"> {dr_lang('不审核')} </option>
{loop $verify $v}
<option value="{$v.id}" {if $auth['share_category']['verify'] == $v.id} selected{/if}> {dr_lang($v.name)} </option>
{/loop}
</select>
</label>
{if dr_is_app('explog')}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="share_category[exp]" value="{htmlspecialchars((string)$auth['share_category']['exp'])}" class="form-control" placeholder="">
<span class="input-group-addon">+{SITE_EXPERIENCE}</span>
</div>
</div>
{/if}
{if dr_is_app('scorelog')}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="share_category[score]" value="{htmlspecialchars((string)$auth['share_category']['score'])}" class="form-control" placeholder="">
<span class="input-group-addon">±{SITE_SCORE}</span>
</div>
</div>
{/if}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="share_category[money]" value="{htmlspecialchars((string)$auth['share_category']['money'])}" class="form-control" placeholder="">
<span class="input-group-addon">±{dr_lang('金额')}</span>
</div>
</div>
{if !$is_ajax_edit}
<label>
<select class="form-control" name="share_category[type_post]">
<option value="0" {if !$auth['share_category']['type_post']} selected{/if}>{dr_lang('按栏目')}</option>
<option value="1" {if $auth['share_category']['type_post']} selected{/if}>{dr_lang('按模块')}</option>
</select>
</label>
{/if}
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="share_category[day_post]" value="{htmlspecialchars((string)$auth['share_category']['day_post'])}" class="form-control" placeholder="">
<span class="input-group-addon">{dr_lang('日投稿')}</span>
</div>
</div>
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="share_category[total_post]" value="{htmlspecialchars((string)$auth['share_category']['total_post'])}" class="form-control" placeholder="">
<span class="input-group-addon">{dr_lang('投稿总数')}</span>
</div>
</div>
<input type="hidden" name="category[{$mid}][test]" value="1">
{if $is_ajax_edit}
</form>
{/if}
+81
View File
@@ -0,0 +1,81 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('更改配置之后需要更新缓存之后才能生效')}</a></p>
<p style="margin-top:10px;"><a style="color:blue" href="javascript:dr_load_ajax2('{dr_lang('确定要开启更多功能吗?')}', '{dr_url('menu/init')}', 0);">{dr_lang('若需获取更多功能设置,可开启更多功能')}</a></p>
</div>
<script>
function dr_load_ajax2(msg, url, go) {
layer.confirm(
msg,
{
icon: 3,
shade: 0,
title: lang['ts'],
btn: [lang['ok'], lang['esc']]
}, function(index){
layer.close(index);
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 5000
});
$.ajax({type: "GET",dataType:"json", url: url,
success: function(json) {
layer.close(index);
dr_tips(json.code, json.msg);
if (json.code > 0) {
setTimeout("top.location.reload(true)", 2000)
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
});
}
</script>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th width="200"> {dr_lang('名称')} / {dr_lang('目录')}</th>
<th> {dr_lang('操作')} </th>
</tr>
</thead>
<tbody>
{loop $my $t}
<tr class="odd gradeX">
<td><a {if !$t.share}href="{WEB_DIR}index.php?s={$t.dirname}" target="_blank"{/if}>{$t.name} / {$t.dirname}</a></td>
<td>
{if $t.install}
{if $ci->_is_admin_auth('edit')}
<label><a class="btn btn-xs red" href="javascript:dr_iframe('{dr_lang("变更名称")}', '{dr_url("module/module/name_edit", ['dir'=>$t.dirname])}', '450px', '300px');"><i class="fa fa-edit"></i> {dr_lang('更名')}</a></label>
<label><a href="javascript:top.dr_iframe_show('{dr_lang('配置')}','{dr_url('module/module/edit', ['id'=>$t.id])}', '80%', '90%');" class="btn btn-xs green"> <i class="fa fa-cog"></i> {dr_lang('配置')} </a></label>
<label><a href="javascript:top.dr_iframe_show('{dr_lang('推荐位')}','{dr_url('module/module/flag_edit', ['id'=>$t.id])}', '80%', '90%');" class="btn btn-xs dark"> <i class="fa fa-flag"></i> {dr_lang('推荐位')} </a></label>
{/if}
{if $ci->_is_admin_auth()}
<label><a href="javascript:top.dr_iframe_show('{dr_lang('模块内容字段')}','{dr_url('field/index', ['rname'=>'module', 'rid'=>$t.id])}&is_menu=1', '80%', '90%');" class="btn btn-xs green"> <i class="fa fa-code"></i> {dr_lang('模块内容字段')} </a></label>
<label><a href="javascript:top.dr_iframe_show('{dr_lang('栏目模型字段')}','{dr_url('field/index', ['rname'=>'catmodule-'.$t.dirname, 'rid'=>0])}&is_menu=1', '80%', '90%');" class="btn btn-xs dark"> <i class="fa fa-reorder"></i> {dr_lang('栏目模型字段')} </a></label>
<label><a href="javascript:top.dr_iframe_show('{dr_lang('划分栏目模型字段')}','{dr_url('module/module_category/field_index', ['dir'=>$t.dirname])}', '80%', '90%');" class="btn btn-xs red"> <i class="fa fa-cog"></i> {dr_lang('划分栏目模型字段')} </a></label>
{/if}
{else}
{if $ci->_is_admin_auth()}
<label><a href="javascript:dr_install_module('{dr_url('module/module/install', ['dir'=>$t.dirname])}', '{intval($t.inde)}');" class="btn btn-xs blue"> <i class="fa fa-plus"></i> {dr_lang('安装')} </a></label>
{/if}
{/if}
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
</form>
</div>
{template "footer.html"}
+367
View File
@@ -0,0 +1,367 @@
{template "header.html"}
<style>
.help-wrap { margin: 0 auto; padding: 10px 0 30px; color: #334155; line-height: 1.75; }
.help-section-title { margin: 0 0 14px; font-size: 18px; font-weight: 600; color: #1e293b; }
.help-section-body { font-size: 14px; }
.help-note { margin: 0 0 16px; padding: 12px 16px; background: #f8fafc; border-left: 4px solid #2563eb; color: #475569; }
.help-feature { margin-bottom: 20px; padding: 16px 18px; background: #fff; border: 1px solid #e2e8f0; border-radius: 8px; }
.help-feature-title { margin: 0 0 10px; font-size: 16px; font-weight: 600; color: #1e293b; }
.help-feature-desc p { margin: 0 0 8px; }
.help-feature-desc p:last-child { margin-bottom: 0; }
.help-feature-desc ul { margin: 8px 0 0; padding-left: 20px; }
.help-feature-desc li { margin-bottom: 6px; }
.help-list { margin: 8px 0 0; padding-left: 20px; }
.help-list li { margin-bottom: 6px; }
.help-steps { margin: 0; padding-left: 22px; }
.help-step { margin-bottom: 18px; }
.help-step-title { display: block; margin-bottom: 6px; font-size: 15px; font-weight: 600; color: #1e293b; }
.help-step-desc { margin: 0; color: #475569; }
.help-summary { margin-top: 18px; padding: 14px 16px; background: #eff6ff; border-radius: 8px; color: #1e40af; }
.help-code { display: inline-block; margin: 2px 0; padding: 2px 8px; font-family: Consolas, monospace; font-size: 13px; background: #f1f5f9; border-radius: 4px; color: #0f172a; word-break: break-all; }
.help-table { width: 100%; margin: 8px 0; border-collapse: collapse; font-size: 13px; }
.help-table th, .help-table td { padding: 8px 10px; border: 1px solid #e2e8f0; text-align: left; vertical-align: top; }
.help-table th { background: #f8fafc; font-weight: 600; }
.help-link { color: #2563eb; text-decoration: none; }
.help-link:hover { text-decoration: underline; }
.help-checklist { margin: 0; padding-left: 22px; }
.help-checklist li { margin-bottom: 8px; }
</style>
<div class="portlet light bordered">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="{dr_url('module/help/index', ['page' => 0])}"><i class="fa fa-sitemap"></i> {dr_lang('架构说明')}</a>
</li>
<li class="{if $page==1}active{/if}">
<a href="{dr_url('module/help/index', ['page' => 1])}"><i class="fa fa-list-ol"></i> {dr_lang('操作流程')}</a>
</li>
<li class="{if $page==2}active{/if}">
<a href="{dr_url('module/help/index', ['page' => 2])}"><i class="fa fa-th-large"></i> {dr_lang('后台菜单')}</a>
</li>
<li class="{if $page==3}active{/if}">
<a href="{dr_url('module/help/index', ['page' => 3])}"><i class="fa fa-check-square-o"></i> {dr_lang('快速上手')}</a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="help-wrap">
{if $page==0}
<div class="help-section-body">
<p class="help-note">CMS建站系统插件(Module)提供「<strong>站点 → 模块 → 栏目 → 内容</strong>」四层架构,是迅睿生态中的 L1 核心插件,支撑企业官网、新闻门户、产品展示等常见建站场景。</p>
<div class="help-feature">
<h3 class="help-feature-title">1. 站点</h3>
<div class="help-feature-desc">
<p>多站点环境下,每个站点拥有独立的配置、模板与内容数据。单站点使用时,默认操作当前站点即可。</p>
<p>典型配置:站点名称、Logo、模板风格、时区、关站提示;手机端独立域名/模板;站点级域名绑定。</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">2. 模块</h3>
<div class="help-feature-desc">
<p>模块代表一种<strong>内容类型</strong>,如新闻(news)、产品(product)、案例(case)。安装包自带示例 <span class="help-code">News</span> 模块,也可通过「创建模块」一键生成新类型。</p>
<ul>
<li><strong>共享模块</strong>:多个内容类型共用一套栏目树,适合常规建站(News 即为此模式)。</li>
<li><strong>独立模块</strong>:模块自带栏目,互不干扰,适合大型或复杂站点。</li>
</ul>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">3. 栏目</h3>
<div class="help-feature-desc">
<p>「共享栏目」是全站统一的栏目树,绑定模块后形成前台导航与列表入口。栏目类型包括:</p>
<ul>
<li><strong>列表栏目</strong>:展示某模块下的内容列表</li>
<li><strong>单页栏目</strong>:展示固定单页内容(关于我们等)</li>
<li><strong>外链栏目</strong>:跳转到外部 URL</li>
</ul>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">4. 内容</h3>
<div class="help-feature-desc">
<p>具体文章、产品、案例等数据,发布在对应模块的栏目下。支持草稿、回收站、审核、推荐位、同步多栏目等运营能力。</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">5. 生态联动</h3>
<div class="help-feature-desc">
<p>建站系统是迅睿生态的 L1 核心,多数业务插件围绕「模块内容」展开,可按需组合安装:</p>
<p><strong>用户与权限</strong></p>
<ul class="help-list">
<li><strong>用户系统(Member</strong>:会员注册登录、用户组、投稿、栏目权限、内容审核、用户中心</li>
<li><strong>通知(Notice</strong>:审核结果、系统消息、会员站内通知</li>
<li><strong>积分/经验(Scorelog / Explog</strong>:投稿、评论等行为奖励,与用户组升级联动</li>
<li><strong>第三方登录(Ucsso 等)</strong>:微信/QQ 等 OAuth 登录,关联会员账号</li>
</ul>
<p><strong>内容互动</strong></p>
<ul class="help-list">
<li><strong>评论(Comment</strong>:内容详情页评论、审核、回复</li>
<li><strong>表单(Form / Mform</strong>:独立表单或模块级表单,收集留言、报名、预约等</li>
<li><strong>TAG 标签</strong>:内容打标签、标签聚合页、相关推荐</li>
<li><strong>投票(Vote</strong>:调查问卷、投票活动挂接内容或独立发布</li>
<li><strong>问答 / 论坛(Wenda / Bbs / Ask</strong>:以模块或栏目承载社区互动内容</li>
</ul>
<p><strong>静态化与 SEO</strong></p>
<ul class="help-list">
<li><strong>静态生成(Chtml</strong>:栏目页、内容页、模块首页批量静态化;支持分离部署静态目录</li>
<li><strong>多语言(Duoyuyan / Website</strong>:多语种站点、内容翻译、独立 SEO</li>
<li><strong>分站(Fenzhan</strong>:城市站/区域站,独立域名与栏目内容</li>
</ul>
<p><strong>电商与付费</strong></p>
<ul class="help-list">
<li><strong>支付(Pay</strong>:微信/支付宝等收款,配合会员充值、订单</li>
<li><strong>商城(Store</strong>:商品模块、购物车、订单、售后</li>
<li><strong>下载(Book / Xiazaisf</strong>:付费下载、附件销售、阅读权限</li>
<li><strong>虚拟币 / 卡密</strong>:积分兑换、卡密发放等虚拟商品场景</li>
</ul>
<p><strong>运营与展示</strong></p>
<ul class="help-list">
<li><strong>广告(Adcontent</strong>:幻灯、横幅等广告位,挂接模板展示</li>
<li><strong>专题(Special</strong>:聚合多篇内容做专题页、活动页</li>
<li><strong>碎片(Block</strong>:可复用内容块,模板中灵活调用</li>
<li><strong>归档(Archive</strong>:历史内容归档检索</li>
</ul>
<p><strong>多端与扩展</strong></p>
<ul class="help-list">
<li><strong>小程序(Xcx</strong>:微信小程序对接模块内容与会员</li>
<li><strong>多端互联(Client</strong>PC/手机/APP 等多终端统一内容</li>
<li><strong>APIHttpapi</strong>:对外提供内容、栏目数据接口</li>
<li><strong>字段标签(Mbdy</strong>:模板标签可视化生成,配合前台开发</li>
<li><strong>AI 助手(Ai_helper 等)</strong>AI 创作、发布到指定模块栏目</li>
</ul>
<p class="help-note" style="margin-top:12px;margin-bottom:0;">以上插件均可在「应用插件 → 应用市场」搜索安装;具体能力以各插件文档为准。</p>
</div>
</div>
</div>
{/if}
{if $page==1}
<div class="help-section-body">
<p class="help-note">管理员负责建站与内容运营;访客浏览站点;会员(需用户系统)在有权限时可投稿。以下按角色说明典型路径。</p>
<ol class="help-steps">
<li class="help-step">
<span class="help-step-title">第一步:站点基础配置</span>
<p class="help-step-desc">
<a class="help-link" href="{dr_url('module/site_config/index')}">网站设置</a> 完成站点参数;
<a class="help-link" href="{dr_url('module/site_param/index')}">网站信息</a> 维护幻灯、友链等;
按需配置 <a class="help-link" href="{dr_url('module/site_mobile/index')}">手机设置</a>
<a class="help-link" href="{dr_url('module/site_domain/index')}">域名绑定</a>
<a class="help-link" href="{dr_url('module/site_image/index')}">图片设置</a>
</p>
</li>
<li class="help-step">
<span class="help-step-title">第二步:搭建内容结构</span>
<p class="help-step-desc">
<a class="help-link" href="{dr_url('module/module_create/index')}">创建模块</a> 中新建内容类型(或使用自带 News 模块);
<a class="help-link" href="{dr_url('module/module/index')}">模块管理</a> 中调整审核、列表字段、排序规则等;
<a class="help-link" href="{dr_url('category/index')}">共享栏目</a> 中建立栏目树并绑定模块,形成前台菜单与列表。
</p>
</li>
<li class="help-step">
<span class="help-step-title">第三步:SEO 与 URL</span>
<p class="help-step-desc">
在 SEO 设置中配置
<a class="help-link" href="{dr_url('module/seo_site/index')}">站点 SEO</a>
<a class="help-link" href="{dr_url('module/seo_module/index')}">模块 SEO</a>
<a class="help-link" href="{dr_url('module/seo_category/index')}">栏目 SEO</a>
<a class="help-link" href="{dr_url('module/urlrule/index')}">URL 规则</a>
<a class="help-link" href="{dr_url('module/urlrule/rewrite_index')}">伪静态解析</a> 中设置链接格式,并部署到 Web 服务器。
</p>
</li>
<li class="help-step">
<span class="help-step-title">第四步:发布与审核内容</span>
<p class="help-step-desc">
<a class="help-link" href="{dr_url('module/content/index')}">内容管理</a> 中按栏目发布、编辑、排序内容;
使用草稿箱/回收站管理未完成或误删数据;
在内容审核中处理会员或编辑提交的待审稿;
可选配置 <a class="help-link" href="{dr_url('module/module_search/index')}">模块搜索</a>
</p>
</li>
<li class="help-step">
<span class="help-step-title">第五步:模板与前台</span>
<p class="help-step-desc">
在模板目录中调整 index、list、show、search 等页面;
通过模板标签调用栏目与内容数据;
开启模块首页静态或安装静态插件做全站静态化。
</p>
</li>
<li class="help-step">
<span class="help-step-title">访客:浏览与搜索</span>
<p class="help-step-desc">访问网站首页与各栏目列表;点击进入内容详情;使用搜索功能查找文章(受后台搜索配置控制)。</p>
</li>
<li class="help-step">
<span class="help-step-title">会员:投稿与管理(可选)</span>
<p class="help-step-desc">登录用户中心,进入已授权模块;选择有权限栏目填写内容并提交或存草稿;等待管理员审核通过后前台展示。</p>
</li>
</ol>
<div class="help-summary">
<strong>{dr_lang('简要流程')}</strong>
{dr_lang('站点配置 → 创建模块与栏目 → SEO/URL → 发内容与审核 → 模板上线')}
</div>
</div>
{/if}
{if $page==2}
<div class="help-section-body">
<p class="help-note">以下对照后台「设置」与「内容」菜单,便于快速找到对应功能入口。</p>
<h3 class="help-section-title">{dr_lang('设置')}</h3>
<table class="help-table">
<thead>
<tr>
<th>{dr_lang('菜单')}</th>
<th>{dr_lang('功能')}</th>
<th>{dr_lang('入口')}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{dr_lang('网站设置')}</td>
<td>{dr_lang('站点名称、Logo、模板、时区、关站等基础参数')}</td>
<td><a class="help-link" href="{dr_url('module/site_config/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('手机设置')}</td>
<td>{dr_lang('手机端独立域名与模板配置')}</td>
<td><a class="help-link" href="{dr_url('module/site_mobile/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('域名绑定')}</td>
<td>{dr_lang('站点级、栏目级域名绑定')}</td>
<td><a class="help-link" href="{dr_url('module/site_domain/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('创建模块')}</td>
<td>{dr_lang('新建内容类型(新闻、产品等)')}</td>
<td><a class="help-link" href="{dr_url('module/module_create/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('模块管理')}</td>
<td>{dr_lang('模块安装/卸载、审核、列表字段、推荐位等')}</td>
<td><a class="help-link" href="{dr_url('module/module/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('模块搜索')}</td>
<td>{dr_lang('搜索字段、排序、时间范围等规则')}</td>
<td><a class="help-link" href="{dr_url('module/module_search/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('站点 SEO')}</td>
<td>{dr_lang('全站 title/keywords/description 模板')}</td>
<td><a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('模块 SEO')}</td>
<td>{dr_lang('各模块首页、列表、详情 SEO 模板')}</td>
<td><a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('栏目 SEO')}</td>
<td>{dr_lang('各栏目的 SEO 模板')}</td>
<td><a class="help-link" href="{dr_url('module/seo_category/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('URL 规则')}</td>
<td>{dr_lang('内容页、列表页链接格式')}</td>
<td><a class="help-link" href="{dr_url('module/urlrule/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('伪静态解析')}</td>
<td>{dr_lang('生成 Nginx/Apache 伪静态规则')}</td>
<td><a class="help-link" href="{dr_url('module/urlrule/rewrite_index')}">{dr_lang('进入')}</a></td>
</tr>
</tbody>
</table>
<h3 class="help-section-title" style="margin-top:24px;">{dr_lang('内容')}</h3>
<table class="help-table">
<thead>
<tr>
<th>{dr_lang('菜单')}</th>
<th>{dr_lang('功能')}</th>
<th>{dr_lang('入口')}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{dr_lang('内容管理')}</td>
<td>{dr_lang('按模块/栏目浏览、发布、编辑、排序内容')}</td>
<td><a class="help-link" href="{dr_url('module/content/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('网站信息')}</td>
<td>{dr_lang('幻灯片、友情链接等站点自定义参数')}</td>
<td><a class="help-link" href="{dr_url('module/site_param/index')}">{dr_lang('进入')}</a></td>
</tr>
<tr>
<td>{dr_lang('共享栏目')}</td>
<td>{dr_lang('栏目树管理、绑定模块、栏目字段与权限')}</td>
<td><a class="help-link" href="{dr_url('category/index')}">{dr_lang('进入')}</a></td>
</tr>
</tbody>
</table>
</div>
{/if}
{if $page==3}
<div class="help-section-body">
<p class="help-note">首次安装建站系统后,按以下清单逐项完成,即可快速上线一个可访问的内容站点。</p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('安装与初始化')}</h3>
<div class="help-feature-desc">
<ol class="help-checklist">
<li>确认「建站系统」插件已安装,并在 <a class="help-link" href="{dr_url('module/module/index')}">模块管理</a> 中装载共享模块到当前站点</li>
<li>确认示例 <span class="help-code">News</span> 模块已安装(或自行 <a class="help-link" href="{dr_url('module/module_create/index')}">创建模块</a></li>
<li>修改模块、栏目或 URL 规则后,执行<strong>系统缓存更新</strong></li>
</ol>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('建站五步走')}</h3>
<div class="help-feature-desc">
<ol class="help-checklist">
<li><a class="help-link" href="{dr_url('module/site_config/index')}">网站设置</a>:填写站点名称,选择模板目录(<span class="help-code">{SITE_TEMPLATE}</span>)与主题风格(<span class="help-code">{SITE_THEME}</span></li>
<li><a class="help-link" href="{dr_url('category/index')}">共享栏目</a>:建立栏目树,将列表栏目绑定到 news 等模块</li>
<li><a class="help-link" href="{dr_url('module/content/index')}">内容管理</a>:在对应栏目下发布测试文章</li>
<li><a class="help-link" href="{dr_url('module/urlrule/index')}">URL 规则</a> + <a class="help-link" href="{dr_url('module/urlrule/rewrite_index')}">伪静态解析</a>:配置并部署服务器规则</li>
<li>访问前台首页与栏目列表,确认内容正常展示</li>
</ol>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('常见问题')}</h3>
<div class="help-feature-desc">
<ul class="help-list">
<li><strong>{dr_lang('前台 404 或模块不存在')}</strong>:检查模块是否已安装到当前站点,并更新系统缓存</li>
<li><strong>{dr_lang('栏目无法使用')}</strong>:确认共享模块(Module)已装载;多站点时注意在对应站点操作</li>
<li><strong>{dr_lang('伪静态不生效')}</strong>:后台规则配置后,还需在 Nginx/Apache 中写入对应 rewrite 规则</li>
<li><strong>{dr_lang('修改模板无变化')}</strong>{dr_lang('确认模板目录(SITE_TEMPLATE)与主题风格(SITE_THEME)正确;清除浏览器缓存;若开启静态化需重新生成')}</li>
</ul>
</div>
</div>
</div>
{/if}
</div>
</div>
</div>
{template "footer.html"}
+212
View File
@@ -0,0 +1,212 @@
{template "header.html"}
<style>
.help-wrap { margin: 0 auto; padding: 10px 0 30px; color: #334155; line-height: 1.75; }
.help-note { margin: 0 0 16px; padding: 12px 16px; background: #f8fafc; border-left: 4px solid #2563eb; color: #475569; }
.help-feature { margin-bottom: 20px; padding: 16px 18px; background: #fff; border: 1px solid #e2e8f0; border-radius: 8px; }
.help-feature-title { margin: 0 0 10px; font-size: 16px; font-weight: 600; color: #1e293b; }
.help-feature-desc p { margin: 0 0 8px; }
.help-feature-desc ul { margin: 8px 0 0; padding-left: 20px; }
.help-feature-desc li { margin-bottom: 6px; }
.help-steps { margin: 0; padding-left: 22px; }
.help-step { margin-bottom: 18px; }
.help-step-title { display: block; margin-bottom: 6px; font-size: 15px; font-weight: 600; color: #1e293b; }
.help-step-desc { margin: 0; color: #475569; }
.help-summary { margin-top: 18px; padding: 14px 16px; background: #eff6ff; border-radius: 8px; color: #1e40af; }
.help-code { display: inline-block; margin: 2px 0; padding: 2px 8px; font-family: Consolas, monospace; font-size: 13px; background: #f1f5f9; border-radius: 4px; color: #0f172a; word-break: break-all; }
.help-pre { margin: 8px 0; padding: 12px 14px; font-family: Consolas, monospace; font-size: 13px; background: #0f172a; color: #e2e8f0; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; }
.help-table { width: 100%; margin: 8px 0; border-collapse: collapse; font-size: 13px; }
.help-table th, .help-table td { padding: 8px 10px; border: 1px solid #e2e8f0; text-align: left; vertical-align: top; }
.help-table th { background: #f8fafc; font-weight: 600; }
.help-link { color: #2563eb; text-decoration: none; }
.help-link:hover { text-decoration: underline; }
</style>
<div class="portlet light bordered">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="{dr_url('module/help/seo', ['page' => 0])}"><i class="fa fa-sitemap"></i> {dr_lang('配置层级')}</a>
</li>
<li class="{if $page==1}active{/if}">
<a href="{dr_url('module/help/seo', ['page' => 1])}"><i class="fa fa-tags"></i> {dr_lang('通配符')}</a>
</li>
<li class="{if $page==2}active{/if}">
<a href="{dr_url('module/help/seo', ['page' => 2])}"><i class="fa fa-list-ol"></i> {dr_lang('配置流程')}</a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="help-wrap">
{if $page==0}
<div class="help-section-body">
<p class="help-note">{dr_lang('SEO 按「站点 → 模块 → 栏目」分层配置,下层可覆盖上层规则;内容页还可使用文章自身的 title/keywords/description 字段。')}</p>
<table class="help-table">
<thead>
<tr><th>{dr_lang('层级')}</th><th>{dr_lang('配置范围')}</th><th>{dr_lang('后台入口')}</th></tr>
</thead>
<tbody>
<tr>
<td>{dr_lang('站点 SEO')}</td>
<td>{dr_lang('全站首页 title/keywords/descriptionSEO 连接符;全站 URL 规则;网站首页静态')}</td>
<td><a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('站点SEO')}</a></td>
</tr>
<tr>
<td>{dr_lang('模块 SEO')}</td>
<td>{dr_lang('模块首页、栏目列表、内容详情、搜索页的 SEO 模板;模块 URL 规则(独立模块)')}</td>
<td><a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('模块SEO')}</a></td>
</tr>
<tr>
<td>{dr_lang('栏目 SEO')}</td>
<td>{dr_lang('为单个栏目单独设置列表页/内容页 SEO(模块 SEO 中开启「分别设置」后生效)')}</td>
<td><a class="help-link" href="{dr_url('module/seo_category/index')}">{dr_lang('栏目SEO')}</a></td>
</tr>
<tr>
<td>{dr_lang('内容 SEO')}</td>
<td>{dr_lang('发布内容时填写标题、关键词、描述;优先于模块模板中的通配符')}</td>
<td><a class="help-link" href="{dr_url('module/content/index')}">{dr_lang('内容管理')}</a></td>
</tr>
</tbody>
</table>
<div class="help-feature" style="margin-top:20px;">
<h3 class="help-feature-title">{dr_lang('SEO 连接符')}</h3>
<div class="help-feature-desc">
<p>{dr_lang('在')} <a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('站点SEO')}</a> {dr_lang('中设置')} <span class="help-code">SITE_SEOJOIN</span>{dr_lang('默认')} <span class="help-code">_</span>),{dr_lang('用于拼接标题中的多个部分。')}</p>
<p>{dr_lang('模板中的')} {code}{join}{/code} {dr_lang('会被替换为该连接符,例如:')} {code}文章标题{join}栏目名称{join}网站名称{/code}</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('前台输出')}</h3>
<div class="help-feature-desc">
<p>{dr_lang('系统计算后的 SEO 会赋值给模板变量:')}</p>
<ul>
<li>{code}{$meta_title}{/code} — {dr_lang('页面 title')}</li>
<li>{code}{$meta_keywords}{/code} — {dr_lang('keywords')}</li>
<li>{code}{$meta_description}{/code} — {dr_lang('description')}</li>
</ul>
<p>{dr_lang('一般在')} {code}header.html{/code} {dr_lang('的 head 区域输出。')}</p>
</div>
</div>
</div>
{/if}
{if $page==1}
<div class="help-section-body">
<p class="help-note">{dr_lang('SEO 模板中使用花括号通配符,保存后系统自动替换为实际值。分页页码用')} {code}[第&#123;page&#125;&#123;join&#125;]{/code} {dr_lang('格式(方括号表示仅分页时显示)。')}</p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('通用通配符')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('通配符')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr><td>{code}{SITE_NAME}{/code}</td><td>{dr_lang('网站名称')}</td></tr>
<tr><td>{code}{join}{/code}</td><td>{dr_lang('SEO 连接符(站点 SEO 中设置)')}</td></tr>
<tr><td>{code}{page}{/code}</td><td>{dr_lang('分页页码')}</td></tr>
<tr><td>{code}{modname}{/code}</td><td>{dr_lang('模块名称')}</td></tr>
<tr><td>{code}{name}{/code} / {code}{catname}{/code}</td><td>{dr_lang('栏目名称')}</td></tr>
<tr><td>{code}{catpname}{/code}</td><td>{dr_lang('栏目层级路径名称(含上级)')}</td></tr>
<tr><td>{code}{title}{/code}</td><td>{dr_lang('内容标题')}</td></tr>
<tr><td>{code}{keyword}{/code}</td><td>{dr_lang('搜索关键词')}</td></tr>
<tr><td>{code}{param}{/code}</td><td>{dr_lang('搜索附加参数')}</td></tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('常用模板示例')}</h3>
<div class="help-feature-desc">
<p><strong>{dr_lang('内容页标题(默认)')}</strong></p>
<pre class="help-pre">{code}[第{page}页{join}]{title}{join}{catpname}{join}{SITE_NAME}{/code}</pre>
<p><strong>{dr_lang('栏目列表页标题(默认)')}</strong></p>
<pre class="help-pre">{code}[第{page}页{join}]{catpname}{join}{SITE_NAME}{/code}</pre>
<p><strong>{dr_lang('搜索页标题(默认)')}</strong></p>
<pre class="help-pre">{code}[第{page}页{join}][{keyword}{join}][{param}{join}]{SITE_NAME}{/code}</pre>
<p>{dr_lang('模块 SEO 配置页中点击「可用通配符标签」按钮,可查看当前页面支持的全部通配符。')}</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('内容自定义字段')}</h3>
<div class="help-feature-desc">
<p>{dr_lang('模块内容字段、栏目字段也可参与 SEO 通配符替换(在模块 SEO 的通配符列表中查看)。自定义字段需在字段管理中勾选参与 SEO。')}</p>
</div>
</div>
</div>
{/if}
{if $page==2}
<div class="help-section-body">
<p class="help-note">{dr_lang('建议按以下顺序配置 SEO,修改后执行系统缓存更新,并访问前台验证页面 source 中的 title/meta 标签。')}</p>
<ol class="help-steps">
<li class="help-step">
<span class="help-step-title">{dr_lang('第一步:站点 SEO')}</span>
<p class="help-step-desc">
进入 <a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('站点SEO')}</a>
填写首页 title/keywords/description,设置 SEO 连接符;
如需全站统一 URL 格式,选择全局 URL 规则。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第二步:模块 SEO')}</span>
<p class="help-step-desc">
进入 <a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('模块SEO')}</a>
按模块 Tab 分别设置首页、栏目列表、内容详情、搜索页的 SEO 模板;
独立模块可在此绑定模块 URL 规则。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第三步:栏目 SEO(可选)')}</span>
<p class="help-step-desc">
若某栏目需独立 SEO,在模块 SEO 中将「按栏目设置 SEO」改为「分别设置」,
再到 <a class="help-link" href="{dr_url('module/seo_category/index')}">{dr_lang('栏目SEO')}</a> 逐栏配置。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第四步:内容 SEO')}</span>
<p class="help-step-desc">
发布/编辑内容时填写 SEO 标题、关键词、描述;
留空则使用模块 SEO 模板通配符自动生成。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第五步:更新与验证')}</span>
<p class="help-step-desc">
修改 SEO 规则或 URL 规则后,点击各 SEO 页顶部的「设置全站SEO规则」或执行系统缓存更新;
访问首页、列表、详情、搜索页,查看浏览器标题与 meta 是否符合预期。
</p>
</li>
</ol>
<div class="help-feature" style="margin-top:20px;">
<h3 class="help-feature-title">{dr_lang('常见问题')}</h3>
<div class="help-feature-desc">
<ul>
<li><strong>{dr_lang('修改后前台无变化')}</strong>{dr_lang('更新系统缓存;清除浏览器缓存;若开启静态化需重新生成')}</li>
<li><strong>{dr_lang('分页标题无页码')}</strong>{dr_lang('确认模板含')} {code}[第&#123;page&#125;&#123;join&#125;]{/code} {dr_lang('且当前为第 2 页及以上')}</li>
<li><strong>{dr_lang('栏目 SEO 不生效')}</strong>{dr_lang('检查模块 SEO 是否已开启「分别设置」;共享模块需在栏目 SEO 页操作')}</li>
</ul>
</div>
</div>
<div class="help-summary">
<strong>{dr_lang('相关')}</strong>
{dr_lang('自定义链接格式见')}
<a class="help-link" href="{dr_url('module/help/url')}">{dr_lang('自定义URL用法')}</a>
</div>
</div>
{/if}
</div>
</div>
</div>
{template "footer.html"}
+374
View File
@@ -0,0 +1,374 @@
{template "header.html"}
<style>
.help-wrap { margin: 0 auto; padding: 10px 0 30px; color: #334155; line-height: 1.75; }
.help-section-title { margin: 0 0 14px; font-size: 18px; font-weight: 600; color: #1e293b; }
.help-section-body { font-size: 14px; }
.help-note { margin: 0 0 16px; padding: 12px 16px; background: #f8fafc; border-left: 4px solid #2563eb; color: #475569; }
.help-feature { margin-bottom: 20px; padding: 16px 18px; background: #fff; border: 1px solid #e2e8f0; border-radius: 8px; }
.help-feature-title { margin: 0 0 10px; font-size: 16px; font-weight: 600; color: #1e293b; }
.help-feature-desc p { margin: 0 0 8px; }
.help-feature-desc p:last-child { margin-bottom: 0; }
.help-feature-desc ul { margin: 8px 0 0; padding-left: 20px; }
.help-feature-desc li { margin-bottom: 6px; }
.help-steps { margin: 0; padding-left: 22px; }
.help-step { margin-bottom: 18px; }
.help-step-title { display: block; margin-bottom: 6px; font-size: 15px; font-weight: 600; color: #1e293b; }
.help-step-desc { margin: 0; color: #475569; }
.help-summary { margin-top: 18px; padding: 14px 16px; background: #eff6ff; border-radius: 8px; color: #1e40af; }
.help-code { display: inline-block; margin: 2px 0; padding: 2px 8px; font-family: Consolas, monospace; font-size: 13px; background: #f1f5f9; border-radius: 4px; color: #0f172a; word-break: break-all; }
.help-pre { margin: 8px 0; padding: 12px 14px; font-family: Consolas, monospace; font-size: 13px; background: #0f172a; color: #e2e8f0; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; }
.help-table { width: 100%; margin: 8px 0; border-collapse: collapse; font-size: 13px; }
.help-table th, .help-table td { padding: 8px 10px; border: 1px solid #e2e8f0; text-align: left; vertical-align: top; }
.help-table th { background: #f8fafc; font-weight: 600; }
.help-link { color: #2563eb; text-decoration: none; }
.help-link:hover { text-decoration: underline; }
</style>
<div class="portlet light bordered">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="{dr_url('module/help/template', ['page' => 0])}"><i class="fa fa-folder-open"></i> {dr_lang('目录结构')}</a>
</li>
<li class="{if $page==1}active{/if}">
<a href="{dr_url('module/help/template', ['page' => 1])}"><i class="fa fa-file-code-o"></i> {dr_lang('语法与变量')}</a>
</li>
<li class="{if $page==2}active{/if}">
<a href="{dr_url('module/help/template', ['page' => 2])}"><i class="fa fa-tags"></i> {dr_lang('常用标签')}</a>
</li>
<li class="{if $page==3}active{/if}">
<a href="{dr_url('module/help/template', ['page' => 3])}"><i class="fa fa-wrench"></i> {dr_lang('制作步骤')}</a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="help-wrap">
{if $page==0}
<div class="help-section-body">
<p class="help-note">
前台模板存放在 <span class="help-code">{TPLPATH}pc/{SITE_TEMPLATE}/home/</span>
静态资源在 <span class="help-code">static/{SITE_THEME}/</span>{dr_lang('模板中通过')} <span class="help-code">{code}{HOME_THEME_PATH}{/code}</span> {dr_lang('引用')})。
当前站点模板目录为 <span class="help-code">{SITE_TEMPLATE}</span>,主题风格为 <span class="help-code">{SITE_THEME}</span>,可在 <a class="help-link" href="{dr_url('module/site_config/index')}">网站设置</a> 中修改。
</p>
<div class="help-pre">template/
├── pc/
│ └── {SITE_TEMPLATE}/ # 当前 PC 模板目录
│ └── home/
│ ├── index.html # 网站首页
│ ├── list.html # 栏目列表页
│ ├── show.html # 内容详情页
│ ├── category.html # 栏目封面页
│ ├── page.html # 单页栏目
│ ├── search.html # 模块搜索页
│ ├── header.html # 公共页头
│ ├── footer.html # 公共页脚
│ ├── 404.html # 404 页面
│ └── msg.html # 提示信息页
└── mobile/
└── {SITE_TEMPLATE}/home/ # 手机端,文件结构与 PC 相同
static/{SITE_THEME}/ # 主题风格静态资源(CSS/JS/图片)
├── pc/css/
├── pc/plugins/
└── swiper/</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('模板文件说明')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('文件')}</th><th>{dr_lang('触发场景')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr><td><span class="help-code">index.html</span></td><td>{dr_lang('网站首页')}</td><td>{dr_lang('全站首页,可调用各模块数据块')}</td></tr>
<tr><td><span class="help-code">list.html</span></td><td>{dr_lang('列表栏目')}</td><td>{dr_lang('栏目内容分页列表,输出')} {code}{$pages}{/code} {dr_lang('分页')}</td></tr>
<tr><td><span class="help-code">show.html</span></td><td>{dr_lang('内容详情')}</td><td>{dr_lang('标题、正文、上下篇、关联内容等')}</td></tr>
<tr><td><span class="help-code">category.html</span></td><td>{dr_lang('封面栏目')}</td><td>{dr_lang('展示子栏目及每个子栏目的部分内容')}</td></tr>
<tr><td><span class="help-code">page.html</span></td><td>{dr_lang('单页栏目')}</td><td>{dr_lang('输出栏目名称与正文')} {code}{$content}{/code}</td></tr>
<tr><td><span class="help-code">search.html</span></td><td>{dr_lang('模块搜索')}</td><td>{dr_lang('搜索表单与结果列表')}</td></tr>
<tr><td><span class="help-code">header.html / footer.html</span></td><td>{dr_lang('公共引入')}</td><td>{dr_lang('通过')} {code}{template "header.html"}{/code} {dr_lang('复用')}</td></tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('模块独立模板(可选)')}</h3>
<div class="help-feature-desc">
<p><a class="help-link" href="{dr_url('module/module/index')}">模块管理</a> 中可为单个模块绑定独立风格目录;栏目编辑页也可单独指定 list/show/page 等模板文件名。</p>
<p>优先级:内容自定义模板 &gt; 栏目模板设置 &gt; 模块风格 &gt; 站点默认风格。</p>
</div>
</div>
</div>
{/if}
{if $page==1}
<div class="help-section-body">
<p class="help-note">迅睿模板语法由花括号标签与 PHP 混合组成,循环体内当前行数据通常用 <span class="help-code">$t</span> 表示。</p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('引入子模板')}</h3>
<div class="help-feature-desc">
<pre class="help-pre">{code}{template "header.html"}
{template "footer.html"}{/code}</pre>
<p>{dr_lang('引入同目录下的页头、页脚;也可引入子路径模板,如')} {code}{template "index_data.html"}{/code}。</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('SEO 与页面变量')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('变量')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr><td><span class="help-code">{code}{$meta_title}{/code}</span></td><td>{dr_lang('页面标题')}</td></tr>
<tr><td><span class="help-code">{code}{$meta_keywords}{/code}</span></td><td>{dr_lang('页面关键词')}</td></tr>
<tr><td><span class="help-code">{code}{$meta_description}{/code}</span></td><td>{dr_lang('页面描述')}</td></tr>
<tr><td><span class="help-code">{code}{$indexc}{/code}</span></td><td>{dr_lang('首页标记(仅首页为 1')}</td></tr>
<tr><td><span class="help-code">{code}{$catid}{/code}</span></td><td>{dr_lang('当前栏目 ID')}</td></tr>
<tr><td><span class="help-code">{code}{$cat.name}{/code}</span> / <span class="help-code">{code}{$cat.url}{/code}</span></td><td>{dr_lang('当前栏目名称与链接')}</td></tr>
<tr><td><span class="help-code">{code}{$title}{/code}</span> / <span class="help-code">{code}{$content}{/code}</span></td><td>{dr_lang('详情页标题与正文')}</td></tr>
<tr><td><span class="help-code">{code}{$updatetime}{/code}</span></td><td>{dr_lang('更新时间(已格式化)')}</td></tr>
<tr><td><span class="help-code">{code}{$pages}{/code}</span></td><td>{dr_lang('列表分页 HTML')}</td></tr>
<tr><td><span class="help-code">{code}{MOD_DIR}{/code}</span></td><td>{dr_lang('当前模块目录名')}</td></tr>
<tr><td><span class="help-code">{code}{SITE_LOGO}{/code}</span></td><td>{dr_lang('站点 LOGO 地址')}</td></tr>
<tr><td><span class="help-code">{code}{HOME_THEME_PATH}{/code}</span></td><td>{dr_lang('当前风格静态资源路径')}</td></tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('判断与循环')}</h3>
<div class="help-feature-desc">
<pre class="help-pre">{code}{if $indexc} class="is-active"{/if}
{if $catid && dr_in_array($catid, $t.catids)} class="is-active"{/if}
{/code}</pre>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('站点自定义参数')}</h3>
<div class="help-feature-desc">
<p><a class="help-link" href="{dr_url('module/site_param/index')}">网站信息</a> 中维护的字段,模板中读取:</p>
<pre class="help-pre">{code}{php $mysite=dr_site_value('hdtp');}
{loop $mysite $v}
{dr_get_file($v[1])}
{/loop}{/code}</pre>
<p>安装时默认包含 <span class="help-code">hdtp</span>(幻灯片)、<span class="help-code">yqlj</span>(友情链接)等字段。</p>
</div>
</div>
</div>
{/if}
{if $page==2}
<div class="help-section-body">
<p class="help-note">{dr_lang('以下为建站系统最常用的前台标签;不熟悉语法时,可优先使用下方标签生成工具,再粘贴到模板中调试。完整文档见')} <a class="help-link" href="https://www.xunruicms.com/doc/" target="_blank" rel="noopener">{dr_lang('官方模板手册')}</a></p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('标签生成工具(推荐)')}</h3>
<div class="help-feature-desc">
<p>{dr_lang('制作模板时不必手写全部标签,以下两个工具可可视化生成调用代码,复制到模板即可使用。')}</p>
<table class="help-table">
<thead>
<tr><th>{dr_lang('工具')}</th><th>{dr_lang('说明')}</th><th>{dr_lang('入口')}</th></tr>
</thead>
<tbody>
<tr>
<td><strong>Mbdy</strong><br><span class="help-code">{dr_lang('字段标签调用工具')}</span></td>
<td>
{dr_lang('官方应用市场免费插件。支持字段调用、页面标签、循环标签、搜索条件等,可按模块/栏目/字段点选生成代码,适合后台开发时使用。')}
<ul>
<li>{dr_lang('安装:后台「应用插件 → 应用市场」搜索')} <span class="help-code">Mbdy</span> {dr_lang('或「字段标签调用工具」')}</li>
<li>{dr_lang('安装后菜单:应用插件 → 模板调用工具')}</li>
</ul>
</td>
<td>
{if dr_is_app('mbdy')}
<a class="help-link" href="{dr_url('mbdy/home/index')}">{dr_lang('打开 Mbdy')}</a>
{else}
<span>{dr_lang('需先安装插件')}</span>
{/if}
</td>
</tr>
<tr>
<td><strong>{dr_lang('在线标签生成器')}</strong></td>
<td>
{dr_lang('迅睿官方在线工具,无需安装插件。可生成常用标签、导航循环、module/category 内容循环、自定义字段调用等代码,适合快速查阅与复制。')}
</td>
<td>
<a class="help-link" href="https://www.xunruicms.com/doc/code/" target="_blank" rel="noopener">{dr_lang('打开在线工具')}</a>
</td>
</tr>
</tbody>
</table>
<p class="help-note" style="margin-top:12px;margin-bottom:0;">{dr_lang('提示:在线工具部分「自定义字段调用」功能需后台安装《字段标签生成工具》插件后配合使用,详见')} <a class="help-link" href="https://www.xunruicms.com/doc/code/" target="_blank" rel="noopener">xunruicms.com/doc/code</a></p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('内容列表')} {code}{module}{/code}</h3>
<div class="help-feature-desc">
<pre class="help-pre">{code}{module module=news num=6 order=updatetime}
{$t.url} {$t.title}
{/module}
{module catid=$catid order=updatetime page=1}
{$t.url} {$t.title}
{/module}
{$pages}{/code}</pre>
<ul>
<li><span class="help-code">module</span> — {dr_lang('模块目录,如 news、product')}</li>
<li><span class="help-code">catid</span> — {dr_lang('栏目 ID,支持逗号多栏目')}</li>
<li><span class="help-code">num</span> — {dr_lang('条数;列表页用 page=1 开启分页')}</li>
<li><span class="help-code">order</span> — {dr_lang('排序:updatetime、hits、displayorder 等')}</li>
<li><span class="help-code">flag</span> — {dr_lang('推荐位编号')}</li>
<li>{dr_lang('常用字段')}<span class="help-code">$t.title</span><span class="help-code">$t.url</span><span class="help-code">$t.thumb</span><span class="help-code">$t.description</span><span class="help-code">$t.hits</span></li>
</ul>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('栏目导航')} {code}{category}{/code}</h3>
<div class="help-feature-desc">
<pre class="help-pre">{code}{category module=share pid=0}
{$t.url} {$t.title}
{/category}
{category module=share pid=$t.id return=t2}
{$t.url} {$t.title}
{/category}{/code}</pre>
<ul>
<li><span class="help-code">module=share</span> — {dr_lang('共享栏目树')}</li>
<li><span class="help-code">pid=0</span> — {dr_lang('一级栏目;pid=$catid 取子栏目')}</li>
<li><span class="help-code">return=t2</span> — {dr_lang('自定义循环变量名,避免嵌套冲突')}</li>
</ul>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('关联内容')} {code}{related}{/code}</h3>
<div class="help-feature-desc">
<pre class="help-pre">{code}{related module=MOD_DIR tag=$tag num=6}
{$t.url} {$t.title}
{/related}{/code}</pre>
<p>{dr_lang('按 Tag 或关键词关联推荐,常用于详情页底部「相关内容」。')}</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('常用函数')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('函数')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr><td><span class="help-code">dr_catpos($catid, ...)</span></td><td>{dr_lang('面包屑导航')}</td></tr>
<tr><td><span class="help-code">dr_module_url($dir)</span></td><td>{dr_lang('模块首页地址')}</td></tr>
<tr><td><span class="help-code">dr_thumb($thumb)</span></td><td>{dr_lang('缩略图地址')}</td></tr>
<tr><td><span class="help-code">dr_get_file($id)</span></td><td>{dr_lang('附件/图片完整 URL')}</td></tr>
<tr><td><span class="help-code">dr_show_hits($id)</span></td><td>{dr_lang('详情页浏览量(自动计数)')}</td></tr>
<tr><td><span class="help-code">dr_strcut($str, $len)</span></td><td>{dr_lang('字符串截断')}</td></tr>
<tr><td><span class="help-code">dr_site_value('字段名')</span></td><td>{dr_lang('读取网站信息自定义字段')}</td></tr>
<tr><td><span class="help-code">dr_get_content_kws($keywords)</span></td><td>{dr_lang('关键词转 Tag 链接数组')}</td></tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('静态资源引用')}</h3>
<div class="help-feature-desc">
<pre class="help-pre">&lt;link href="&#123;HOME_THEME_PATH&#125;pc/css/style.bundle.css" rel="stylesheet" /&gt;
&lt;script src="&#123;HOME_THEME_PATH&#125;swiper/js/swiper.min.js"&gt;&lt;/script&gt;
&lt;link href="&#123;THEME_PATH&#125;assets/icon/css/icon.css" rel="stylesheet" /&gt;</pre>
<p><span class="help-code">{code}{HOME_THEME_PATH}{/code}</span> {dr_lang('指当前风格目录下的 static 资源;')}<span class="help-code">{code}{THEME_PATH}{/code}</span> {dr_lang('指系统后台公共资源。')}</p>
</div>
</div>
</div>
{/if}
{if $page==3}
<div class="help-section-body">
<p class="help-note">{dr_lang('推荐复制当前')} <span class="help-code">{SITE_TEMPLATE}</span> {dr_lang('模板再修改,可最大程度保证页面类型完整、标签调用正确。')}</p>
<ol class="help-steps">
<li class="help-step">
<span class="help-step-title">{dr_lang('第一步:复制模板目录')}</span>
<p class="help-step-desc">
<span class="help-code">template/pc/{SITE_TEMPLATE}/</span> 复制为新目录(如 <span class="help-code">mytpl</span>);
手机端同步复制 <span class="help-code">template/mobile/{SITE_TEMPLATE}/</span><span class="help-code">template/mobile/mytpl/</span>
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第二步:复制静态资源')}</span>
<p class="help-step-desc">
<span class="help-code">static/{SITE_THEME}/</span> 复制为 <span class="help-code">static/mytpl/</span>
修改模板中的样式、图片路径均相对于 <span class="help-code">{code}{HOME_THEME_PATH}{/code}</span>
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第三步:修改模板文件')}</span>
<p class="help-step-desc">
至少保留 <span class="help-code">index.html</span><span class="help-code">list.html</span>
<span class="help-code">show.html</span><span class="help-code">header.html</span><span class="help-code">footer.html</span>
按需调整 HTML 结构与 <span class="help-code">{code}{module}{/code}</span><span class="help-code">{code}{category}{/code}</span> {dr_lang('标签调用')}。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第四步:后台启用')}</span>
<p class="help-step-desc">
进入 <a class="help-link" href="{dr_url('module/site_config/index')}">网站设置</a>
将「模板目录」改为 <span class="help-code">mytpl</span>,「主题风格」改为 <span class="help-code">mytpl</span> 并保存;
<a class="help-link" href="{dr_url('module/site_mobile/index')}">手机设置</a> 中同步选择对应风格。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第五步:验证前台')}</span>
<p class="help-step-desc">
依次访问首页、栏目列表、内容详情、搜索页,确认布局与数据正常;
修改模板后刷新浏览器即可,无需更新系统缓存(URL/栏目结构变更除外)。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第六步:模块/栏目定制(可选)')}</span>
<p class="help-step-desc">
某模块需独立风格时,在 <a class="help-link" href="{dr_url('module/module/index')}">模块管理</a> 设置模块主题风格;
某栏目需特殊列表/详情页时,在栏目编辑的「模板设置」中指定模板文件名。
</p>
</li>
</ol>
<div class="help-feature" style="margin-top:20px;">
<h3 class="help-feature-title">{dr_lang('常见问题')}</h3>
<div class="help-feature-desc">
<ul>
<li><strong>{dr_lang('修改后无变化')}</strong>{dr_lang('确认模板目录(SITE_TEMPLATE)与主题风格(SITE_THEME)正确;清除浏览器缓存;若开启静态化需重新生成')}</li>
<li><strong>{dr_lang('样式丢失')}</strong>{dr_lang('检查 static/')}<span class="help-code">{SITE_THEME}</span>{dr_lang('/ 是否存在;模板中')} {code}{HOME_THEME_PATH}{/code} {dr_lang('路径是否正确')}</li>
<li><strong>{dr_lang('列表无数据')}</strong>{dr_lang('检查')} {code}{module}{/code} {dr_lang('的 module/catid 参数;确认栏目已绑定对应模块且有内容')}</li>
<li><strong>{dr_lang('导航不显示')}</strong>{dr_lang('共享栏目需 module=share;检查栏目「是否显示」开关')}</li>
</ul>
</div>
</div>
<div class="help-summary">
<strong>{dr_lang('参考')}</strong>
{dr_lang('当前站点模板位于')} <span class="help-code">{TPLPATH}pc/{SITE_TEMPLATE}/home/</span>
{dr_lang('可直接打开 index.html、list.html、show.html 对照学习。')}
</div>
</div>
{/if}
</div>
</div>
</div>
{template "footer.html"}
+240
View File
@@ -0,0 +1,240 @@
{template "header.html"}
<style>
.help-wrap { margin: 0 auto; padding: 10px 0 30px; color: #334155; line-height: 1.75; }
.help-note { margin: 0 0 16px; padding: 12px 16px; background: #f8fafc; border-left: 4px solid #2563eb; color: #475569; }
.help-feature { margin-bottom: 20px; padding: 16px 18px; background: #fff; border: 1px solid #e2e8f0; border-radius: 8px; }
.help-feature-title { margin: 0 0 10px; font-size: 16px; font-weight: 600; color: #1e293b; }
.help-feature-desc p { margin: 0 0 8px; }
.help-feature-desc ul { margin: 8px 0 0; padding-left: 20px; }
.help-feature-desc li { margin-bottom: 6px; }
.help-steps { margin: 0; padding-left: 22px; }
.help-step { margin-bottom: 18px; }
.help-step-title { display: block; margin-bottom: 6px; font-size: 15px; font-weight: 600; color: #1e293b; }
.help-step-desc { margin: 0; color: #475569; }
.help-summary { margin-top: 18px; padding: 14px 16px; background: #eff6ff; border-radius: 8px; color: #1e40af; }
.help-code { display: inline-block; margin: 2px 0; padding: 2px 8px; font-family: Consolas, monospace; font-size: 13px; background: #f1f5f9; border-radius: 4px; color: #0f172a; word-break: break-all; }
.help-pre { margin: 8px 0; padding: 12px 14px; font-family: Consolas, monospace; font-size: 13px; background: #0f172a; color: #e2e8f0; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; }
.help-table { width: 100%; margin: 8px 0; border-collapse: collapse; font-size: 13px; }
.help-table th, .help-table td { padding: 8px 10px; border: 1px solid #e2e8f0; text-align: left; vertical-align: top; }
.help-table th { background: #f8fafc; font-weight: 600; }
.help-link { color: #2563eb; text-decoration: none; }
.help-link:hover { text-decoration: underline; }
</style>
<div class="portlet light bordered">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="{dr_url('module/help/url', ['page' => 0])}"><i class="fa fa-info-circle"></i> {dr_lang('概述')}</a>
</li>
<li class="{if $page==1}active{/if}">
<a href="{dr_url('module/help/url', ['page' => 1])}"><i class="fa fa-tags"></i> {dr_lang('规则与通配符')}</a>
</li>
<li class="{if $page==2}active{/if}">
<a href="{dr_url('module/help/url', ['page' => 2])}"><i class="fa fa-list-ol"></i> {dr_lang('配置流程')}</a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="help-wrap">
{if $page==0}
<div class="help-section-body">
<p class="help-note">{dr_lang('自定义 URL 可将动态地址(如 index.php?s=news&c=show&id=1)转换为伪静态友好链接(如 news/show-1.html)。需同时配置「URL 规则」与服务器「伪静态解析」。')}</p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('动态地址 vs 自定义 URL')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('类型')}</th><th>{dr_lang('示例')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr>
<td>{dr_lang('动态地址')}</td>
<td><span class="help-code">index.php?s=news&amp;c=show&amp;id=1</span></td>
<td>{dr_lang('无需服务器 rewrite,开箱可用')}</td>
</tr>
<tr>
<td>{dr_lang('自定义 URL')}</td>
<td><span class="help-code">news/show-1.html</span></td>
<td>{dr_lang('需 URL 规则 + 伪静态解析 + 服务器配置')}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('规则绑定位置')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('绑定位置')}</th><th>{dr_lang('适用')}</th><th>{dr_lang('入口')}</th></tr>
</thead>
<tbody>
<tr>
<td>{dr_lang('全站 URL 规则')}</td>
<td>{dr_lang('共享模块栏目页、内容页(type=3')}</td>
<td><a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('站点SEO')}</a></td>
</tr>
<tr>
<td>{dr_lang('模块 URL 规则')}</td>
<td>{dr_lang('独立模块首页、栏目、内容、搜索(type=1)')}</td>
<td><a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('模块SEO')}</a></td>
</tr>
<tr>
<td>{dr_lang('搜索 URL 规则')}</td>
<td>{dr_lang('共享模块搜索页(type=2')}</td>
<td><a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('模块SEO')}</a>{dr_lang('共享模块')}</td>
</tr>
<tr>
<td>{dr_lang('URL 规则管理')}</td>
<td>{dr_lang('创建、编辑、导入导出规则')}</td>
<td><a class="help-link" href="{dr_url('module/urlrule/index')}">{dr_lang('URL规则')}</a></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="help-summary">
<strong>{dr_lang('注意')}</strong>
{dr_lang('使用自定义 URL 后必须配置伪静态解析,否则页面无法正常打开。配置文件:')} <span class="help-code">/config/rewrite.php</span>
</div>
</div>
{/if}
{if $page==1}
<div class="help-section-body">
<p class="help-note">{dr_lang('在')} <a class="help-link" href="{dr_url('module/urlrule/index')}">{dr_lang('URL规则')}</a> {dr_lang('中添加规则时,按类别填写各页面 URL 格式;输入框旁的「提示」按钮可查看通配符说明。')}</p>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('URL 规则类别')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('类别')}</th><th>{dr_lang('包含页面')}</th></tr>
</thead>
<tbody>
<tr><td>{dr_lang('独立模块')}type=1</td><td>{dr_lang('模块首页、栏目页、栏目分页、内容页、内容分页、搜索页、搜索分页')}</td></tr>
<tr><td>{dr_lang('共享模块搜索')}type=2</td><td>{dr_lang('搜索页、搜索分页')}</td></tr>
<tr><td>{dr_lang('共享栏目和内容页')}type=3</td><td>{dr_lang('栏目页、栏目分页、内容页、内容分页')}</td></tr>
</tbody>
</table>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('常用通配符')}</h3>
<div class="help-feature-desc">
<table class="help-table">
<thead>
<tr><th>{dr_lang('通配符')}</th><th>{dr_lang('说明')}</th></tr>
</thead>
<tbody>
<tr><td>{code}{modname}{/code}</td><td>{dr_lang('模块目录名')}</td></tr>
<tr><td>{code}{id}{/code}</td><td>{dr_lang('栏目 ID 或内容 ID')}</td></tr>
<tr><td>{code}{dirname}{/code}</td><td>{dr_lang('栏目目录名称')}</td></tr>
<tr><td>{code}{pdirname}{/code}</td><td>{dr_lang('含上级的栏目目录路径')}</td></tr>
<tr><td>{code}{opdirname}{/code}</td><td>{dr_lang('父级栏目目录名')}</td></tr>
<tr><td>{code}{otdirname}{/code}</td><td>{dr_lang('顶级栏目目录名')}</td></tr>
<tr><td>{code}{page}{/code}</td><td>{dr_lang('分页页码')}</td></tr>
<tr><td>{code}{y}{/code} / {code}{m}{/code} / {code}{d}{/code}</td><td>{dr_lang('内容发布年/月/日')}</td></tr>
</tbody>
</table>
<p style="margin-top:10px;">{dr_lang('连接符号')} <span class="help-code">catjoin</span> {dr_lang('用于')} {code}{pdirname}{/code} {dr_lang('多级目录连接,默认为')} <span class="help-code">/</span>{dr_lang('如')} china/beijing)。</p>
</div>
</div>
<div class="help-feature">
<h3 class="help-feature-title">{dr_lang('规则示例')}</h3>
<div class="help-feature-desc">
<p><strong>{dr_lang('内容页')}</strong> — {dr_lang('默认')} <span class="help-code">index.php?s=news&amp;c=show&amp;id=1</span></p>
<pre class="help-pre">{code}show/{id}.html
{modname}/{y}/{m}{id}.html
{pdirname}/{id}.html{/code}</pre>
<p><strong>{dr_lang('栏目页')}</strong> — {dr_lang('默认')} <span class="help-code">index.php?s=news&amp;c=category&amp;id=1</span></p>
<pre class="help-pre">{code}{dirname}/{id}.html
{pdirname}/index.html
{modname}/list-{page}.html{/code}</pre>
<p><strong>{dr_lang('搜索页')}</strong></p>
<pre class="help-pre">{code}{modname}/search.html
{modname}/search-{page}.html{/code}</pre>
</div>
</div>
</div>
{/if}
{if $page==2}
<div class="help-section-body">
<p class="help-note">{dr_lang('完整启用自定义 URL 需四步:创建规则 → 绑定到站点/模块 → 生成伪静态解析 → 部署到 Web 服务器。')}</p>
<ol class="help-steps">
<li class="help-step">
<span class="help-step-title">{dr_lang('第一步:创建 URL 规则')}</span>
<p class="help-step-desc">
进入 <a class="help-link" href="{dr_url('module/urlrule/index')}">{dr_lang('URL规则')}</a> → {dr_lang('添加')}
选择类别(独立模块 / 共享搜索 / 共享栏目内容),
按页面类型填写 URL 格式,保存规则。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第二步:绑定规则')}</span>
<p class="help-step-desc">
共享模块:在 <a class="help-link" href="{dr_url('module/seo_site/index')}">{dr_lang('站点SEO')}</a> 的「全局设置URL规则」中选择 type=3 规则;
独立模块:在 <a class="help-link" href="{dr_url('module/seo_module/index')}">{dr_lang('模块SEO')}</a> 各模块 Tab 的「模块URL规则」中选择 type=1 规则;
共享搜索:在模块 SEO(共享模块)的「搜索URL规则」中选择 type=2 规则。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第三步:更新缓存')}</span>
<p class="help-step-desc">
绑定规则后执行系统缓存更新;
可在站点 SEO 页使用「批量更新内容URL」按模块刷新已有内容的链接地址。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第四步:伪静态解析')}</span>
<p class="help-step-desc">
进入 <a class="help-link" href="{dr_url('module/urlrule/rewrite_index')}">{dr_lang('伪静态解析')}</a>
点击「生成解析规则」,将代码写入 <span class="help-code">/config/rewrite.php</span>
再按页面提示在 Nginx / Apache / IIS 中配置 rewrite 规则;
使用「环境检测」验证各域名是否支持伪静态。
</p>
</li>
<li class="help-step">
<span class="help-step-title">{dr_lang('第五步:验证')}</span>
<p class="help-step-desc">
访问前台栏目列表、内容详情、搜索页,确认链接已为自定义格式且页面正常打开;
若 404,检查 rewrite 配置与 <span class="help-code">rewrite.php</span> 是否匹配当前 URL 规则。
</p>
</li>
</ol>
<div class="help-feature" style="margin-top:20px;">
<h3 class="help-feature-title">{dr_lang('常见问题')}</h3>
<div class="help-feature-desc">
<ul>
<li><strong>{dr_lang('自定义 URL 后 404')}</strong>{dr_lang('检查伪静态解析是否生成并部署;Nginx 需 reloadApache 需开启 mod_rewrite')}</li>
<li><strong>{dr_lang('链接仍是动态地址')}</strong>{dr_lang('确认规则已绑定;更新缓存;批量更新内容 URL')}</li>
<li><strong>{dr_lang('部分页面正常部分 404')}</strong>{dr_lang('检查规则类别是否选对(独立模块用 type=1,共享内容用 type=3')}</li>
<li><strong>{dr_lang('多站点/多域名')}</strong>{dr_lang('伪静态解析页按域名分别检测;各域名 rewrite 配置需一致')}</li>
</ul>
</div>
</div>
<div class="help-summary">
<strong>{dr_lang('相关')}</strong>
{dr_lang('页面 title/meta 配置见')}
<a class="help-link" href="{dr_url('module/help/seo')}">{dr_lang('SEO用法')}</a>
</div>
</div>
{/if}
</div>
</div>
</div>
{template "footer.html"}
@@ -0,0 +1,70 @@
{template "header.html"}
<script>
function dr_update_category_cache() {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid={$mid}",
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
</script>
<div class="note note-danger">
<p>{dr_lang('栏目模型字段需要划分到具体的某一个栏目上')}</p>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="portlet bordered light myfbody">
<div class="portlet-body form">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('分配勾选权限')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="hide" value="1" {if $hide}checked{/if} /> {dr_lang('勾选时隐藏以下字段,没有选择时都显示')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="hide" value="0" {if empty($hide)}checked{/if} /> {dr_lang('勾选时显示以下字段,没有选择时不显示')} <span></span></label>
</div>
</div>
</div>
{loop $list $t}
<div class="form-group">
<label class="col-md-2 control-label">{$t.name} / {$t.fieldname}</label>
<div class="col-md-9" id="multi-select" >
{$t.select}
</div>
</div>
{/loop}
</div>
{if !$list}
<div class="alert"> {dr_lang('你没有创建自定义栏目模型字段')} </div>
{/if}
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000')" class="btn green"> <i class="fa save"></i> {dr_lang('保存')} </button></label>
<label><a class="btn blue" href="javascript:dr_update_category_cache();">{dr_lang('一键更新栏目缓存')}</a></label>
</div>
</div>
</form>
</div>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
{template "footer.html"}
+76
View File
@@ -0,0 +1,76 @@
{template "header.html"}
{if IS_DEV}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('模块设置')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group" id="dr_row_name">
<label class="col-md-2 control-label ">{dr_lang('模块名称')}</label>
<div class="col-md-9">
<label><input type="text" class="form-control" id="dr_name" name="data[name]"></label>
<span class="help-block"> {dr_lang('模块的描述名称')} </span>
</div>
</div>
<div class="form-group" id="dr_row_dirname">
<label class="col-md-2 control-label ">{dr_lang('目录名称')}</label>
<div class="col-md-9">
<label><input type="text" class="form-control" id="dr_dirname" name="data[dirname]" value=""></label>
<span class="help-block"> {dr_lang('只能由字母构成')} </span>
</div>
</div>
<div class="form-group" id="dr_row_icon">
<label class="col-md-2 control-label ">{dr_lang('模块图标')}</label>
<div class="col-md-9">
<div class="input-group" style="width:250px">
<input class="form-control" id="dr_icon" placeholder="fa fa-code" type="text" name="data[icon]" />
<span class="input-group-btn">
<a class="btn btn-success" href="{dr_url('api/icon')}" target="_blank"><i class="fa fa-arrow-right fa-fw" /></i> {dr_lang('查看')}</a>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label ">{dr_lang('模块位置')}</label>
<div class="col-md-9">
<p class="form-control-static"> {APPSPATH}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('创建模块')}</button></label>
</div>
</div>
</form>
{else}
<div class="note note-danger">
<p>当前环境没有开启开发者模式,不允许创建模块;</p>
<p>新手用户不建议创建多个模块,一个news模块足以进行建站项目。</p>
</div>
{/if}
{template "footer.html"}
+331
View File
@@ -0,0 +1,331 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<input type="hidden" name="data[setting][module_category_hide]" value="{intval($data['setting']['module_category_hide'])}">
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('模块设置')} </a>
</li>
<li class="{if $page==3}active{/if}">
<a href="#tab_3" data-toggle="tab" onclick="$('#dr_page').val('3')"> <i class="fa fa-table"></i> {dr_lang('后台列表')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
{if !$data.share}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('首页静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][module_index_html]" value="1" {if $data['setting']['module_index_html']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][module_index_html]" value="0" {if empty($data['setting']['module_index_html'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启之后当前模块的首页将会自动生成静态文件')}</span>
</div>
</div>
{/if}
{if !$is_hcategory}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('同步其他栏目')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][sync_category]" value="1" {if $data['setting']['sync_category']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][sync_category]" value="0" {if empty($data['setting']['sync_category'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('将内容同步发布到其他的栏目之中')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('父栏目发布权限')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][pcatpost]" value="1" {if $data['setting']['pcatpost']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][pcatpost]" value="0" {if empty($data['setting']['pcatpost'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('允许父栏目(即封面栏目)可投稿,栏目封面模板可支持分页功能')}</span>
</div>
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('更新时间字段勾选状态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][updatetime_select]" value="0" {if empty($data['setting']['updatetime_select'])}checked{/if} /> {dr_lang('默认不勾选')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][updatetime_select]" value="1" {if $data['setting']['updatetime_select']}checked{/if} /> {dr_lang('默认勾选')} <span></span></label>
</div>
<span class="help-block">{dr_lang('在后台内容编辑时的更新时间字段,是否勾选"不更新",不勾选时将自动更新为当前时间')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('Merge分组字段摆放')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][merge]" value="0" {if empty($data['setting']['merge'])}checked{/if} /> {dr_lang('同页方式')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][merge]" value="1" {if $data['setting']['merge']}checked{/if} /> {dr_lang('Tab页方式')} <span></span></label>
</div>
<span class="help-block">{dr_lang('在后台编辑界面中,多行分组字段Merge的展示方式')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容发布界面右侧字段')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][right_field]" value="0" {if empty($data['setting']['right_field'])}checked{/if} /> {dr_lang('都显示')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][right_field]" value="1" {if $data['setting']['right_field']==1}checked{/if} /> {dr_lang('仅超管显示')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][right_field]" value="2" {if $data['setting']['right_field']==2}checked{/if} /> {dr_lang('都不显示')} <span></span></label>
</div>
<span class="help-block">{dr_lang('内容发布界面右侧字段是一些内置的系统字段,例如发布时间、更新时间、客户端、用户信息等')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('自动填充内容描述')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][desc_auto]" value="0" {if empty($data['setting']['desc_auto'])}checked{/if} /> {dr_lang('自动填充')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][desc_auto]" value="1" {if $data['setting']['desc_auto']}checked{/if} /> {dr_lang('手动填充')} <span></span></label>
</div>
<span class="help-block">{dr_lang('当描述为空时,系统提取内容中的文字来填充描述字段')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('提取内容描述字数')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[setting][desc_limit]" value="{if $data['setting']['desc_limit']}{intval($data['setting']['desc_limit'])}{else}100{/if}" ></label>
<span class="help-block">{dr_lang('在内容中提取描述信息的最大字数限制')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('更新URL地址分页量')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[setting][update_psize]" value="{if $data['setting']['update_psize']}{intval($data['setting']['update_psize'])}{else}100{/if}" ></label>
<span class="help-block">{dr_lang('更新URL地址时,每页更新多少条记录,设置越大更新次数越小')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('关键词最大数量')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[setting][kws_limit]" value="{if $data['setting']['kws_limit']}{intval($data['setting']['kws_limit'])}{else}10{/if}" ></label>
<span class="help-block">{dr_lang('keywords字段的关键词数量限制')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('清理描述中的空格')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][desc_clear]" value="0" {if empty($data['setting']['desc_clear'])}checked{/if} /> {dr_lang('不清理')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][desc_clear]" value="1" {if $data['setting']['desc_clear']}checked{/if} /> {dr_lang('清理空格')} <span></span></label>
</div>
<span class="help-block">{dr_lang('提取描述字段时是否情况空格符号,一般英文站点不需要清理空格')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('随机阅读数')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<div class="input-inline input-small">
<div class="input-group">
<span class="input-group-addon">{dr_lang('最小')}</span>
<input type="text" name="data[setting][hits_min]" value="{$data['setting']['hits_min']}" class="form-control" placeholder="">
</div>
</div>
<div class="input-inline input-small">
<div class="input-group">
<span class="input-group-addon">{dr_lang('最大')}</span>
<input type="text" name="data[setting][hits_max]" value="{$data['setting']['hits_max']}" class="form-control" placeholder="">
</div>
</div>
</div>
<span class="help-block">{dr_lang('在后台发布时对阅读数进行随机赋值,设置最小和最大值,再其区间内随机值')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('批量审核时最大数量控制')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[setting][verify_num]" value="{if $data['setting']['verify_num']}{intval($data['setting']['verify_num'])}{else}10{/if}" ></label>
<span class="help-block">{dr_lang('批量审核数量不建议设置太多,太多容易导致失败的情况')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('拒绝审核理由')}</label>
<div class="col-md-9">
<textarea class="form-control" style="height:150px; width:100%;" name="data[setting][verify_msg]">{$data['setting']['verify_msg']}</textarea>
<span class="help-block">{dr_lang('用于后台审核内容时,可选择常用的拒绝审核理由,一行一个')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('删除内容理由')}</label>
<div class="col-md-9">
<textarea class="form-control" style="height:150px; width:100%;" name="data[setting][delete_msg]">{$data['setting']['delete_msg']}</textarea>
<span class="help-block">{dr_lang('用于后台删除内容时,可选择常用的理由,一行一个')}</span>
</div>
</div>
</div>
</div>
<div class="tab-pane {if $page==3}active{/if}" id="tab_3">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表搜索框')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_hide_search_bar]" value="0" {if empty($data['setting']['is_hide_search_bar'])}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_hide_search_bar]" value="1" {if $data['setting']['is_hide_search_bar']}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启后,当进入列表时直接显示搜索框;关闭后,需要点右上角的搜索按钮才会出现')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表默认排序')}</label>
<div class="col-md-9">
<label><input class="form-control input-xlarge" type="text" name="data[setting][order]" value="{if $data['setting']['order']}{htmlspecialchars((string)$data['setting']['order'])}{else}updatetime DESC{/if}" ></label>
<span class="help-block">{dr_lang('排序格式符号MySQL的语法,例如:主表字段 desc')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表时间搜索')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[setting][search_time]" value="{if $data['setting']['search_time']}{htmlspecialchars((string)$data['setting']['search_time'])}{else}updatetime{/if}" ></label>
<span class="help-block">{dr_lang('设置后台时间范围搜索字段,默认为更新时间字段:updatetime')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表默认搜索字段')}</label>
<div class="col-md-9">
<label><select name="data[setting][search_first_field]" class="form-control">
{loop $field $t}
{if dr_is_admin_search_field($t)}
<option value="{$t.fieldname}" {if $data['setting']['search_first_field']==$t.fieldname}selected{/if}>{dr_lang($t.name)}</option>
{/if}
{/loop}
<option value="id" {if $data['setting']['search_first_field']=='id'}selected{/if}> Id </option>
</select></label>
<span class="help-block">{dr_lang('设置后台列表的默认搜索字段,也就是第一个选中的字段')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表操作列收缩')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_op_more]" value="1" {if ($data['setting']['is_op_more'])}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_op_more]" value="0" {if empty($data['setting']['is_op_more'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启后,当列表记录的操作按钮过多时,会出现更多按钮,并按下拉方式展开')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表显示字段')}</label>
<div class="col-md-9">
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th class="myselect">
{dr_lang('显示')}
</th>
<th width="180"> {dr_lang('字段')} </th>
<th width="150"> {dr_lang('名称')} </th>
<th width="100"> {dr_lang('宽度')} </th>
<th width="140"> {dr_lang('对齐方式')} </th>
<th> {dr_lang('回调方法')} </th>
</tr>
</thead>
<tbody class="field-sort-items">
{loop $field $n $t}
{if $t.fieldname && ((dr_is_app('fstatus') && $t.fieldname != 'fstatus') || !dr_is_app('fstatus'))}
<tr class="odd gradeX">
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="data[setting][list_field][{$t.fieldname}][use]" value="1" {if $data['setting']['list_field'][$t.fieldname]['use']} checked{/if} />
<span></span>
</label>
</td>
<td>{dr_lang($t.name)} ({$t.fieldname})</td>
<td><input class="form-control" type="text" name="data[setting][list_field][{$t.fieldname}][name]" value="{php echo $data['setting']['list_field'][$t.fieldname]['name'] ? htmlspecialchars($data['setting']['list_field'][$t.fieldname]['name']) : $t.name}" /></td>
<td> <input class="form-control" type="text" name="data[setting][list_field][{$t.fieldname}][width]" value="{htmlspecialchars((string)$data['setting']['list_field'][$t.fieldname]['width'])}" /></td>
<td><input type="checkbox" name="data[setting][list_field][{$t.fieldname}][center]" {if $data['setting']['list_field'][$t.fieldname]['center']} checked{/if} value="1" data-on-text="{dr_lang('居中')}" data-off-text="{dr_lang('默认')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
</td>
<td> <div class="input-group" style="width:250px">
<span class="input-group-btn">
<a class="btn btn-success" href="javascript:dr_call_alert();">{dr_lang('回调')}</a>
</span>
<input class="form-control" type="text" name="data[setting][list_field][{$t.fieldname}][func]" value="{htmlspecialchars((string)$data['setting']['list_field'][$t.fieldname]['func'])}" />
</div></td>
</tr>
{/if}
{/loop}
</tbody>
</table>
</div>
<span class="help-block">{dr_lang('拖动字段可以进行顺序排列')}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label> <button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button></label>
</div>
</div>
</form>
<script type="text/javascript">
$(function() {
dr_theme({$is_theme});
$(".field-sort-items").sortable();
});
function dr_theme(id) {
if (id == 1) {
$("#dr_theme_html").html($("#dr_web").html());
} else {
$("#dr_theme_html").html($("#dr_local").html());
}
}
</script>
<div id="dr_local" style="display: none">
<label class="col-md-2 control-label">{dr_lang('主题风格')}</label>
<div class="col-md-9">
<label><select class="form-control" name="site[theme]">
<option value="default"> -- </option>
{loop $theme $t}
<option{if $t==$site['theme']} selected=""{/if} value="{$t}">{$t}</option>
{/loop}
</select></label>
<span class="help-block">{dr_lang('位于项目主站根目录下:/static/风格名称/')}</span>
</div>
</div>
<div id="dr_web" style="display: none">
<label class="col-md-2 control-label">{dr_lang('远程资源')}</label>
<div class="col-md-9">
<input class="form-control input-xlarge" type="text" placeholder="http://" name="site[theme]" value="{php echo dr_strpos($site['theme'], 'http') === 0 ? $site['theme'] : '';}">
<span class="help-block">{dr_lang('项目将调用此地址的css,js,图片等静态资源')}</span>
</div>
</div>
{template "footer.html"}
+105
View File
@@ -0,0 +1,105 @@
{template "header.html"}
<div class="note note-danger">
<p>{dr_lang('推荐位是对内容进行推荐分类,方便前端数据调用,例如:首页头条、幻灯推荐、频道推荐等')}</p>
</div>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
<div class="right-card-box">
<form class="form-horizontal myfbody" role="form" id="myform">
{$form}
<div class="table-scrollable">
<table class="table table-noborder table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th width="40"> Id </th>
<th width="250"> {dr_lang('名称')} </th>
<th width="180"> <a href="{dr_url('api/icon')}" target="_blank"><i class="fa fa-arrow-right fa-fw" /></i> {dr_lang('图标')} </a></th>
<th> {dr_lang('后台角色使用权限')}</th>
</tr>
</thead>
<tbody>
{loop $flag $i $t}
<tr class="odd gradeX">
<td>{$i}</td>
<td><input class="form-control" name="flag[{$i}][name]" type="text" value="{htmlspecialchars((string)$t['name'])}" placeholder="{dr_lang('推荐位名称')}"></td>
<td><input class="form-control" type="text" name="flag[{$i}][icon]" value="{htmlspecialchars((string)$t['icon'])}" placeholder="{dr_lang('fa fa-user')}" />
</td>
<td style="overflow: inherit;">
<label style="min-width: 200px">
<select class="form-control bs-select" name="role[{$i}][]" multiple data-actions-box="true">
{loop $role $a}
{if $a.id>1}
<option {if isset($t['role'][$a['id']]) && $t['role'][$a['id']]} selected{/if} value="{$a.id}">{dr_lang($a.name)}</option>
{/if}
{/loop}
</select>
</label>
</td>
</tr>
{/loop}
{php $i++;}
<tr class="odd gradeX">
<td>{$i}</td>
<td><input class="form-control" name="flag[{$i}][name]" type="text" value="" placeholder="{dr_lang('新增推荐位')}"></td>
<td><input class="form-control" type="text" name="flag[{$i}][icon]" value="" placeholder="{dr_lang('fa fa-user')}" />
</td>
<td>
</td>
</tr>
</tbody>
</table>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
</div>
<script type="text/javascript">
function dr_set_flag(id) {
var url = '{dr_url("module/module/flag_save_edit")}&id='+id;
$(".dr_flag_"+id).each(function(){
url+= '&data['+ $(this).attr('iid')+']='+ $(this).val()
});
layer.open({
type: 2,
title: '{dr_lang('后台权限设置')}',
shadeClose: true,
shade: 0.3,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '\'500px\', \'50%\'' : '"95%", "90%"'}],
btn: [lang['ok']],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$(".dr_flag_"+id).each(function(){
var iid = $(this).attr('iid');
$("#dr_flag_"+id+"_"+iid).val($(body).find('#top_dr_flag_'+iid).val());
});
$("#dr_status_"+id).html(" <i class='fa fa-check-square'></i>");
return false;
},
success: function(layero, index){
// 主要用于后台权限验证
dr_iframe_error(layer, index, 1);
$(".dr_flag_"+id).each(function(){
var iid = $(this).attr('iid');
$(body).find('#top_dr_flag_'+iid).val(Math.abs($("#dr_flag_"+id+"_"+iid).val()));
});
},
content: url+'&is_iframe=1'
});
}
</script>
{template "footer.html"}
+87
View File
@@ -0,0 +1,87 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('更改配置之后需要更新缓存之后才能生效')}</a></p>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th width="50" style="text-align:center"> {dr_lang('可用')} </th>
<th width="70" style="text-align:center"> {dr_lang('排序')} </th>
<th width="60" style="text-align:center"> {dr_lang('类型')} </th>
<th width="200"> {dr_lang('名称')} / {dr_lang('目录')}</th>
<th> {dr_lang('操作')} </th>
</tr>
</thead>
<tbody>
{loop $my $t}
<tr class="odd gradeX">
<td style="text-align:center">
<a href="javascript:;" onclick="dr_ajax_open_close(this, '{dr_url('module/module/hidden_edit', ['id'=>$t.id])}', 1);" class="badge badge-{if $t.disabled}no{else}yes{/if}"><i class="fa fa-{if $t.disabled}times{else}check{/if}"></i></a>
</td>
<td style="text-align:center">
<input type="text" onblur="dr_ajax_save(this.value, '{dr_url('module/module/displayorder_edit', ['id'=>$t.id])}')" value="{$t.displayorder}" class="displayorder form-control input-sm input-inline input-mini">
</td>
<td style="text-align:center">
{if !$t.system}
<span class="badge badge-warning badge-roundless"> {dr_lang('应用')} </span>
{else}
{if $t.share}
<span class="badge badge-success badge-roundless"> {dr_lang('共享')} </span>
{else}
<span class="badge badge-info badge-roundless"> {dr_lang('独立')} </span>
{/if}
{/if}
</td>
<td><a {if !$t.share}href="{WEB_DIR}index.php?s={$t.dirname}" target="_blank"{/if}>{$t.name} / {$t.dirname}</a></td>
<td>
{if $t.install}
{if $ci->_is_admin_auth('edit')}
<label><a class="btn btn-xs red" href="javascript:dr_iframe('{dr_lang("变更名称")}', '{dr_url("module/module/name_edit", ['dir'=>$t.dirname])}', '450px', '300px');"><i class="fa fa-edit"></i> {dr_lang('更名')}</a></label>
<label><a href="{dr_url('module/module/edit', ['id'=>$t.id])}" class="btn btn-xs green"> <i class="fa fa-cog"></i> {dr_lang('配置')} </a></label>
{if is_file(dr_get_app_dir($t.dirname).'Controllers/Admin/Param.php')}
<label><a href="javascript:top.dr_iframe_show('{dr_lang('自定义设置')}','{dr_url($t.dirname.'/param/index')}&is_menu=1', '80%', '90%');" class="btn btn-xs blue"> <i class="fa fa-cogs"></i> {dr_lang('自定义')} </a></label>
{/if}
<label><a href="{dr_url('module/module/flag_edit', ['id'=>$t.id])}" class="btn btn-xs dark"> <i class="fa fa-flag"></i> {dr_lang('推荐位')} </a></label>
{if dr_is_app('mform')}<label><a href="{dr_url('mform/module/index')}" class="btn btn-xs blue"> <i class="fa fa-list"></i> {dr_lang('模块表单')} </a></label>{/if}
{/if}
{if $ci->_is_admin_auth()}
<label><a href="javascript:top.dr_iframe_show('{dr_lang('模块内容字段')}','{dr_url('field/index', ['rname'=>'module', 'rid'=>$t.id])}&is_menu=1', '80%', '90%');" class="btn btn-xs green"> <i class="fa fa-code"></i> {dr_lang('模块内容字段')} </a></label>
<label><a href="{dr_url('module/module_category/field_index', ['dir'=>$t.dirname])}" class="btn btn-xs dark"> <i class="fa fa-reorder"></i> {dr_lang('栏目模型字段')} </a></label>
<label><a href="javascript:dr_load_ajax('{dr_lang('确定将此模块从当前项目中删除吗?')}', '{dr_url('module/module/uninstall', ['dir'=>$t.dirname])}', 1);" class="btn btn-xs red"> <i class="fa fa-trash"></i> {dr_lang('释放')} </a></label>
{/if}
{else}
{if $ci->_is_admin_auth()}
<label><a href="javascript:dr_install_module('{dr_url('module/module/install', ['dir'=>$t.dirname])}', '{intval($t.inde)}');" class="btn btn-xs blue"> <i class="fa fa-plus"></i> {dr_lang('装载')} </a></label>
{/if}
{/if}
</td>
</tr>
{/loop}
{if $ci->_is_admin_auth()}
{loop $list $t}
<tr class="odd gradeX">
<td style="text-align:center"> -- </td>
<td style="text-align:center"> -- </td>
<td style="text-align:center"> -- </td>
<td>{$t.name} / {$t.dirname}</td>
<td>
<label><a href="javascript:{if !$t.mtype}dr_install_module_select{else}dr_install_module{/if}('{dr_url('module/module/install', ['dir'=>$t.dirname])}');" class="btn btn-xs blue"> <i class="fa fa-plus"></i> {dr_lang('装载')} </a></label>
<label><a href="javascript:dr_iframe('{dr_lang('删除提示')}', '{dr_url('cloud/app_delete', ['dir'=>$t.dirname])}', '600px', '320px');" class="btn btn-xs red"> <i class="fa fa-close"></i> {dr_lang('删除')} </a></label>
</td>
</tr>
{/loop}
{/if}
</tbody>
</table>
</div>
</form>
</div>
{template "footer.html"}
@@ -0,0 +1,33 @@
{template "header.html"}
<form class="form-horizontal" method="post" role="form" id="myform">
{$form}
<div class="form-body">
<div class="form-group">
<label class="col-xs-3 control-label ajax_name">{dr_lang('名称')}</label>
<div class="col-xs-7">
<input type="text" class="form-control" name="data[name]" value="{$config.name}">
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label ajax_name">{dr_lang('图标')}</label>
<div class="col-xs-7">
<div class="input-group" style="width:250px">
<input class="form-control" value="{$config.icon}" placeholder="fa fa-code" type="text" name="data[icon]" />
<span class="input-group-btn">
<a class="btn btn-success" href="{dr_url('api/icon')}" target="_blank"><i class="fa fa-arrow-right fa-fw" /></i> {dr_lang('查看')}</a>
</span>
</div>
</div>
</div>
</div>
</form>
{template "footer.html"}
+238
View File
@@ -0,0 +1,238 @@
{template "header.html"}
<div class="form-horizontal">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
{loop $module $dir $t}
<li class="{if $page == $dir}active{/if}">
<a href="#tab_{$dir}" data-toggle="tab" onclick="$('#dr_page').val('{$dir}')"> <i class="{dr_icon($t.icon)}"></i> {$t.name} </a>
</li>
{/loop}
</ul>
</div>
<input type="hidden" id="dr_page" value="{$page}">
<div class="portlet-body">
<div class="tab-content">
{loop $module $dir $m}
{php $i=$dir;}
<div class="tab-pane {if $page==$dir}active{/if}" id="tab_{$dir}">
<form method="post" name="myform_{$dir}" id="myform_{$dir}">
{$form}
<div class="tab-pane {if $i == $page}active{/if}" id="tab_{$i}">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label" style="padding-top: 10px;">{dr_lang('搜索功能')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][use]" value="1" {if $m['setting']['search']['use']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][use]" value="0" {if empty($m['setting']['search']['use'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('选择关闭将不能进行内容搜索')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('集成栏目页')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][catsync]" value="1" {if $m['setting']['search']['catsync']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][catsync]" value="0" {if empty($m['setting']['search']['catsync'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('访问栏目页会定向到搜索页面,使栏目模板无效')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('集成模块首页')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][indexsync]" value="1" {if $m['setting']['search']['indexsync']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][indexsync]" value="0" {if empty($m['setting']['search']['indexsync'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('访问模块首页会定向到搜索页面,使模块首页模板无效')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('搜索结果为空时不显示SEO')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][show_seo]" value="0" {if empty($m['setting']['search']['show_seo'])}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][show_seo]" value="1" {if $m['setting']['search']['show_seo']}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('当搜索结果为空时,seo信息中不显示搜索参数')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索结果为空时跳转404')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][search_404]" value="1" {if $m['setting']['search']['search_404']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][search_404]" value="0" {if empty($m['setting']['search']['search_404'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启后遇到搜索内容为空时直接跳转404页面')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索参数为空时不显示结果')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][search_param]" value="1" {if $m['setting']['search']['search_param']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][search_param]" value="0" {if empty($m['setting']['search']['search_param'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('默认情况下在搜索参数为空时会显示全部结果')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('关键词匹配字段')}</label>
<div class="col-md-9">
<div class="mt-checkbox-inline">
<label class="mt-checkbox mt-checkbox-outline"><input type="checkbox" name="search_field[{$i}][]" value="id" {if dr_in_array('id', (array)explode(',', $m['setting']['search']['field']))} checked{/if} /> ID<span></span></label>
{loop $m.field $f}
<label class="mt-checkbox mt-checkbox-outline"><input type="checkbox" name="search_field[{$i}][]" value="{$f.fieldname}" {if dr_in_array($f.fieldname, (array)explode(',', $m['setting']['search']['field']))} checked{/if} /> {dr_lang($f.name)} {$f.fieldname}<span></span></label>
{/loop}
</div>
<span class="help-block">{dr_lang('搜索关键词匹配字段只能设置主表字段,勾选字段越多查询速度就越慢')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('关键词匹配方式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][complete]" value="1" {if $m['setting']['search']['complete']}checked{/if} /> {dr_lang('完整匹配')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][complete]" value="0" {if !$m['setting']['search']['complete']}checked{/if} /> {dr_lang('模糊匹配')} <span></span></label>
</div>
<span class="help-block">{dr_lang('完整匹配是关键词绝对相同才视为匹配;模糊匹配是关键词包含其中才视为匹配')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('字段词匹配方式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][is_like]" value="0" {if !$m['setting']['search']['is_like']}checked{/if} /> {dr_lang('完整匹配')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][is_like]" value="1" {if $m['setting']['search']['is_like']}checked{/if} /> {dr_lang('模糊匹配')} <span></span></label>
</div>
<span class="help-block">{dr_lang('与关键词匹配方式选项相同,按字段作为搜索条件时,字段词与数据库储存词的匹配方式')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('多值匹配方式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][is_double_like]" value="1" {if $m['setting']['search']['is_double_like']}checked{/if} /> {dr_lang('AND匹配')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[{$i}][is_double_like]" value="0" {if !$m['setting']['search']['is_double_like']}checked{/if} /> {dr_lang('OR匹配')} <span></span></label>
</div>
<span class="help-block">{dr_lang('字段的多值匹配模式下的多条件查询关系')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('最大搜索结果数量')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[{$i}][max]" value="{if $m['setting']['search']['max']}{$m['setting']['search']['max']}{else}0{/if}" ></label>
<span class="help-block">{dr_lang('搜索结果最大数据量限制,0表示不限制结果数量')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('最小关键字长度')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[{$i}][length]" value="{if $m['setting']['search']['length']}{$m['setting']['search']['length']}{else}0{/if}" ></label>
<span class="help-block">{dr_lang('搜索关键字最小字符长度,一个汉字占两位,0表示不限制长度')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('最大关键字长度')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[{$i}][maxlength]" value="{if $m['setting']['search']['maxlength']}{$m['setting']['search']['maxlength']}{else}0{/if}" ></label>
<span class="help-block">{dr_lang('搜索关键字最大字符长度,一个汉字占两位,0表示不限制长度')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('搜索参数连接符号')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[{$i}][param_join]" value="{if $m['setting']['search']['param_join']}{$m['setting']['search']['param_join']}{else}-{/if}" ></label>
<span class="help-block">{dr_lang('用于伪静态时搜索参数的连接,默认-,例如: 字段1-值-字段2-值')}</span>
</div>
</div>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('搜索参数字符串规则')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input onclick="$('.param_rule_{$i}_0').hide();$('.param_rule_{$i}_1').show()" type="radio" name="data[{$i}][param_rule]" value="1" {if $m['setting']['search']['param_rule']}checked{/if} /> {dr_lang('固定匹配')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input onclick="$('.param_rule_{$i}_0').show();$('.param_rule_{$i}_1').hide()" type="radio" name="data[{$i}][param_rule]" value="0" {if !$m['setting']['search']['param_rule']}checked{/if} /> {dr_lang('自由组合')} <span></span></label>
</div>
</div>
</div>
<div class="form-group dr_search param_rule_{$i}_0" style="display: none;">
<label class="col-md-2 control-label">{dr_lang('自由组合字段映射关系')}</label>
<div class="col-md-9">
<textarea class="form-control" rows="7" name="data[{$i}][param_field]">{$m['setting']['search']['param_field']}</textarea>
<span class="help-block">{dr_lang('字段映射是指伪静态时将搜索字段重新命名,字段全称|缩写字母,例如keyword|k: 意思是把k作为keyword,多个字段映射回车符号分隔')}</span>
</div>
</div>
<div class="form-group dr_search param_rule_{$i}_1" style="display: none;">
<label class="col-md-2 control-label">{dr_lang('固定匹配字段参数设置')}</label>
<div class="col-md-9">
{php $c=0;}
{loop $m.search_field $k1 $f1}
<label><select name="data[{$i}][param_join_field][{$c}]" class="form-control">
<option value="">-</option>
{loop $m.search_field $k $f}
<option value="{$k}" {if $k == $m['setting']['search']['param_join_field'][$c]} selected{/if}>{dr_lang($f)}{$k}</option>
{/loop}
</select></label>
{php $c++;}
{/loop}
<span class="help-block">{dr_lang('由一组固定的字符串参数作为搜索变量,例如:栏目id-城市-分类-搜索词-排序-分页.html')}</span>
</div>
</div>
<div class="form-group dr_search param_rule_{$i}_1" style="display: none;">
<label class="col-md-2 control-label">{dr_lang('匹配字段默认填充值')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[{$i}][param_join_default_value]" value="{if $m['setting']['search']['param_join_default_value']}{$m['setting']['search']['param_join_default_value']}{else}0{/if}" ></label>
<span class="help-block">{dr_lang('搜索变量为空时的填充值,例如:0-0-0-搜索词-排序-分页.html')}</span>
</div>
</div>
<script>
$('.param_rule_{$i}_{intval($m['setting']['search']['param_rule'])}').show();
</script>
<div class="form-group dr_search">
<label class="col-md-2 control-label">{dr_lang('按字段参数值指定模板')}</label>
<div class="col-md-9">
<label><select name="data[{$i}][tpl_field]" class="form-control">
<option value="">{dr_lang('默认模板')}</option>
{loop $m.search_field $k $f}
<option value="{$k}" {if $k == $m['setting']['search']['tpl_field']} selected{/if}>{dr_lang($f)}{$k}</option>
{/loop}
</select></label>
<span class="help-block">{dr_lang('用于按字段参数值显示不同的搜索模板文件,模板命名格式为:%s', $i.'/search_字段参数值.html')}</span>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">&nbsp;</label>
<div class="col-md-9">
<button type="button" onclick="dr_ajax_submit('{$m.save_url}', 'myform_{$dir}', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存当前模块')}</button>
</div>
</div>
</form>
</div>
{/loop}
</div>
</div>
</div>
</div>
{template "footer.html"}
+190
View File
@@ -0,0 +1,190 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('设置全站SEO规则')}</a></p>
</div>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="active">
<a href="#" data-toggle="tab" > <i class="fa fa-internet-explorer"></i> {$site_name} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane active">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO连接符')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[SITE_SEOJOIN]" value="{php echo $data['SITE_SEOJOIN'] ? htmlspecialchars($data['SITE_SEOJOIN']) : '_';}"></label>
<span class="help-block">{dr_lang('默认为"_",如:文章标题[连接符]栏目名称[连接符]模块名称')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="SITE_INDEX_HTML" value="1" {if $SITE_INDEX_HTML}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="SITE_INDEX_HTML" value="0" {if empty($SITE_INDEX_HTML)}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启之后首页将会自动生成静态文件')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[SITE_TITLE]">{$data['SITE_TITLE']}</textarea>
<span class="help-block">{dr_lang('首页标题仅支持分页的通配符:[第{page}页{join}]')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[SITE_KEYWORDS]">{$data['SITE_KEYWORDS']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="data[SITE_DESCRIPTION]">{$data['SITE_DESCRIPTION']}</textarea>
</div>
</div>
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('全局设置URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="data[SITE_URLRULE]" id="dr_sync_value">
{if $data['SITE_URLRULE']}
<option value="0"> {dr_lang('还原动态地址')} </option>
{else}
<option value="0"> {dr_lang('动态地址')} </option>
{/if}
{list action=cache name=urlrule return=u}
{if $u.type==3}<option value="{$u.id}" {if $u.id == $data['SITE_URLRULE']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=1&value='+$('#dr_sync_value').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">变更设置URL规则后需要执行一键同步,然后在下方批量更新内容URL</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('批量更新内容URL')}</label>
<div class="col-md-9">
{loop $module $m}
<label><button type="button" onclick="dr_iframe_show('{dr_lang('批量更新内容URL')}', '{dr_url('api/update_url')}&mid={$m.dirname}', '500px', '300px')" class="btn default"> <i class="{dr_icon($m.icon)}"></i> 更新{dr_lang($m.name)}地址 </button></label>
{/loop}
<span class="help-block">将内容URL地址同步更新</span>
</div>
</div>
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目电脑列表信息数')}</label>
<div class="col-md-9">
<label>
<input class="form-control" type="text" value="{intval($data['list_pagesize'] ? $data['list_pagesize'] : 10)}" id="dr_sync_value2" name="data[list_pagesize]">
</label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=2&value='+$('#dr_sync_value2').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">{dr_lang('设置共享栏目的默认的电脑列表分页显示每页的信息数')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目手机列表信息数')}</label>
<div class="col-md-9">
<label>
<input class="form-control" type="text" value="{intval($data['list_mpagesize'] ? $data['list_mpagesize'] : 10)}" id="dr_sync_value3" name="data[list_mpagesize]">
</label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=3&value='+$('#dr_sync_value3').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">{dr_lang('设置共享栏目的默认的手机列表分页显示每页的信息数')}</span>
</div>
</div>
<hr>
<?php !$data['show_title'] && $data['show_title'] = '[第{page}页{join}]{title}{join}{catpname}{join}{'.'SITE_NAME}';?>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[show_title]">{$data['show_title']}</textarea>
<span class="help-block">
<button class="btn btn-xs green" onclick="dr_seo_title_rule()" type="button"><i class="fa fa-code"></i> {dr_lang('可用通配符标签')}</button>
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[show_keywords]">{$data['show_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control" rows="3" name="data[show_description]">{$data['show_description']}</textarea>
<p>
<button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo/sync_index')}', '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
<script>
function dr_seo_title_rule() {
layer.alert('{join} SEO连接符号,默认“_”<br>'+
'[{page}] 分页页码<br>'+
'{catname} 当前栏目名称<br>'+
'{catpname} 当前栏目带层次的栏目名称<br>'+
'支持“模块内容主表表”任何字段,格式:{字段名},<br>如:{title}表示标题<br>'+
'{keywords} 内容关键词<br>'+
'{description} 内容描述信息<br>'+
'{主表自定义字段英文} 主表自定义字段值<br>'+
'支持项目系统常量,格式:{大写的常量名称},<br>如:{SITE_NAME}表示项目名称<br>'+
''+
'', {
shade: 0,
title: '',
btn: []
});
}
function dr_seo_search_rule() {
layer.alert('{join} SEO连接符号,默认“_”<br>'+
'[{page}] 分页页码<br>'+
'{modulename} 当前模块的名称<br>'+
'{catname} 当前栏目名称<br>'+
'{catpname} 当前栏目带层次的栏目名称<br>'+
'{keyword} 搜索时的关键字<br>'+
'{param} 搜索时的参数列表<br>'+
'支持项目系统常量,格式:{大写的常量名称},<br>如:{SITE_NAME}表示项目名称<br>'+
''+
'', {
shade: 0,
title: '',
btn: []
});
}
</script>
{template "footer.html"}
+187
View File
@@ -0,0 +1,187 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('按模块分别设置栏目的SEO规则')}</a></p>
</div>
<script>
function edit_seo(id, name, dir) {
dr_iframe('<i class="fa fa-internet-explorer"></i> '+name,'{dr_url('module/seo_category/edit')}&dir='+dir+'&id='+id, '70%', '70%', 'nogo');
}
function dr_save_urlrule(dir, id, value) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$.ajax({
type: "GET",
cache: false,
url: '{dr_url('module/seo_category/rule_edit')}&dir='+dir+'&value='+value+'&id='+id,
dataType: "json",
success: function (json) {
layer.close(index);
if (json.code == 1) {
dr_tips(1, json.msg);
} else {
dr_tips(0, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
// ajax关闭或启用
function dr_cat_ajax_open_close(e, url, fan) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$.ajax({
type: "GET",
cache: false,
url: url,
dataType: "json",
success: function (json) {
layer.close(index);
if (json.code == 1) {
if (json.data.share == 1) {
if (json.data.value == fan) {
$(e).attr('class', 'badge badge-no');
$(e).html('<i class="fa fa-times"></i>');
} else {
$(e).attr('class', 'badge badge-yes');
$(e).html('<i class="fa fa-check"></i>');
}
} else {
// 独立模块 dr_is_page_html
var obj = $('.dr_is_page_html');
if (json.data.value == fan) {
obj.attr('class', 'dr_is_page_html badge badge-no');
obj.html('<i class="fa fa-times"></i>');
} else {
obj.attr('class', 'dr_is_page_html badge badge-yes');
obj.html('<i class="fa fa-check"></i>');
}
}
dr_tips(1, json.msg);
} else {
dr_tips(0, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
function dr_tree_data(mid, catid) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 100000
});
var value = $(".select-cat-"+mid+"-"+catid).html();
if (value == '[+]') {
$.ajax({
type: "GET",
dataType: "json",
url: "{dr_url('module/seo_category/list_index')}&pid="+catid+"&mid="+mid,
success: function(json) {
layer.close(index);
if (json.code == 1) {
$(".dr_catid_"+mid+"_"+catid).after(json.msg);
$(".select-cat-"+mid+"-"+catid).html('[-]');
$('.tooltips').tooltip();
} else {
dr_cmf_tips(json.code, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
} else {
layer.close(index);
$(".dr_pid_"+mid+"_"+catid).remove();
$(".select-cat-"+mid+"-"+catid).html('[+]');
}
}
function dr_update_category_cache(dir) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid="+dir,
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
</script>
<div class="form-horizontal">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
{loop $module $dir $t}
<li class="{if $page == $dir}active{/if}">
<a href="#tab_{$dir}" data-toggle="tab" onclick="$('#dr_page').val('{$dir}')"> <i class="{dr_icon($t.icon)}"></i> {$t.name} </a>
</li>
{/loop}
</ul>
</div>
<input type="hidden" id="dr_page" value="{$page}">
<div class="portlet-body">
<div class="tab-content">
{loop $module $dir $data}
<div class="tab-pane {if $page==$dir}active{/if}" id="tab_{$dir}">
<form method="post" name="myform_{$dir}" id="myform_{$dir}">
{$form}
<div class="well well2">
<label><a class="btn btn-sm blue" onclick="dr_update_category_cache('{$dir}')" href="javascript:;"> {dr_lang('一键更新栏目')} </a></label>
{if dr_is_app('chtml') && $dir == 'share'}
<label><a href="javascript:dr_iframe_show('{dr_lang('一键更新')}', '{dr_url('chtml/config/sync_index')}')" class="btn btn-sm blue"> {dr_lang('一键开启栏目静态')} </a></label>
<label><a href="javascript:dr_iframe_show('{dr_lang('一键更新')}', '{dr_url('chtml/config/sync2_index')}')" class="btn btn-sm red"> {dr_lang('一键关闭栏目静态')} </a></label>
<label><a href="javascript:dr_iframe_show('{dr_lang('一键更新')}', '{dr_url('chtml/config/csync_index')}')" class="btn btn-sm blue"> {dr_lang('一键开启内容静态')} </a></label>
<label><a href="javascript:dr_iframe_show('{dr_lang('一键更新')}', '{dr_url('chtml/config/csync2_index')}')" class="btn btn-sm red"> {dr_lang('一键关闭内容静态')} </a></label>
{/if}
</div>
<div class="table-scrollable">
<table class="table table-noborder table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th width="70" style="text-align:center"> Id </th>
<th> {dr_lang('栏目')} </th>
<th width="180"> {dr_lang('URL规则')} </th>
{if dr_is_app('chtml')}
<th width="90" style="text-align:center"> {dr_lang('栏目静态')} </th>
<th width="90" style="text-align:center"> {dr_lang('内容静态')} </th>
{/if}
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{$data.list}
</tbody>
</table>
</div>
</form>
</div>
{/loop}
</div>
</div>
</div>
</div>
{template "footer.html"}
@@ -0,0 +1,94 @@
{template "header.html"}
<form class="form-horizontal" method="post" role="form" id="myform">
{dr_form_hidden()}
<div class="form-body">
{if $dirname == 'share'}
{if dr_is_app('chtml')}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目生成静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="setting[html]" value="1" {if $data['setting']['html']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="setting[html]" value="0" {if empty($data['setting']['html'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启生成静态时必须给它配置URL规则')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容生成静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="setting[chtml]" value="1" {if $data['setting']['chtml']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="setting[chtml]" value="0" {if empty($data['setting']['chtml'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启生成静态时必须给它配置URL规则')}</span>
</div>
</div>
{else}
<input type="hidden" name="setting[html]" value="{intval($data['setting']['html'])}">
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="setting[urlrule]">
<option value="0"> {dr_lang('动态地址')} </option>
{list action=cache name=urlrule return=u}
{if $u.type==3}<option value="{$u.id}" {if $u.id == $data['setting']['urlrule']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label style="margin-left:20px;"><a href="{dr_url('module/urlrule/index', ['hide_menu' => 1])}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a> </label>
</div>
</div>
{/if}
<?php !$data['setting']['seo']['list_title'] && $data['setting']['seo']['list_title'] = '[第{page}页{join}]{catpname}{join}{'.'SITE_NAME}';?>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="seo[list_title]">{$data['setting']['seo']['list_title']}</textarea>
<span class="help-block">
<button class="btn btn-xs green" onclick="dr_seo_title_rule()" type="button"><i class="fa fa-code"></i> {dr_lang('可用通配符标签')}</button>
<script>
function dr_seo_title_rule() {
layer.alert('{join} SEO连接符号,默认“_”<br>'+
'[{page}] 分页页码<br>'+
'{modulename} 当前模块的名称<br>'+
'{catname} 当前栏目名称<br>'+
'{catpname} 当前栏目带层次的栏目名称<br>'+
'支持“栏目表”任何字段,格式:{字段名},<br>如:{name}表示栏目名称<br>'+
'支持系统常量,格式:{大写的常量名称},<br>如:{SITE_NAME}表示项目名称<br>'+
''+
'', {
shade: 0,
title: '',
btn: []
});
}
</script>
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="seo[list_keywords]">{$data['setting']['seo']['list_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="seo[list_description]">{$data['setting']['seo']['list_description']}</textarea>
</div>
</div>
</div>
</form>
{template "footer.html"}
+289
View File
@@ -0,0 +1,289 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('为模块设置页面的SEO规则')}</a></p>
</div>
<div class="form-horizontal">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
{loop $module $dir $t}
<li class="{if $page == $dir}active{/if}">
<a href="#tab_{$dir}" data-toggle="tab" onclick="$('#dr_page').val('{$dir}')"> <i class="{dr_icon($t.icon)}"></i> {$t.name} </a>
</li>
{/loop}
</ul>
</div>
<input type="hidden" id="dr_page" value="{$page}">
<div class="portlet-body">
<div class="tab-content">
{loop $module $dir $data}
{php $site=$data.site;}
<div class="tab-pane {if $page==$dir}active{/if}" id="tab_{$dir}">
<form method="post" name="myform_{$dir}" id="myform_{$dir}">
{$form}
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块目录')}</label>
<div class="col-md-9">
<label class="form-control-static">
{$data.dirname}
{if $data.share}
<span class="badge badge-success badge-roundless"> {dr_lang('共享')} </span>
{else}
<span class="badge badge-info badge-roundless"> {dr_lang('独立')} </span>
{/if}
</label>
</div>
</div>
{if !$data.share}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="site[urlrule]">
<option value="0"> {dr_lang('动态地址')} </option>
{list action=cache name=urlrule return=u}
{if $u.type==1}<option value="{$u.id}" {if $u.id==$site['urlrule']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label>&nbsp;&nbsp;<a href="{dr_url('module/urlrule/index')}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a></label>
</div>
</div>
{if !$data.setting.search.indexsync}
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块首页静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="module_index_html" value="1" {if $data['setting']['module_index_html']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="module_index_html" value="0" {if empty($data['setting']['module_index_html'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('模块的首页将会自动生成静态文件')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块首页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[module_title]">{$site['module_title']}</textarea>
<span class="help-block">{dr_lang('首页标题仅支持分页的通配符:[第{page}页{join}]')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块首页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[module_keywords]">{$site['module_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块首页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control" rows="3" name="site[module_description]">{$site['module_description']}</textarea>
</div>
</div>
{else}
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块首页SEO设置')}</label>
<div class="col-md-9">
<label class="form-control-static">
<span class="badge badge-warning badge-roundless"> {dr_lang('已开启搜索集成于首页,无法设置模块首页SEO内容')} </span>
</label>
</div>
</div>
{/if}
{if $data.setting.search.catsync}
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目SEO设置')}</label>
<div class="col-md-9">
<label class="form-control-static">
<span class="badge badge-warning badge-roundless"> {dr_lang('已开启搜索集成于栏目,无法设置栏目SEO内容')} </span>
</label>
</div>
</div>
{else}
<hr>
{if dr_is_app('chtml')}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模块栏目和内容静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="site[html]" value="1" {if $site['html']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="site[html]" value="0" {if empty($site['html'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('模块栏目、模块内容页面静态功能开关')}</span>
</div>
</div>
{else}
<input type="hidden" name="site[html]" value="{intval($site['html'])}">
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('按栏目设置SEO')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.cat_{$dir}').show();$('.cat_{$dir}_0').hide()" name="site[is_cat]" value="0" {if empty($site['is_cat'])}checked{/if} /> {dr_lang('全局设置')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.cat_{$dir}').hide();$('.cat_{$dir}_0').show()" name="site[is_cat]" value="1" {if $site['is_cat']}checked{/if} /> {dr_lang('分别设置')} <span></span></label>
</div>
<span class="help-block cat_{$dir}_0" {if !$site['is_cat']}style="display:none"{/if}><a href="{dr_url('module/seo_category/index', ['page' => $data.share ? '' : $data.dirname])}">{dr_lang('按栏目设置是为每一个栏目单独设置seo信息,否则就采用统一设置')}</a></span>
</div>
</div>
<?php !$site['list_title'] && $site['list_title'] = '[第{page}页{join}]{catpname}{join}{'.'SITE_NAME}';?>
<div class="form-group cat_{$dir}" {if $site['is_cat']}style="display:none"{/if}>
<label class="col-md-2 control-label">{dr_lang('模块栏目SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[list_title]">{$site['list_title']}</textarea>
</div>
</div>
<div class="form-group cat_{$dir}" {if $site['is_cat']}style="display:none"{/if}>
<label class="col-md-2 control-label">{dr_lang('模块栏目SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[list_keywords]">{$site['list_keywords']}</textarea>
</div>
</div>
<div class="form-group cat_{$dir}" {if $site['is_cat']}style="display:none"{/if}>
<label class="col-md-2 control-label">{dr_lang('模块栏目SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control" rows="3" name="site[list_description]">{$site['list_description']}</textarea>
</div>
</div>
{/if}
<hr>
{else}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="site[urlrule]">
<option value="0"> {dr_lang('动态地址')} </option>
{list action=cache name=urlrule return=u}
{if $u.type==2}<option value="{$u.id}" {if $u.id==$site['urlrule']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label>&nbsp;&nbsp;<a href="{dr_url('module/urlrule/index')}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a></label>
</div>
</div>
<hr>
{/if}
<?php !$site['show_title'] && $site['show_title'] = '[第{page}页{join}]{title}{join}{catpname}{join}{'.'SITE_NAME}';?>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[show_title]">{$site['show_title']}</textarea>
<span class="help-block">
<button class="btn btn-xs green" onclick="dr_seo_title_rule()" type="button"><i class="fa fa-code"></i> {dr_lang('可用通配符标签')}</button>
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[show_keywords]">{$site['show_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control" rows="3" name="site[show_description]">{$site['show_description']}</textarea>
</div>
</div>
<hr>
<?php !$site['search_title'] && $site['search_title'] = '[第{page}页{join}][{keyword}{join}][{param}{join}]{'.'SITE_NAME}';?>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[search_title]">{$site['search_title']}</textarea>
<span class="help-block">
<button class="btn btn-xs green" onclick="dr_seo_search_rule()" type="button"><i class="fa fa-code"></i> {dr_lang('可用通配符标签')}</button>
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="site[search_keywords]">{$site['search_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('搜索页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="site[search_description]">{$site['search_description']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">&nbsp;</label>
<div class="col-md-9">
<label><button type="button" onclick="dr_ajax_submit('{$data.save_url}', 'myform_{$dir}', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存当前模块')}</button></label>
<label><button type="button" onclick="dr_iframe_show('{dr_lang('批量操作')}', '{dr_url('api/update_url')}&mid={$dir}', '500px', '300px')" class="btn blue"> <i class="fa fa-refresh"></i> {dr_lang('更新内容URL地址')} </button></label>
</div>
</div>
</div>
</form>
</div>
{/loop}
</div>
</div>
</div>
</div>
<script>
function dr_seo_title_rule() {
layer.alert('{join} SEO连接符号,默认“_”<br>'+
'[{page}] 分页页码<br>'+
'{catname} 当前栏目名称<br>'+
'{catpname} 当前栏目带层次的栏目名称<br>'+
'支持“模块内容主表表”任何字段,格式:{字段名},<br>如:{title}表示标题<br>'+
'{keywords} 内容关键词<br>'+
'{description} 内容描述信息<br>'+
'{主表自定义字段英文} 主表自定义字段值<br>'+
'支持项目系统常量,格式:{大写的常量名称},<br>如:{SITE_NAME}表示项目名称<br>'+
''+
'', {
shade: 0,
title: '',
btn: []
});
}
function dr_seo_search_rule() {
layer.alert('{join} SEO连接符号,默认“_”<br>'+
'[{page}] 分页页码<br>'+
'{modulename} 当前模块的名称<br>'+
'{catname} 当前栏目名称<br>'+
'{catpname} 当前栏目带层次的栏目名称<br>'+
'{keyword} 搜索时的关键字<br>'+
'{param} 搜索时的参数列表<br>'+
'支持项目系统常量,格式:{大写的常量名称},<br>如:{SITE_NAME}表示项目名称<br>'+
''+
'', {
shade: 0,
title: '',
btn: []
});
}
</script>
{template "footer.html"}
+123
View File
@@ -0,0 +1,123 @@
{template "header.html"}
<div class="note note-danger">
<p><a href="javascript:dr_update_cache();">{dr_lang('设置全站SEO规则')}</a></p>
</div>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="active">
<a href="#" data-toggle="tab" > <i class="fa fa-internet-explorer"></i> {$site_name} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane active">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO连接符')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[SITE_SEOJOIN]" value="{php echo $data['SITE_SEOJOIN'] ? htmlspecialchars($data['SITE_SEOJOIN']) : '_';}"></label>
<span class="help-block">{dr_lang('默认为"_",如:文章标题[连接符]栏目名称[连接符]模块名称')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="SITE_INDEX_HTML" value="1" {if $SITE_INDEX_HTML}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="SITE_INDEX_HTML" value="0" {if empty($SITE_INDEX_HTML)}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启之后首页将会自动生成静态文件')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[SITE_TITLE]">{$data['SITE_TITLE']}</textarea>
<span class="help-block">{dr_lang('首页标题仅支持分页的通配符:[第{page}页{join}]')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:70px" name="data[SITE_KEYWORDS]">{$data['SITE_KEYWORDS']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站首页SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="data[SITE_DESCRIPTION]">{$data['SITE_DESCRIPTION']}</textarea>
</div>
</div>
<hr>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('批量更新内容URL')}</label>
<div class="col-md-9">
{loop $module $m}
<label><button type="button" onclick="dr_iframe_show('{dr_lang('批量更新内容URL')}', '{dr_url('api/update_url')}&mid={$m.dirname}', '500px', '300px')" class="btn default"> <i class="{dr_icon($m.icon)}"></i> {dr_lang($m.name)} </button></label>
{/loop}
<span class="help-block">将内容URL地址同步更新</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('全局设置URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="data[SITE_URLRULE]" id="dr_sync_value">
{if $data['SITE_URLRULE']}
<option value="0"> {dr_lang('还原动态地址')} </option>
{else}
<option value="0"> {dr_lang('动态地址')} </option>
{/if}
{list action=cache name=urlrule return=u}
{if $u.type==3}<option value="{$u.id}" {if $u.id == $data['SITE_URLRULE']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label style="margin-left:20px;"><a href="{dr_url('module/urlrule/index', ['hide_menu' => 1])}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a> </label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=1&value='+$('#dr_sync_value').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">{dr_lang('设置共享栏目的默认URL规则')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目电脑列表信息数')}</label>
<div class="col-md-9">
<label>
<input class="form-control" type="text" value="{intval($data['list_pagesize'] ? $data['list_pagesize'] : 10)}" id="dr_sync_value2" name="data[list_pagesize]">
</label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=2&value='+$('#dr_sync_value2').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">{dr_lang('设置共享栏目的默认的电脑列表分页显示每页的信息数')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目手机列表信息数')}</label>
<div class="col-md-9">
<label>
<input class="form-control" type="text" value="{intval($data['list_mpagesize'] ? $data['list_mpagesize'] : 10)}" id="dr_sync_value3" name="data[list_mpagesize]">
</label>
<label style="margin-left:10px;"><button type="button" onclick="dr_iframe_show('{dr_lang('一键同步')}', '{dr_url('module/seo_site/sync_index')}&ct=3&value='+$('#dr_sync_value3').val(), '500px', '300px')" class="btn blue"> <i class="fa fa-cog"></i> {dr_lang('一键同步设置')} </button></label>
<span class="help-block">{dr_lang('设置共享栏目的默认的手机列表分页显示每页的信息数')}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
{template "footer.html"}
@@ -0,0 +1,97 @@
{template "header.html"}
<script>
function dr_update_category_cache() {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid={APP_DIR}",
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
</script>
<div class="note note-danger">
<p><a href="javascript:dr_update_category_cache();">{dr_lang('变更栏目属性之后,需要一键更新栏目配置信息')}</a></p>
</div>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="portlet bordered light myfbody">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> {dr_lang('批量添加')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('所属栏目')}</label>
<div class="col-md-9">
<label>{$select}</label>
</div>
</div>
{if $module.share}
<div class="form-group r1">
<label class="col-md-2 control-label">{dr_lang('栏目类型')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[tid]" value="0" /> {dr_lang('单网页')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[tid]" value="1" /> {dr_lang('内容模块')} <span></span></label>
</div>
</div>
</div>
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('共享模块')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="data[mid]">
<option value=""> -- </option>
{loop $module_share $t}
{if $t.share}
<option value="{$t.dirname}" > {dr_lang($t.name)} </option>
{/if}
{/loop}
</select>
</label>
</div>
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('批量录入')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:190px" name="data[list]"></textarea>
<span class="help-block">{dr_lang('格式: 栏目名称|栏目目录 [回车换行],如果不填写栏目目录时,会自动用拼音代替')}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
{template "footer.html"}
@@ -0,0 +1,174 @@
{template "header.html"}
<script>
function dr_update_category_cache() {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid={APP_DIR}",
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
</script>
<div class="note note-danger">
<p><a href="javascript:dr_update_category_cache();">{dr_lang('变更栏目属性之后,需要一键更新栏目配置信息')}</a></p>
</div>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{dr_form_hidden()}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class=" {if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-table"></i> {dr_lang('栏目属性设置')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('默认展开顶级栏目下层')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[popen]" value="1" {if $data['popen']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[popen]" value="0" {if empty($data['popen'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('进入栏目管理时默认展开顶级栏目的下级子栏目')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目目录允许重复')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[rname]" value="1" {if $data['rname']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[rname]" value="0" {if empty($data['rname'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('栏目开启之后请不要使用目录作为伪静态关键字,否则需要使用生成真静态功能')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('外链地址补全')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[linkfix]" value="1" {if $data['linkfix']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[linkfix]" value="0" {if empty($data['linkfix'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('当外链地址是相当路径时,开启后将当前域名自动补全到URL中')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('后台列表显示字段')}</label>
<div class="col-md-9">
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th class="myselect">
{dr_lang('显示')}
</th>
<th width="180"> {dr_lang('字段')} </th>
<th> {dr_lang('说明')} </th>
</tr>
</thead>
<tbody class="field-sort-items2">
{loop $sysfield $n $t}
<tr class="odd gradeX">
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="data[sys_field][]" value="{$n}" {if dr_in_array($n, $data['sys_field'])} checked{/if} />
<span></span>
</label>
</td>
<td>{dr_lang($t[0])}</td>
<td>{dr_lang($t[1])}</td>
</tr>
{/loop}
</tbody>
</table></div>
<div class="table-scrollable" style="margin-top: 30px">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
<th class="myselect">
{dr_lang('显示')}
</th>
<th width="180"> {dr_lang('字段')} </th>
<th width="150"> {dr_lang('名称')} </th>
<th width="100"> {dr_lang('宽度')} </th>
<th width="140"> {dr_lang('对其方式')} </th>
<th> {dr_lang('回调方法')} </th>
</tr>
</thead>
<tbody class="field-sort-items">
{loop $field $n $t}
<tr class="odd gradeX">
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="data[list_field][{$t.fieldname}][use]" value="1" {if $data['list_field'][$t.fieldname]['use']} checked{/if} />
<span></span>
</label>
</td>
<td>{dr_lang($t.name)} ({$t.fieldname})</td>
<td><input class="form-control" type="text" name="data[list_field][{$t.fieldname}][name]" value="{php echo $data['list_field'][$t.fieldname]['name'] ? htmlspecialchars($data['list_field'][$t.fieldname]['name']) : $t.name}" /></td>
<td> <input class="form-control" type="text" name="data[list_field][{$t.fieldname}][width]" value="{htmlspecialchars((string)$data['list_field'][$t.fieldname]['width'])}" /></td>
<td><input type="checkbox" name="data[list_field][{$t.fieldname}][center]" {if $data['list_field'][$t.fieldname]['center']} checked{/if} value="1" data-on-text="{dr_lang('居中')}" data-off-text="{dr_lang('默认')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
</td>
<td> <div class="input-group" style="width:250px">
<span class="input-group-btn">
<a class="btn btn-success" href="javascript:dr_call_alert();">{dr_lang('回调')}</a>
</span>
<input class="form-control" type="text" name="data[list_field][{$t.fieldname}][func]" value="{htmlspecialchars((string)$data['list_field'][$t.fieldname]['func'])}" />
</div></td>
</tr>
{/loop}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
<script type="text/javascript">
$(function() {
$(".field-sort-items").sortable();
});
</script>
{template "footer.html"}
@@ -0,0 +1,9 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{dr_form_hidden()}
{$myfield}
</form>
{template "footer.html"}
@@ -0,0 +1,35 @@
{template "header.html"}
<form class="form-horizontal" role="form" id="myform">
{$form}
<div class="form-body">
<div class="mt-checkbox-list">
{loop $option $n $t}
<label class="mt-checkbox mt-checkbox-outline">
<input type="checkbox" name="at[]" {if $at == $n} checked{/if} value="{$n}"> {dr_lang($t)}
<span></span>
</label>
{/loop}
</div>
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('#dr_cat').hide()" name="use" value="0" checked /> {dr_lang('全部栏目')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('#dr_cat').show()" name="use" value="1" /> {dr_lang('指定栏目')} <span></span></label>
</div>
<div style="{if $cat_show}display: block{else}display: none{/if}" id="dr_cat">
<div class="form-group">
<div class="col-xs-12" id="multi-select">
{$select}
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
{dr_lang('可以将本栏目的配置信息复制到其他栏目中去')}
</div>
</div>
</div>
</form>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
{template "footer.html"}
@@ -0,0 +1,54 @@
{template "header.html"}
<div class="note note-danger">
<p>{dr_lang('勾选状态的字段可以显示在本栏目的编辑页面中')}</p>
</div>
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="table-scrollable">
<table class="table table-striped table-bordered fc-head-table table-hover table-checkable">
<thead>
<tr class="heading">
<th class="myselect">
{dr_lang('可用')}
</th>
<th style="text-align: center;font-size: 15px;" width="65">Id</th>
<th>{dr_lang('字段')}</th>
<th>{dr_lang('类别')}</th>
</tr>
</thead>
<tbody>
{loop $field $t}
{if $t.id}
<tr class="odd gradeX" id="dr_row_{$t.id}">
<td class="myselect">
<label class="mt-table mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" {if !isset($cat_field[$t.fieldname])} checked {/if} name="ids[]" value="{$t.fieldname}" />
<span></span>
</label>
</td>
<td style="text-align: center;font-size: 15px;">{$t.id}</td>
<td> {$t.spacer} {$t.name} / {$t.fieldname}</td>
<td>{$t.fieldtype}</td>
</tr>
{/if}
{/loop}
</tbody>
</table>
</div>
<div class="note note-danger" style="margin-top: 20px;">
<p>{dr_lang('将以上的字段配置覆盖到以下的选中栏目之中')}</p>
</div>
<div class="form-group">
<div class="col-xs-12" id="multi-select">
{$select}
</div>
</div>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
</form>
{template "footer.html"}
@@ -0,0 +1,9 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{dr_form_hidden()}
<input class="form-control" type="text" name="url" value="{htmlspecialchars((string)$myurl)}">
</form>
{template "footer.html"}
@@ -0,0 +1,272 @@
{template "header.html"}
<script>
function dr_link_url(id, name) {
dr_iframe('<i class="fa fa-edit"></i> '+name,'{dr_url(APP_DIR.'/category/link_edit')}&id='+id, '50%', '30%','nogo');
}
function dr_content_url(id, name) {
dr_iframe('<i class="fa fa-edit"></i> '+name,'{dr_url(APP_DIR.'/category/edit')}&isedit=1&page=1&id='+id, '80%', '90%','nogo');
}
function dr_cat_field(id, name) {
dr_iframe('<i class="fa fa-edit"></i> '+name,'{dr_url(APP_DIR.'/category/field_edit')}&id='+id, '50%', '70%', 'nogo');
}
// ajax关闭或启用
function dr_cat_ajax_open_close(e, url, fan) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$.ajax({
type: "GET",
cache: false,
url: url,
dataType: "json",
success: function (json) {
layer.close(index);
if (json.code == 1) {
if (json.data.share == 1) {
if (json.data.value == fan) {
$(e).attr('class', 'badge badge-no');
$(e).html('<i class="fa fa-times"></i>');
} else {
$(e).attr('class', 'badge badge-yes');
$(e).html('<i class="fa fa-check"></i>');
}
} else {
// 独立模块 dr_is_page_html
var obj = $('.dr_is_page_html');
if (json.data.value == fan) {
obj.attr('class', 'dr_is_page_html badge badge-no');
obj.html('<i class="fa fa-times"></i>');
} else {
obj.attr('class', 'dr_is_page_html badge badge-yes');
obj.html('<i class="fa fa-check"></i>');
}
}
dr_tips(1, json.msg);
} else {
dr_tips(0, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
function dr_cat_ajax_save(value, id) {
var url = "{dr_url($uriprefix.'/displayorder_edit')}&id="+id;
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$.ajax({
type: "GET",
cache: false,
url: url+'&value='+value,
dataType: "json",
success: function (json) {
layer.close(index);
if (json.code == 1) {
dr_tips(1, json.msg);
} else {
dr_tips(0, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
// ajax关闭或启用
function dr_cat_ajax_show_open_close(e, url, fan) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
var obj = $(e);
$.ajax({
type: "GET",
cache: false,
url: url,
dataType: "json",
success: function (json) {
layer.close(index);
if (json.code == 1) {
if (json.data.value == fan) {
obj.attr('class', 'badge badge-no');
obj.html('<i class="fa fa-times"></i>');
} else {
obj.attr('class', 'badge badge-yes');
obj.html('<i class="fa fa-check"></i>');
}
dr_tips(1, json.msg);
} else {
dr_tips(0, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
function dr_tree_data(catid) {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 100000
});
var value = $(".select-cat-"+catid).html();
if (value == '[+]') {
$.ajax({
type: "GET",
dataType: "json",
url: "{dr_url($uriprefix.'/list_index')}&pid="+catid,
success: function(json) {
layer.close(index);
if (json.code == 1) {
$.ajax({
type: "POST",
dataType: "json",
url: "{dr_url('module/api/ctotal')}",
data: {
'cid': json.data,
{csrf_token()}: "{csrf_hash()}",
},
success: function(json2) {
if (json2.code == 1) {
eval(json2.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
$(".dr_catid_"+catid).after(json.msg);
$(".select-cat-"+catid).html('[-]');
$('.tooltips').tooltip();
} else {
dr_cmf_tips(json.code, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
} else {
layer.close(index);
$(".dr_pid_"+catid).remove();
$(".select-cat-"+catid).html('[+]');
}
}
function dr_scjt() {
$.ajax({
type: "POST",
dataType: "json",
url: "{dr_url($uriprefix.'/scjt_edit')}",
data: $("#myform").serialize(),
success: function(json) {
if (json.code == 1) {
dr_bfb('{dr_lang('生成栏目')}', '', json.msg);
} else {
dr_cmf_tips(json.code, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
}
function dr_update_category_cache() {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid={APP_DIR}",
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
$(function() {
{if defined('SYS_CAT_POPEN') && SYS_CAT_POPEN}
{loop $pcats $ii}
dr_tree_data({$ii});
{/loop}
{/if}
$.ajax({
type: "POST",
dataType: "json",
url: "{dr_url('module/api/ctotal')}",
data: {json_encode(['cid'=>$tcats, csrf_token() => csrf_hash()])},
success: function(json) {
if (json.code == 1) {
eval(json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
});
</script>
<style>.dr_total{ font-size: 10px; color:#ccc} </style>
<div class="note note-danger">
{if $MAX_CATEGORY > MAX_CATEGORY}
<p style="color: red">网站栏目数量已达到上限({$MAX_CATEGORY}</p>
{/if}
<p><a href="javascript:dr_update_category_cache();">{dr_lang('变更栏目属性之后,需要一键更新栏目配置信息')}</a></p>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
{if $ci->_is_admin_auth('del')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('将同步删除其下级所有栏目和内容,且无法恢复,你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button></label>
{/if}
{if $ci->_is_admin_auth('edit')}
<label style="margin-right: 5px">{$move_select}</label>
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/move_edit')}', '{dr_lang('你确定要移动它们吗?')}', 1)" class="btn blue btn-sm"> <i class="fa fa-edit"></i> {dr_lang('移动')}</button></label>
{/if}
{if dr_is_app('chtml')}
<label><button type="button" onclick="dr_scjt()" class="btn green btn-sm"> <i class="fa fa-reorder"></i> {dr_lang('生成栏目静态')} </button></label>
{if IS_SHARE && $ci->_is_admin_auth('edit')}
<label><div class="btn-group dropdown">
<a class="btn blue btn-sm dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="false" href="javascript:;"> {dr_lang('批量静态')}
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu">
<li><a href="javascript:;" onclick="dr_ajax_option('{dr_url($uriprefix.'/htmlall_edit')}', '{dr_lang('你确定要批量设置栏目为静态模式吗?')}', 1)" > {dr_lang('设置栏目静态')}</a></li>
<li><a href="javascript:;" onclick="dr_ajax_option('{dr_url($uriprefix.'/phpall_edit')}', '{dr_lang('你确定要批量设置栏目为动态模式吗?')}', 1)" > {dr_lang('设置栏目动态')}</a></li>
<li class="divider"> </li>
<li><a href="javascript:;" onclick="dr_ajax_option('{dr_url($uriprefix.'/htmlall_edit', ['tid'=>1])}', '{dr_lang('你确定要批量设置内容为静态模式吗?')}', 1)" > {dr_lang('设置内容静态')}</a></li>
<li><a href="javascript:;" onclick="dr_ajax_option('{dr_url($uriprefix.'/phpall_edit', ['tid'=>1])}', '{dr_lang('你确定要批量设置内容为动态模式吗?')}', 1)" > {dr_lang('设置内容动态')}</a></li>
</ul>
</div></label>
{/if}
{/if}
</div>
</div>
<div class="table-scrollable">
<table class="table table-noborder table-striped table-bordered table-hover table-checkable dataTable">
<thead>
{$cat_head}
</thead>
<tbody>
{$cat_list}
</tbody>
</table>
</div>
</form>
</div>
{template "footer.html"}
@@ -0,0 +1,415 @@
{template "header.html"}
<script>
$(function () {
if (top.$("body").hasClass('page-admin-min') == true) {
$("#dr_tpl_tab").hide();
}
{if $is_scategory}
dr_tid({intval($data.tid)});
{else}
dr_tid(1);
{/if}
});
function dr_select_tpl(file, name) {
$('.'+name).val(file);
}
function dr_tid(i) {
$('.dr_tid_0').hide();
$('.dr_tid_1').hide();
$('.dr_tid_2').hide();
$('.dr_tid_'+i).show();
}
function dr_update_category_cache() {
var index = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000000
});
$.ajax({type: "GET",dataType:"json", url: admin_file+"?s=module&c=api&m=update_category_cache&mid={APP_DIR}",
success: function(json) {
layer.close(index);
dr_cmf_tips(json.code, json.msg);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('更新失败,请检查错误日志')}");
}
});
}
</script>
{if !isset($_GET['isedit'])}
<div class="note note-danger">
<p><a href="javascript:dr_update_category_cache();">{dr_lang('变更栏目属性之后,需要一键更新栏目配置信息')}</a></p>
</div>
{/if}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<input type="hidden" name="system[show]" value="{if $data['show']}1{else}0{/if}">
<input type="hidden" name="system[setting][disabled]" value="{if $data['setting']['disabled']}1{else}0{/if}">
<div class="myfbody">
<div class="portlet bordered light ">
{if !isset($_GET['isedit'])}
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('基本设置')} </a>
</li>
{if $sysfield || $myfield || $diyfield}
<li class="{if $page==1}active{/if}">
<a href="#tab_1" data-toggle="tab" onclick="$('#dr_page').val('1')"> <i class="fa fa-table"></i> {dr_lang('属性设置')} </a>
</li>
{/if}
{if $is_seo}
<li class="{if $page==3}active{/if}">
<a href="#tab_3" data-toggle="tab" onclick="$('#dr_page').val('3')"> <i class="fa fa-internet-explorer"></i> {dr_lang('SEO优化')} </a>
</li>
{/if}
<li class="{if $page==4}active{/if}">
<a href="#tab_4" data-toggle="tab" onclick="$('#dr_page').val('4')"> <i class="fa fa-html5"></i> {dr_lang('模板设置')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
{else}
<div class="portlet-body" style="margin-top: -30px;{if IS_PC}margin-left: -30px{/if}">
{/if}
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('所属栏目')}</label>
<div class="col-md-9">
<label>{str_replace('data[', 'system[', $select)}</label>
</div>
</div>
{if $is_scategory}
<div class="form-group r1">
<label class="col-md-2 control-label">{dr_lang('栏目类型')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[tid]" value="0" onclick="dr_tid(0)" {if !$data.tid} checked{/if} /> {dr_lang('单网页')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[tid]" value="1" onclick="dr_tid(1)" {if $data.tid==1} checked{/if} /> {dr_lang('内容模块')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[tid]" value="2" onclick="dr_tid(2)" {if $data.tid==2} checked{/if} /> {dr_lang('外部地址')} <span></span></label>
</div>
</div>
</div>
{/if}
{if $module.share}
<div class="form-group dr_tid_1 " style="display: none">
<label class="col-md-2 control-label">{dr_lang('共享模块')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="system[mid]">
<option value=""> -- </option>
{loop $module_share $t}
{if $t.share}
<option value="{$t.dirname}" {if $t.dirname==$data['mid']}selected{/if}> {dr_lang($t.name)} </option>
{/if}
{/loop}
</select>
</label>
{if $ci->_is_admin_auth('module/module/index')}
<span class="help-block"><a href="{dr_url('module/module/index')}">{dr_lang('在这里可以创建更多的共享模块')}</a></span>
{/if}
</div>
</div>
{/if}
<div class="form-group " id="dr_row_name">
<label class="col-md-2 control-label">{dr_lang('栏目名称')}</label>
<div class="col-md-9">
<label><input class="form-control input-large" type="text" name="system[name]" value="{htmlspecialchars((string)$data.name)}" id="dr_name" onblur="d_topinyin('dirname','name', 1);"></label>
<span class="help-block" id="dr_name_tips">{dr_lang('栏目的一个显示名称')}</span>
</div>
</div>
<div class="form-group " id="dr_row_dirname">
<label class="col-md-2 control-label">{dr_lang('目录名称')}</label>
<div class="col-md-9">
<label><input class="form-control input-large" type="text" name="system[dirname]" id="dr_dirname" value="{htmlspecialchars((string)$data.dirname)}"></label>
<span class="help-block" id="dr_dirname_tips">{dr_lang('栏目目录确保唯一,用于url填充或者生成目录')}</span>
</div>
</div>
<div class="form-group dr_tid_2 " style="display: none">
<label class="col-md-2 control-label">{dr_lang('外链地址')}</label>
<div class="col-md-9">
<input class="form-control" type="text" name="system[setting][linkurl]" value="{htmlspecialchars((string)$data['setting']['linkurl'])}">
<span class="help-block">{dr_lang('可跳转到指定地址(不允许发布内容)')}</span>
</div>
</div>
<div class="form-group dr_tid_0 dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('继承下级')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][getchild]" value="1" {if $data['setting']['getchild']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][getchild]" value="0" {if empty($data['setting']['getchild'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('将下级第一个栏目数据作为当前的栏目,不对外链类型的栏目有效')}</span>
</div>
</div>
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('禁止修改')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][notedit]" value="1" {if $data['setting']['notedit']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][notedit]" value="0" {if empty($data['setting']['notedit'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('内容发布之后将禁止修改栏目')}</span>
</div>
</div>
</div>
</div>
<div class="tab-pane {if $page==3}active{/if}" id="tab_3">
<div class="form-body">
{if $module.share}
{if dr_is_app('chtml')}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('栏目生成静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][html]" value="1" {if $data['setting']['html']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][html]" value="0" {if empty($data['setting']['html'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启生成静态时必须给它配置URL规则')}</span>
</div>
</div> <div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容生成静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][chtml]" value="1" {if $data['setting']['chtml']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="system[setting][chtml]" value="0" {if empty($data['setting']['chtml'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启生成静态时必须给它配置URL规则')}</span>
</div>
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="system[setting][urlrule]">
<option value="0"> {dr_lang('动态地址')} </option>
{list action=cache name=urlrule return=u}
{if $u.type==3}<option value="{$u.id}" {if $u.id == $data['setting']['urlrule']}selected{/if}> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label style="margin-left:20px;"><a href="{dr_url('module/urlrule/index', ['hide_menu' => 1])}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a> </label>
</div>
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO标题')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="system[setting][seo][list_title]">{$data['setting']['seo']['list_title']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO关键字')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="system[setting][seo][list_keywords]">{$data['setting']['seo']['list_keywords']}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('SEO描述信息')}</label>
<div class="col-md-9">
<textarea class="form-control " style="height:90px" name="system[setting][seo][list_description]">{$data['setting']['seo']['list_description']}</textarea>
</div>
</div>
{if $id}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('同步到其他栏目')}</label>
<div class="col-md-9">
<label><button onclick="dr_iframe('{dr_lang('复制')}', '{dr_url(APP_DIR.'/category/copy_edit')}&at=seo&catid={$id}')" type="button" class="btn green btn-sm"> <i class="fa fa-copy"></i> {dr_lang('同步SEO配置')}</button></label>
<label>{dr_lang('把本页的设置数据同步到其他栏目;需要保存之后再同步')}</label>
</div>
</div>
{/if}
</div>
</div>
<div class="tab-pane {if $page==4}active{/if}" id="tab_4">
<div class="form-body">
{php $catsync = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$mid, 'setting', 'search', 'catsync');}
{if $catsync}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('列表信息数')}</label>
<div class="col-md-9">
<label class="form-control-static">
<span class="badge badge-warning badge-roundless"> {dr_lang('已开启搜索集成于栏目,此设置无效')} </span>
</label>
</div>
</div>
{else}
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('电脑列表信息数')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" value="{intval($data['setting']['template']['pagesize'])}" name="system[setting][template][pagesize]"></label>
<span class="help-block">{dr_lang('列表页面每页显示的信息数量,静态生成时调用此参数')}</span>
</div>
</div>
{if SITE_IS_MOBILE || $ci->site_info[SITE_ID]['SITE_AUTO']}
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('手机列表信息数')}</label>
<div class="col-md-9">
<label><input class="form-control " type="text" value="{intval($data['setting']['template']['mpagesize'])}" name="system[setting][template][mpagesize]"></label>
<span class="help-block">{dr_lang('列表页面每页显示的信息数量,静态生成时调用此参数')}</span>
</div>
</div>
{else}
<input type="hidden" value="{intval($data['setting']['template']['mpagesize'])}" name="system[setting][template][mpagesize]">
{/if}
{/if}
{if $is_scategory}
<div class="form-group dr_tid_0">
<label class="col-md-2 control-label">{dr_lang('单网页模板')}</label>
<div class="col-md-9">
<div class="input-group input-large">
<input class="form-control dr_page_tpl" type="text" value="{htmlspecialchars((string)$data['setting']['template']['page'])}" name="system[setting][template][page]">
<div class="input-group-btn">
<button type="button" class="btn green dropdown-toggle" data-toggle="dropdown">{dr_lang('选择')}
<i class="fa fa-angle-down"></i>
</button>
{dr_rp($select_tpl, '{name}', 'dr_page_tpl')}
</div>
</div>
<span class="help-block">{dr_lang('单网页模板默认page.html')}</span>
</div>
</div>
{/if}
{if $catsync}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容列表页模板')}</label>
<div class="col-md-9">
<label class="form-control-static">
<span class="badge badge-warning badge-roundless"> {dr_lang('已开启搜索集成于栏目,此模板无效')} </span>
</label>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('内容栏目封面模板')}</label>
<div class="col-md-9">
<label class="form-control-static">
<span class="badge badge-warning badge-roundless"> {dr_lang('已开启搜索集成于栏目,此模板无效')} </span>
</label>
</div>
</div>
{else}
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('内容列表页模板')}</label>
<div class="col-md-9">
<div class="input-group input-large">
<input class="form-control dr_list_tpl" type="text" value="{htmlspecialchars((string)$data['setting']['template']['list'])}" name="system[setting][template][list]">
<div class="input-group-btn">
<button type="button" class="btn green dropdown-toggle" data-toggle="dropdown">{dr_lang('选择')}
<i class="fa fa-angle-down"></i>
</button>
{dr_rp($select_tpl, '{name}', 'dr_list_tpl')}
</div>
</div>
<span class="help-block">{dr_lang('模块栏目列表默认list.html')}</span>
</div>
</div>
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('内容栏目封面模板')}</label>
<div class="col-md-9">
<div class="input-group input-large">
<input class="form-control dr_category_tpl" type="text" value="{htmlspecialchars((string)$data['setting']['template']['category'])}" name="system[setting][template][category]">
<div class="input-group-btn">
<button type="button" class="btn green dropdown-toggle" data-toggle="dropdown">{dr_lang('选择')}
<i class="fa fa-angle-down"></i>
</button>
{dr_rp($select_tpl, '{name}', 'dr_category_tpl')}
</div>
</div>
<span class="help-block">{dr_lang('默认category.html')}</span>
</div>
</div>
{/if}
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('内容搜索页模板')}</label>
<div class="col-md-9">
<div class="input-group input-large">
<input class="form-control dr_search_tpl" type="text" value="{php echo $data['setting']['template']['search'] ? htmlspecialchars($data['setting']['template']['search']) : 'search.html'}" name="system[setting][template][search]">
<div class="input-group-btn">
<button type="button" class="btn green dropdown-toggle" data-toggle="dropdown">{dr_lang('选择')}
<i class="fa fa-angle-down"></i>
</button>
{dr_rp($select_tpl, '{name}', 'dr_search_tpl')}
</div>
</div>
<span class="help-block">{dr_lang('默认search.html')}</span>
</div>
</div>
<div class="form-group dr_tid_1">
<label class="col-md-2 control-label">{dr_lang('内容详细页模板')}</label>
<div class="col-md-9">
<div class="input-group input-large">
<input class="form-control dr_show_tpl" type="text" value="{htmlspecialchars((string)$data['setting']['template']['show'])}" name="system[setting][template][show]">
<div class="input-group-btn">
<button type="button" class="btn green dropdown-toggle" data-toggle="dropdown">{dr_lang('选择')}
<i class="fa fa-angle-down"></i>
</button>
{dr_rp($select_tpl, '{name}', 'dr_show_tpl')}
</div>
</div>
<span class="help-block">{dr_lang('默认show.html')}</span>
</div>
</div>
{if $id}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('同步到其他栏目')}</label>
<div class="col-md-9">
<label><button onclick="dr_iframe('{dr_lang('复制')}', '{dr_url(APP_DIR.'/category/copy_edit')}&at=tpl&catid={$id}')" type="button" class="btn green btn-sm"> <i class="fa fa-copy"></i> {dr_lang('同步模板配置')}</button></label>
<label>{dr_lang('把本页的设置数据同步到其他栏目;需要保存之后再同步')}</label>
</div>
</div>
{/if}
</div>
</div>
<div class="tab-pane {if $page==1}active{/if}" id="tab_1">
<div class="form-body">
{$sysfield}
{$myfield}
{$diyfield}
</div>
</div>
</div>
</div>
</div>
</div>
{if !isset($_GET['isedit'])}
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&is_self=1&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存内容')}</button></label>
{if !isset($_GET['isedit'])}
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000', '{dr_url(APP_DIR.'/category/add')}')" class="btn green"> <i class="fa fa-plus"></i> {dr_lang('保存再添加')}</button></label>
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000', '{dr_url(APP_DIR.'/category/index')}')" class="btn yellow"> <i class="fa fa-mail-reply-all"></i> {dr_lang('保存并返回')}</button></label>
{/if}
{if $web_url}
<label><a href="{$web_url}" target="_blank" class="btn dark"> <i class="fa fa-link"></i> {dr_lang('浏览')}</a></label>
{/if}
</div>
</div> {/if}
</form>
{template "footer.html"}
@@ -0,0 +1,54 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="portlet bordered light myfbody">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> {dr_lang('自定义URL')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('选择栏目')}</label>
<div class="col-md-9">
{$select}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('URL规则')}</label>
<div class="col-md-9">
<label>
<select class="form-control" name="urlrule">
<option value="0"> {dr_lang('动态地址')} </option>
{list action=cache name=urlrule return=u}
{if $u.type==3}<option value="{$u.id}"> {$u.name} </option>{/if}
{/list}
</select>
</label>
<label style="margin-left:20px;"><a href="{dr_url('module/urlrule/index', ['hide_menu' => 1])}" style="color:blue !important">{dr_lang('[URL规则管理]')}</a> </label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000', '{dr_url(APP_DIR.'/category/index')}')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
{template "footer.html"}
+40
View File
@@ -0,0 +1,40 @@
{template "header.html"}
<form class="form-horizontal" method="post" role="form" id="myform">
{dr_form_hidden()}
<div class="form-body">
<div class="form-group">
<div class="col-md-12">
<label class="">{dr_lang('本次批量删除')}</label>
<label class="label label-danger">{dr_count($ids)}</label>
{loop $ids $id}
<input type="hidden" name="ids[]" value="{$id}">
{/loop}
<label class="">{dr_lang('条数据')}</label>
</div>
</div>
{if $delete_msg}
<div class="form-group">
<label class="col-md-2 control-label ajax_name">{dr_lang('常用理由')}</label>
<div class="col-md-8">
<select class="form-control" onchange="$('#dr_note').val(this.value)">
<option value=""> -- </option>
{loop $delete_msg $t}
{if $t}<option value="{$t}">{$t}</option>{/if}
{/loop}
</select>
</div>
</div>
{/if}
<div class="form-group" id="dr_row_note">
<label class="col-md-2 control-label ajax_name">{dr_lang('删除理由')}</label>
<div class="col-md-8">
<textarea class="form-control" id="dr_note" name="note" rows="5"></textarea>
</div>
</div>
</div>
</form>
{template "footer.html"}
+135
View File
@@ -0,0 +1,135 @@
{template "header.html"}
{template "api_list_date_search.html"}
<script type="text/javascript">
function dr_module_delete() {
var url = '{dr_url(APP_DIR.'/home/del')}&is_iframe=1';
if (is_mobile_cms == 1) {
width = height = '90%';
}
var data = $("#myform").serialize();
// 判断是否有选中数据
var params = data.split('&');
var dataObj = {};
for (var i = 0; i < params.length; i++) {
var pair = params[i].split('=');
dataObj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
if (!'ids[]' in dataObj || dataObj['ids[]'] === null || dataObj['ids[]'] === undefined) {
dr_tips(0, '{dr_lang('没有选择内容')}');
return;
}
layer.open({
type: 2,
title: '{dr_lang('删除确认')}',
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '\'50%\', \'60%\'' : '"95%", "90%"'}],
btn: [lang['ok']],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
$(body).find('.form-group').removeClass('has-error');
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 5000
});
$.ajax({type: "POST",dataType:"json", url: url, data: $(body).find('#myform').serialize(),
success: function(json) {
layer.close(loading);
if (json.code == 1) {
layer.close(index);
$('#mytable').bootstrapTable('refresh');
} else {
$(body).find('#dr_row_'+json.data.field).addClass('has-error');
}
dr_tips(json.code, json.msg);
return false;
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
return false;
},
success: function(layero, index){
// 主要用于后台权限验证
dr_iframe_error(layer, index, 1);
},
content: url+'&'+data
});
}
function dr_scjt() {
$.ajax({
type: "POST",
dataType: "json",
url: "{dr_url($uriprefix.'/scjt_edit')}",
data: $("#myform").serialize(),
success: function(json) {
if (json.code == 1) {
dr_bfb('{dr_lang('生成内容')}', '', json.msg);
} else {
dr_cmf_tips(json.code, json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
}
</script>
<div class="note note-danger" {if !isset($get.submit) && !$is_show_search_bar}style="display: none"{/if} id="table-search-tool">
<div class="row table-search-tool">
<form action="{SELF}" method="get">
{dr_form_search_hidden($p)}
{if $is_category_show}
<div class="col-md-12 col-sm-12">
<label>
{$category_select}
</label>
</div>
{/if}
<div class="col-md-12 col-sm-12">
<label>
<select name="field" class="form-control">
<option value="id"> Id </option>
{loop $field $t}
{if dr_is_admin_search_field($t)}
<option value="{$t.fieldname}" {if $param.field==$t.fieldname}selected{/if}>{dr_lang($t.name)}</option>
{/if}
{/loop}
</select>
</label>
<label><i class="fa fa-caret-right"></i></label>
<label><input type="text" class="form-control" placeholder="" value="{$param['keyword']}" name="keyword" /></label>
</div>
<div class="col-md-12 col-sm-12">
<label>
<div class="input-group input-medium date-picker input-daterange" data-date="" data-date-format="yyyy-mm-dd">
<input type="text" class="form-control" value="{$param.date_form}" name="date_form">
<span class="input-group-addon"> {dr_lang('到')} </span>
<input type="text" class="form-control" value="{$param.date_to}" name="date_to">
</div>
</label>
</div>
<div class="col-md-12 col-sm-12">
<label><button id="table-search-tool-submit" type="button" class="btn blue btn-sm " name="submit" > <i class="fa fa-search"></i> {dr_lang('搜索')}</button></label>
<label><button id="table-search-tool-reset" type="reset" class="btn red btn-sm " name="reset" > <i class="fa fa-refresh"></i> {dr_lang('重置')}</button></label>
</div>
</form>
</div>
</div>
<div class="right-card-box">
<div id="toolbar" class="toolbar">
{$mytable.foot_tpl}
</div>
{template "mytable.html"}
</div>
{template "footer.html"}
+114
View File
@@ -0,0 +1,114 @@
{template "header.html"}
{template "api_list_date_search.html"}
<div class="note note-danger">
<div class="row table-search-tool">
<form action="{SELF}" method="get">
{dr_form_search_hidden(['field' => 'content'])}
{if $is_category_show}
<div class="col-md-12 col-sm-12">
<label>
{$category_select}
</label>
</div>
{/if}
<div class="col-md-12 col-sm-12">
<label><input type="text" class="form-control" placeholder="{dr_lang('全文搜索')}" value="{$param['keyword']}" name="keyword" /></label>
</div>
<div class="col-md-12 col-sm-12">
<label>
<div class="input-group input-medium date-picker input-daterange" data-date="" data-date-format="yyyy-mm-dd">
<input type="text" class="form-control" value="{$param.date_form}" name="date_form">
<span class="input-group-addon"> {dr_lang('到')} </span>
<input type="text" class="form-control" value="{$param.date_to}" name="date_to">
</div>
</label>
</div>
<div class="col-md-12 col-sm-12">
<label><button type="submit" class="btn blue btn-sm onloading" name="submit" > <i class="fa fa-search"></i> {dr_lang('搜索')}</button></label>
</div>
</form>
</div>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{if $ci->_is_admin_auth('del')}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button></label>
</div>
</div>
{/if}
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th class="{dr_sorting('cid')}" name="cid">{dr_lang('主题')}</th>
<th class="{dr_sorting('catid')}" name="cait" width="150">{dr_lang('栏目')}</th>
<th class="{dr_sorting('inputtime')}" name="inputtime" width="160">{dr_lang('编辑时间')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
<?php
$c=dr_string2array($t.content);
if ($t.cid) {
$url=dr_url(APP_DIR.'/home/edit',array('id'=>$t.cid, 'did'=>$t.id));
} else {
$url=dr_url(APP_DIR.'/home/add',array('did'=>$t.id));
}
$t['url'] = SITE_URL.'index.php?s='.APP_DIR.'&c=show&m=draft&id='.$t['id'];
$t['url'] = ADMIN_URL.(dr_url('api/slogin', ['url' => urlencode($t['url'])]));
?>
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td>{Function_list::title($c.title, null, $t)}</td>
<td>{Function_list::catid($t.catid, null, $t)}</td>
<td>{dr_date($t.inputtime)}</td>
<td>
{if $ci->_is_admin_auth('add')}
<label><a href="{$url}" class="btn btn-xs blue"> <i class="fa fa-edit"></i> {dr_lang('发布')}</a></label>
{/if}
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{if $mypages}
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
{/if}
</form>
</div>
{template "footer.html"}
@@ -0,0 +1,119 @@
{template "header.html"}
{template "api_list_date_search.html"}
<div class="note note-danger" id="table-search-tool">
<div class="row table-search-tool">
<form action="{SELF}" method="get">
{dr_form_search_hidden(['field' => 'content'])}
{if $is_category_show}
<div class="col-md-12 col-sm-12">
<label>
{$category_select}
</label>
</div>
{/if}
<div class="col-md-12 col-sm-12">
<label><input type="text" class="form-control" placeholder="{dr_lang('全文搜索')}" value="{$param['keyword']}" name="keyword" /></label>
</div>
<div class="col-md-12 col-sm-12">
<label>
<div class="input-group input-medium date-picker input-daterange" data-date="" data-date-format="yyyy-mm-dd">
<input type="text" class="form-control" value="{$param.date_form}" name="date_form">
<span class="input-group-addon"> {dr_lang('到')} </span>
<input type="text" class="form-control" value="{$param.date_to}" name="date_to">
</div>
</label>
</div>
<div class="col-md-12 col-sm-12">
<label><button type="submit" class="btn blue btn-sm onloading" name="submit" > <i class="fa fa-search"></i> {dr_lang('搜索')}</button></label>
</div>
</form>
</div>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
{if $ci->_is_admin_auth('edit')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/recovery_add')}', '{dr_lang('你确定要恢复它们吗?')}', 1)" class="btn green btn-sm"> <i class="fa fa-reply"></i> {dr_lang('恢复')}</button></label>
{/if}
{if $ci->_is_admin_auth('del')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button></label>
<label><button type="button" onclick="dr_ajax_confirm_url('{dr_url($uriprefix.'/recycle_del')}', '{dr_lang('你确定要清空回收站吗?')}', '')" class="btn red btn-sm"> <i class="fa fa-close"></i> {dr_lang('清空回收站')}</button></label>
{/if}
</div>
</div>
<div class="clearfix"></div>
<div class="table-scrollable table-clearfix">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th class="{dr_sorting('cid')}" name="cid">{dr_lang('主题')}</th>
<th class="{dr_sorting('catid')}" name="cait" width="150">{dr_lang('栏目')}</th>
<th class="{dr_sorting('uid')}" name="uid" width="130">{dr_lang('账号')}</th>
<th class="{dr_sorting('inputtime')}" name="inputtime" width="160">{dr_lang('删除时间')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
<?php
$c=dr_string2array($t.content);
$t['url'] = SITE_URL.'index.php?s='.APP_DIR.'&c=show&m=recycle&id='.$t['id'];
$t['url'] = ADMIN_URL.(dr_url('api/slogin', ['url' => urlencode($t['url'])]));
?>
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td>{Function_list::title($c[SITE_ID.'_'.APP_DIR]['title'], null, $c[SITE_ID.'_'.APP_DIR])}</td>
<td>{Function_list::catid($t.catid, null)}</td>
<td>{Function_list::uid($t.uid, null)}</td>
<td>{dr_date($t.inputtime)}</td>
<td>
{if $ci->_is_admin_auth('edit')}
<label><a href="{dr_url(APP_DIR.'/recycle/edit',array('id'=>$t.id))}" class="btn btn-xs blue"> <i class="fa fa-edit"></i> {dr_lang('修改')}</a></label>
{/if}
<label><a href="{$t.url}" target="_blank" class="btn btn-xs green"> <i class="fa fa-search"></i> {dr_lang('查看内容')}</a></label>
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{if $mypages}
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
{/if}
</form>
</div>
{template "footer.html"}
+116
View File
@@ -0,0 +1,116 @@
{template "header.html"}
{template "api_list_date_search.html"}
<div class="note note-danger" id="table-search-tool">
<div class="row table-search-tool">
<form action="{SELF}" method="get">
{dr_form_search_hidden(['field' => 'content'])}
{if $is_category_show}
<div class="col-md-12 col-sm-12">
<label>
{$category_select}
</label>
</div>
{/if}
<div class="col-md-12 col-sm-12">
<label><input type="text" class="form-control" placeholder="{dr_lang('全文搜索')}" value="{$param['keyword']}" name="keyword" /></label>
</div>
<div class="col-md-12 col-sm-12">
<label>
<div class="input-group input-medium date-picker input-daterange" data-date="" data-date-format="yyyy-mm-dd">
<input type="text" class="form-control" value="{$param.date_form}" name="date_form">
<span class="input-group-addon"> {dr_lang('到')} </span>
<input type="text" class="form-control" value="{$param.date_to}" name="date_to">
</div>
</label>
</div>
<div class="col-md-12 col-sm-12">
<label><button type="submit" class="btn blue btn-sm onloading" name="submit" > <i class="fa fa-search"></i> {dr_lang('搜索')}</button></label>
</div>
</form>
</div>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
{if $ci->_is_admin_auth('del')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button></label>
{/if}
{if $ci->_is_admin_auth('edit')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/add')}&at=post', '{dr_lang('你确定要批量发布它们吗?')}', 1)" class="btn green btn-sm"> <i class="fa fa-post"></i> {dr_lang('批量立即发布')}</button></label>
{/if}
</div>
</div><div class="clearfix"></div>
<div class="table-scrollable table-clearfix">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th class="{dr_sorting('id')}" name="id">{dr_lang('主题')}</th>
<th class="{dr_sorting('catid')}" name="cait" width="150">{dr_lang('栏目')}</th>
<th class="{dr_sorting('uid')}" name="uid" width="150">{dr_lang('发布者')}</th>
<th class="{dr_sorting('posttime')}" name="posttime" width="170">{dr_lang('定时发布时间')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
<?php
$c=dr_string2array($t.content);
$t['url'] = SITE_URL.'index.php?s='.APP_DIR.'&c=show&m=time&id='.$t['id'];
$t['url'] = ADMIN_URL.(dr_url('api/slogin', ['url' => urlencode($t['url'])]));
?>
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td>{Function_list::title($c.title, null, $t)}</td>
<td>{Function_list::catid($t.catid, null, $t)}</td>
<td>{Function_list::uid($t.uid, null, $t)}</td>
<td>{dr_date($t.posttime, null, 'red')}</td>
<td>
{if $ci->_is_admin_auth('edit')}
<label><a href="{dr_url($uriprefix.'/edit', ['id'=>$t.id])}" class="btn btn-xs green"> <i class="fa fa-edit"></i> {dr_lang('修改内容')}</a></label>
<label><a href="javascript:dr_iframe('{dr_lang('修改发布时间')}', '{dr_url($uriprefix.'/time_edit', ['id'=>$t.id])}', 0, '450px');" class="btn btn-xs blue"> <i class="fa fa-clock-o"></i> {dr_lang('修改发布时间')}</a></label>
{/if}
<label style="color:red">{$t.result}</label>
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{if $mypages}
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
{/if}
</form>
</div>
{template "footer.html"}
+304
View File
@@ -0,0 +1,304 @@
{template "header.html"}
{template "api_list_date_search.html"}
<div id="dr_cyshly" style="display: none">
<label style="width:100%;margin-top:10px; margin-bottom: 20px"><select class="form-control" onchange="javascript:$('#dr_verify_msg').val(this.value)">
<option value=""> -- </option>
{loop $verify_msg $t}
<option value="{$t}">{$t}</option>
{/loop}
</select></label>
</div>
<script type="text/javascript">
// ajax 批量操作确认
function dr_ajax_option_verify(url, msg) {
layer.confirm(
msg,
{
icon: 3,
shade: 0,
title: lang['ts'],
btn: [lang['ok'], lang['esc']]
}, function(index){
layer.close(index);
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 100000000
});
if (is_mobile_cms == 1) {
width = height = '90%';
}
url+= '&is_all=1&'+$("#myform").serialize();
layer.open({
type: 2,
title: "{dr_lang('批量审核')}",
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '\'50%\', \'60%\'' : '"95%", "90%"'}],
btn: [lang['ok'], lang['esc']],
yes: function(index, layero){
layer.close(loading);
var body = layer.getChildFrame('body', index);
$(body).find('.form-group').removeClass('has-error');
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 5000
});
$.ajax({type: "POST",dataType:"json", url: url, data: $(body).find('#myform').serialize(),
success: function(json) {
layer.close(loading);
if (json.code == 1) {
layer.close(index);
setTimeout("window.location.reload(true)", 2000)
} else {
$(body).find('#dr_row_'+json.data.field).addClass('has-error');
}
dr_tips(json.code, json.msg);
return false;
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError);
}
});
return false;
},
success: function(layero, index){
// 主要用于后台权限验证
layer.close(loading);
dr_iframe_error(layer, index, 1);
},
content: url+'&is_ajax=1'
});
});
}
function dr_ajax_option_verify_back(url) {
var msg = "<div style='width: 100%;'><p>{dr_lang('拒绝理由')}</p><p><textarea id=\"dr_verify_msg\" class=\"form-control\" style=\"width:100%;height:100px\"></textarea></p>"+$('#dr_cyshly').html()+"</div>";
layer.confirm(
msg,
{
shade: 0,
title: "{dr_lang('拒绝')}",
btn: [lang['ok'], lang['esc']]
}, function(index){
var note = $("#dr_verify_msg").val();
if (note == null || note == undefined) {
dr_tips(0, "{dr_lang('拒绝理由未填写')}");
return;
}
layer.close(index);
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 100000000
});
url+= '&is_all=1&at=0&note='+note+'&'+$("#myform").serialize();
layer.open({
type: 2,
title: "{dr_lang('批量审核')}",
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '\'50%\', \'60%\'' : '"95%", "90%"'}],
btn: [lang['ok'], lang['esc']],
yes: function(index, layero){
layer.close(loading);
var body = layer.getChildFrame('body', index);
$(body).find('.form-group').removeClass('has-error');
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 5000
});
$.ajax({type: "POST",dataType:"json", url: url, data: $(body).find('#myform').serialize(),
success: function(json) {
layer.close(loading);
if (json.code == 1) {
layer.close(index);
setTimeout("window.location.reload(true)", 2000)
} else {
$(body).find('#dr_row_'+json.data.field).addClass('has-error');
}
dr_tips(json.code, json.msg);
return false;
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError);
}
});
return false;
},
success: function(layero, index){
// 主要用于后台权限验证
layer.close(loading);
dr_iframe_error(layer, index, 1);
},
content: url+'&is_ajax=1'
});
});
}
</script>
<div class="note note-danger" id="table-search-tool">
<div class="row table-search-tool">
<form action="{SELF}" method="get">
{dr_form_search_hidden(['field' => 'content'])}
<div class="col-md-12 col-sm-12">
<label>
<select name="status" class="form-control">
{loop $status_select $n $t}
<option value="{$n}" {if dr_strlen($n) && $n == $param.status} selected{/if}>{$t}</option>
{/loop}
</select>
</label>
</div>
{if $is_category_show}
<div class="col-md-12 col-sm-12">
<label>
{$category_select}
</label>
</div>
{/if}
<div class="col-md-12 col-sm-12">
<label><input type="text" class="form-control" placeholder="{dr_lang('全文搜索')}" value="{$param['keyword']}" name="keyword" /></label>
</div>
<div class="col-md-12 col-sm-12">
<label>
<div class="input-group input-medium date-picker input-daterange" data-date="" data-date-format="yyyy-mm-dd">
<input type="text" class="form-control" value="{$param.date_form}" name="date_form">
<span class="input-group-addon"> {dr_lang('到')} </span>
<input type="text" class="form-control" value="{$param.date_to}" name="date_to">
</div>
</label>
</div>
<div class="col-md-12 col-sm-12">
<label><button type="submit" class="btn blue btn-sm onloading" name="submit" > <i class="fa fa-search"></i> {dr_lang('搜索')}</button></label>
</div>
</form>
</div>
</div>
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
{if $ci->_is_admin_auth('del')}
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button></label>
{/if}
{if !$is_post_user}
<label><button type="button" onclick="dr_ajax_option_verify('{dr_url($uriprefix.'/index')}&at=1', '{dr_lang('你确定要批量通过它们吗?')}')" class="btn green btn-sm"> <i class="fa fa-check-circle"></i> {dr_lang('通过')}</button></label>
<label><button type="button" onclick="dr_ajax_option_verify_back('{dr_url($uriprefix.'/index')}&at=0')" class="btn blue btn-sm"> <i class="fa fa-times-circle"></i> {dr_lang('拒绝')}</button></label>
{/if}
</div>
</div>
<div class="clearfix"></div>
<div class="table-scrollable table-clearfix">
{else}
<div class="table-scrollable">
{/if}
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th style="text-align:center" class="{dr_sorting('isnew')}" name="isnew" width="70">{dr_lang('类型')}</th>
<th class="{dr_sorting('cid')}" name="cid">{dr_lang('主题')}</th>
{if $is_category_show}<th class="{dr_sorting('catid')}" name="catid" width="120">{dr_lang('栏目')}</th>{/if}
<th class="{dr_sorting('status')}" name="status" width="90" style="text-align:center">{dr_lang('状态')}</th>
<th class="{dr_sorting('uid')}" name="uid" width="150">{dr_lang('账号')}</th>
<th class="{dr_sorting('inputtime')}" name="inputtime" width="160">{dr_lang('提交时间')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
<?php
$c=dr_string2array($t.content);
$t['url'] = SITE_URL.'index.php?s='.APP_DIR.'&c=show&m=verify&id='.$t['id'];
$t['url'] = ADMIN_URL.(dr_url('api/slogin', ['url' => urlencode($t['url'])]));
?>
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del') || $ci->_is_admin_auth('edit')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td style="text-align:center">
{if $t.isnew}
<span class="label label-success"> {dr_lang('新增')} </span>
{else}
<span class="label label-danger"> {dr_lang('修改')} </span>
{/if}
</td>
<td>{Function_list::title($c.title, null, $t)}</td>
{if $is_category_show}<td>{Function_list::catid($t.catid, null, $t)}</td>{/if}
<td style="text-align:center">
{if $t.status}
<span class="label label-warning"> {dr_lang('%s审中', $t.status)} </span>
{else}
<span class="label label-danger"> {dr_lang('被退稿')} </span>
{/if}
</td>
<td>{Function_list::uid($t.uid, null, $t)}</td>
<td>{dr_date($t.inputtime)}</td>
<td>
{if $is_post_user}
<label><a href="{$t.url}" class="btn btn-xs blue" target="_blank"> <i class="fa fa-send"></i> {dr_lang('查看')}</a></label>
{if $ci->_is_admin_auth('edit') && $t.uid == $member.uid && $t.status == 0}
<label><a href="{dr_url($uriprefix.'/edit', ['id' => $t.id])}" class="btn btn-xs green"> <i class="fa fa-edit"></i> {dr_lang('修改')}</a></label>
{/if}
{else}
{if $ci->_is_admin_auth('edit')}
<label><a href="{dr_url($uriprefix.'/edit', ['id' => $t.id])}" class="btn btn-xs green"> <i class="fa fa-edit"></i> {dr_lang('处理')}</a></label>
{loop $clink $a}
<label><a class="btn {if $a.color}{$a.color}{/if} btn-xs" href="{str_replace(array('{mid}', '{id}', '{cid}'), array(APP_DIR, $t.id, $t.id), $a.url)}"><i class="{$a.icon}"></i> {dr_lang($a.name)} {if $a.field} ({intval($t[$a['field']])}){/if} </a></label>
{/loop}
{/if}
{/if}
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{if $mypages}
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
{/if}
</form>
</div>
{template "footer.html"}
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<!--[if IE 8]> <html lang="zh-cn" class="ie8 no-js"> <![endif]-->
<!--[if IE 9]> <html lang="zh-cn" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<html lang="zh-cn">
<!--<![endif]-->
<head>
<meta charset="utf-8" />
<title>{dr_clearhtml($msg)}</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1" name="viewport" />
<link href="{ROOT_THEME_PATH}assets/icon/css/icon.css" rel="stylesheet" type="text/css" />
<link href="{THEME_PATH}assets/global/css/admin.min.css?v={CMF_UPDATE_TIME}" rel="stylesheet" type="text/css" />
<link href="{THEME_PATH}assets/global/css/my.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">var admin_file = '{SELF}'; var assets_path = '{THEME_PATH}assets/';</script>
<script src="{LANG_PATH}lang.js" type="text/javascript"></script>
<script src="{ROOT_THEME_PATH}assets/global/plugins/jquery.min.js" type="text/javascript"></script>
<script src="{ROOT_THEME_PATH}assets/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="{ROOT_THEME_PATH}assets/js/cms.js" type="text/javascript"></script>
<script src="{ROOT_THEME_PATH}assets/global/scripts/app.min.js" type="text/javascript"></script>
</head>
<body style="background: #ffffff">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
<div style="padding: 20px;">
<ul class="list-group">
{loop $list $id $t}
<li class="list-group-item">
{$t.title}
<span id="content_{$id}" style="margin-top: 5px;float: right;"> <img width="15" src="{THEME_PATH}assets/images/loading-2.gif"> </span>
<iframe scrolling="yes" src="{$t.url}" style="width:100%; display: none" frameborder=1></iframe>
</li>
{/loop}
</ul>
</div>
</form>
</body>
</html>
+726
View File
@@ -0,0 +1,726 @@
{template "header.html"}
<script type="text/javascript">
{if $is_verify}
$(function () {
$('#dr_row_hits').hide();
});
{else}
{$auto_form_data_ajax}
{/if}
function dr_syncat() {
var title = '<i class="fa fa-refresh"></i> {dr_lang('同步到其他栏目')}';
var url = '{dr_url(MOD_DIR.'/home/syncat_edit')}&catid='+$('#dr_syncatid').val();
layer.open({
type: 2,
title: title,
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '"40%", "70%"' : '"95%", "90%"'}],
btn: [lang['ok']],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
$(body).find('.form-group').removeClass('has-error');
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 10000
});
$.ajax({type: "POST",dataType:"json", url: url, data: $(body).find('#myform').serialize(),
success: function(json) {
layer.close(loading);
if (json.code == 1) {
layer.close(index);
$('#dr_syncatid').val(json.data);
$('#dr_syncat_text').show();
$('#dr_syncat_num').html(json.msg);
} else {
dr_tips(json.code, json.msg);
}
return false;
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
return false;
},
content: url+'&is_iframe=1'
});
}
// 定时发布
function dr_ajax_time_submit() {
layer.open({
type: 2,
title: '<i class="fa fa-clock-o"></i> {dr_lang('定时发布')}',
fix:true,
scrollbar: false,
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '"500px", "450px"' : '"95%", "90%"'}],
btn: [lang['ok']],
success: function (json) {
if (json.code == 0) {
layer.close();
dr_tips(json.code, json.msg);
}
},
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
var loading = layer.load(2, {
time: 10000
});
var url = '{dr_url(APP_DIR.'/time/add')}';
var posttime = $(body).find('#posttime').val();
if (posttime.length < 5) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('发布时间必须填写')}");
return false;
}
$('#myform .form-group').removeClass('has-error');
$.ajax({
type: "POST",
dataType: "json",
url: url+"&posttime="+posttime,
data: $("#myform").serialize(),
success: function(json) {
layer.close(loading);
if (json.code > 0) {
dr_tips(1, json.msg);
setTimeout("window.location.href = '{dr_url(APP_DIR.'/time/index')}'", 2000);
} else {
dr_tips(0, json.msg);
if (json.data.field) {
$('#dr_row_'+json.data.field).addClass('has-error');
$('#dr_'+json.data.field).focus();
}
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
return false;
},
content: "{dr_url(APP_DIR.'/time/add')}&is_iframe=1"
});
}
// 退稿
function dr_ajax_tui_submit() {
layer.open({
type: 2,
title: '<i class="fa fa-sign-out"></i> {dr_lang('退稿')}',
fix:true,
scrollbar: false,
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '"40%", "70%"' : '"95%", "90%"'}],
btn: [lang['ok']],
success: function (json) {
if (json.code == 0) {
layer.close();
dr_tips(json.code, json.msg);
}
},
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
var loading = layer.load(2, {
time: 10000
});
var url = '{dr_url(APP_DIR.'/home/tuigao_edit')}&id={$id}';
var note = $(body).find('#dr_note').val();
var clear = $(body).find("input[name='clear']:checked").val();
if (note.length == 0) {
layer.closeAll('loading');
dr_tips(0, "{dr_lang('退稿理由必须填写')}");
return false;
}
$('#myform .form-group').removeClass('has-error');
$.ajax({
type: "POST",
dataType: "json",
url: url+"&note="+note+"&clear="+clear,
data: $("#myform").serialize(),
success: function(json) {
layer.close(loading);
if (json.code == 1) {
dr_tips(1, json.msg);
setTimeout("window.location.href = '{$reply_url}'", 2000);
} else {
dr_tips(0, json.msg);
if (json.data.field) {
$('#dr_row_'+json.data.field).addClass('has-error');
$('#dr_'+json.data.field).focus();
}
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
return false;
},
content: "{dr_url(APP_DIR.'/home/tui_edit')}&page=5&is_iframe=1"
});
}
function dr_ajax_verify_submit() {
$('#dr_is_draft').val(0);
dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$reply_url}');
}
$(function () {
{if isset($_GET['is_verify_iframe']) && $_GET['is_verify_iframe']}
setTimeout(function(){
$('#dr_is_draft').val(0);
$.ajax({
type: "POST",
dataType: "json",
url: '{dr_now_url()}',
data: $("#myform").serialize(),
success: function(json) {
if (json.code) {
if (json.data.htmlfile) {
// 执行生成htmljs
$.ajax({
type: "GET",
url: json.data.htmlfile,
dataType: "jsonp",
success: function(json){ },
error: function(){ }
});
}
if (json.data.htmllist) {
// 执行生成htmljs
$.ajax({
type: "GET",
url: json.data.htmllist,
dataType: "jsonp",
success: function(json){ },
error: function(){ }
});
}
parent.$('#content_{$id}').addClass("badge badge-success");
parent.$('#content_{$id}').html('{dr_lang("成功")}');
} else {
parent.$('#content_{$id}').addClass("badge badge-danger");
parent.$('#content_{$id}').html(json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
parent.$('#content_{$id}').addClass("badge badge-danger");
parent.$('#content_{$id}').html('{dr_lang("执行失败")}');
}
});
}, 5000);
{/if}
});
</script>
{if $post_notice_msg}
<div class="note note-danger">
<p>{$post_notice_msg}</p>
</div>
{/if}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
{if $mymerge && $ci->module['setting']['merge']}
<div class="tabbable-line margin-bottom-20">
<ul class="nav nav-tabs">
<li class="active">
<a toid="dr_default" data-toggle="tab">{dr_lang('基本内容')}</a>
</li>
{loop $mymerge $t}
<li>
<a toid="dr_row_{$t}" data-toggle="tab">{$field[$t]['name']}</a>
</li>
{/loop}
{if $diyfield}
<li>
<a toid="dr_orther" data-toggle="tab">{dr_lang('其他内容')}</a>
</li>
{/if}
</ul>
</div>
<script type="text/javascript">
$(function () {
$('.myfield-main .portlet.light.bordered').hide();
$('#dr_default').show();
$('.nav-tabs a').click(function () {
var tid = $(this).attr('toid');
$('.myfield-main .portlet.light.bordered').hide();
$('#'+tid).show();
});
});
</script>
{/if}
<div class="row ">
<div class="myfield-main {if !$is_right_field || $is_mobile}col-md-12{else}col-md-9{/if}">
<div class="portlet light bordered" id="dr_default">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold ">{dr_lang('基本内容')}</span>
</div>
<div class="actions">
{if $draft_list}
<div class="btn-group">
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="javascript:;" aria-expanded="false">
{dr_lang('草稿')}
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu">
<li>
<a href="{$draft_url}"> {dr_lang('查看原文')} </a>
</li>
{loop $draft_list $t}
<li>
<a href="{$draft_url}&did={$t.id}" {if $t.id==$did}style="color:red"{/if}> {dr_date($t.inputtime)} - {$t.title} </a>
</li>
{/loop}
</ul>
</div>
{/if}
<div class="btn-group">
<a class="btn" href="{$reply_url}"> <i class="fa fa-mail-reply"></i> {dr_lang('返回列表')}</a>
</div>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
<div class="form-group {if !$is_category_show}hide{/if}">
<label class="col-md-2 control-label">{dr_lang('栏目')}</label>
<div class="col-md-9">
{if $catid && $module['category'][$catid]['setting']['notedit']}
<label style="margin-top: 7px;">
<span class="label label-sm label-success circle">{$module['category'][$catid]['name']}</span>
</label>
<input type="hidden" id="dr_catid" name="catid" value="{$catid}">
{else}
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
<label style="margin-right:10px">{$select}</label>
{if $module['setting']['sync_category']}
{if !$id || $is_sync_cat}
<label style="margin-right:10px"><a href="javascript:;" onclick="dr_syncat()">[{dr_lang('同步发布到其他栏目')}]</a></label>
<label>
<input id="dr_syncatid" name="sync_cat" type="hidden" value="{$is_sync_cat}" />
<span id="dr_syncat_text" class="label label-success" style="display: {if $is_sync_cat}blank{else}none{/if};"><b id="dr_syncat_num">{php echo substr_count((string)$is_sync_cat, ',') + 1;}</b></span>
</label>
{else if $link_id != 0}
<label>{dr_lang('修改内容时会同步更新其他外联文档')}</label>
{/if}
{/if}
{if !$module['category'] && $ci->_is_admin_auth($module['dirname'].'/category/index')}
<label style="margin-right:10px"><a href="{dr_url($module['dirname'].'/category/index')}">[{dr_lang('栏目管理')}]</a></label>
{/if}
{/if}
</div>
</div>
{$myfield}
</div>
</div>
</div>
{if $diyfield}
<div class="portlet light bordered" id="dr_orther">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold ">{dr_lang('其他内容')}</span>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
{$diyfield}
</div>
</div>
</div>
{/if}
</div>
<div class="{if !$is_right_field || $is_mobile}col-md-12{else}col-md-3{/if} my-sysfield" {if !$is_right_field} style="display: none"{/if}>
<div class="portlet light bordered">
<div class="portlet-body">
<div class="form-body">
{dr_rp($sysfield, ['md-2', 'md-10'], 'md-12')}
{if $is_flag}
<div class="form-group">
<label class="col-md-12 control-label">{dr_lang('推荐位')}</label>
<div class="col-md-12">
<div class="mt-checkbox-list">
{loop $is_flag $n $f}
<label class="mt-checkbox mt-checkbox-outline"> {dr_lang($f.name)}
<input {if isset($verify_next) && $verify_next!==9} disabled=""{/if} type="checkbox" {if dr_in_array($n, $my_flag)} checked{/if} value="{$n}" name="flag[]" />
<span></span>
</label>
{/loop}
</div>
{if isset($verify_next) && $verify_next!==9}
<span class="help-block">{dr_lang('只有在最终审核状态时才能设置推荐位')}</span>
{/if}
</div>
</div>
{/if}
{if !$is_verify && $is_post_time}
<div class="form-group">
<label class="col-md-12 control-label">{dr_lang('定时发布时间')}</label>
<div class="col-md-12">
<span class="form-date input-group">
<div class="input-group date field_date_post_inputtime">
<input id="posttime" name="posttime" type="text" style="width:160px;" value="{dr_date($posttime, 'Y-m-d H:i:s')}" required="required" class="form-control ">
<span class="input-group-btn">
<button class="btn default date-set" type="button">
<i class="fa fa-calendar"></i>
</button>
</span>
</div>
<script>
$(function(){
$(".field_date_post_inputtime").datetimepicker({
isRTL: App.isRTL(),
format: "yyyy-mm-dd hh:ii:ss",
showMeridian: true,
autoclose: true,
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left"),
todayBtn: true
});
});
</script>
</span>
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
</div>
{if $is_verify}
<div class="row ">
<div class="col-md-12 ">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold ">{dr_lang('内容审核')}</span>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
{if $status}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('当前状态')}</label>
<div class="col-md-9">
<p class="form-control-static">
<span class="label label-warning"> {dr_lang('%s审中', $status)} </span>
</p>
</div>
</div>
{else}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('当前状态')}</label>
<div class="col-md-9">
<p class="form-control-static">
<span class="label label-danger"> {dr_lang('被拒绝')} </span>
</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('处理账号')}</label>
<div class="col-md-9">
<p class="form-control-static">
{Function_list::author($verify.backinfo.author, [], $verify.backinfo)}
</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('处理时间')}</label>
<div class="col-md-9">
<p class="form-control-static">
{dr_date($verify.backinfo.optiontime)}
</p>
</div>
</div>
{if $verify.backinfo.backcontent}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('拒绝理由')}</label>
<div class="col-md-9">
<p class="form-control-static">
{$verify.backinfo.backcontent}
</p>
</div>
</div>
{/if}
{/if}
{if $verify_step[$status]['name']}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('当前审核')}</label>
<div class="col-md-9">
<p class="form-control-static"> {$verify_step[$status]['name']} </p>
</div>
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('下级审核')}</label>
<div class="col-md-9">
<p class="form-control-static"> {$verify_step[$verify_next]['name']} </p>
</div>
</div>
{if $is_post_user}
<div class="form-group">
<label class="col-md-2 control-label">审核人</label>
<div class="col-md-9">
<p class="form-control-static">
{Function_list::author($verify.backinfo.author, [], $verify.backinfo)}
</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">审核时间</label>
<div class="col-md-9">
<p class="form-control-static">
{dr_date($verify.backinfo.optiontime)}
</p>
</div>
</div>
{if $verify.backinfo.backcontent}
<div class="form-group">
<label class="col-md-2 control-label">拒绝理由</label>
<div class="col-md-9">
<p class="form-control-static">
{$verify.backinfo.backcontent}
</p>
</div>
</div>
{/if}
{else}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('操作状态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_close_msg').hide();$('.dr_verify_time').show()" name="verify[status]" value="1" {if !$back_note} checked{/if} /> {dr_lang('通过')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_close_msg').show();$('.dr_verify_time').hide()" name="verify[status]" value="0" {if $back_note} checked{/if} /> {dr_lang('拒绝')} <span></span></label>
</div>
</div>
</div>
{if $verify_next == 9}
<div class="form-group dr_verify_time">
<label class="col-md-2 control-label">{dr_lang('发布时间')}</label>
<div class="col-md-9">
<span class="form-date input-group">
<div class="input-group date field_date_inputtime">
<input id="verify_posttime" name="verify_posttime" type="text" style="width:160px;" placeholder="{dr_lang('立即发布')}" required="required" class="form-control ">
<span class="input-group-btn">
<button class="btn default date-set" type="button">
<i class="fa fa-calendar"></i>
</button>
</span>
</div>
<script>
$(function(){
$(".field_date_inputtime").datetimepicker({
isRTL: App.isRTL(),
format: "yyyy-mm-dd hh:ii:ss",
showMeridian: true,
autoclose: true,
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left"),
todayBtn: true
});
});
</script>
</span>
<span class="help-block">{dr_lang('可设置定时发布,定时时间不能晚于当前时间')}</span>
</div>
</div>
{/if}
<div class="form-group dr_close_msg" style="{if !$back_note} display:none{/if}">
<label class="col-md-2 control-label">{dr_lang('拒绝理由')}</label>
<div class="col-md-9">
<textarea id="dr_verify_msg" class="form-control" style="height:100px" name="verify[msg]">{$back_note}</textarea>
</div>
</div>
<div class="form-group dr_close_msg" style="{if !$back_note} display:none{/if}">
<label class="col-md-2 control-label">{dr_lang('常用理由')}</label>
<div class="col-md-9">
<label>
<select class="form-control" onchange="javascript:$('#dr_verify_msg').val(this.value)">
<option value=""> -- </option>
{loop $verify_msg $t}
<option value="{$t}">{$t}</option>
{/loop}
</select>
</label>
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
</div>
{/if}
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
{if !defined('IS_MODULE_RECYCLE')}
{if $is_verify}
{if dr_is_app('ai_helper')}
<label><button type="button" onclick="dr_ajax_ai_verify()" class="btn red"> <i class="fa fa-magic"></i> {dr_lang('AI审核')}</button></label>
<script type="text/javascript">
function dr_ajax_ai_verify() {
var url = '{dr_url('ai_helper/api/verify_todo')}&id={$id}&mid={MOD_DIR}';
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: $('#myform').serialize(),
success: function(json) {
if (json.code) {
layer.open({
type: 2,
fix:true,
scrollbar: false,
maxmin: true,
resize: true,
shadeClose: true,
shade: 0,
btn: [dr_lang('填入审核说明'), dr_lang('取消')],
title: '{dr_lang('AI审核')}',
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '"60%", "70%"' : '"95%", "90%"'}],
content: json.msg,
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
var reportText = $(body).find('#dr_result').text() || '';
if (!reportText || reportText.length < 10) {
dr_cmf_tips(0, '{dr_lang('你还没有点击开始审核')}');
return;
}
if ($('#dr_verify_msg').length) {
$('#dr_verify_msg').val(reportText);
$('.dr_close_msg').show();
$('input[name="verify[status]"][value="0"]').prop('checked', true);
dr_cmf_tips(1, '{dr_lang('已填入审核说明请确认通过或拒绝后提交审核')}');
} else {
dr_cmf_tips(0, '{dr_lang('当前页无审核说明输入框')}');
}
layer.close(index);
}
});
} else {
dr_cmf_tips(0, json.msg || '{dr_lang('请求失败')}');
}
},
error: function(xhr, status, err) {
dr_cmf_tips(0, err || '{dr_lang('请求失败')}');
}
});
}
</script>
{/if}
<label><button type="button" onclick="dr_ajax_verify_submit()" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('提交审核')}</button></label>
{else if $is_post_time}
<label><button type="button" onclick="$('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}&posttime={dr_date($posttime, 'Y-m-d H:i:s')}', 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存内容')}</button></label>
{else}
{if dr_is_app('ai_helper')}
<label><button type="button" onclick="dr_ajax_ai_create()" class="btn red"> <i class="fa fa-magic"></i> {dr_lang('AI创作')}</button></label>
<script type="text/javascript">
function dr_ajax_ai_create() {
var url = '{dr_url('ai_helper/api/create_todo')}&id={$id}&mid={MOD_DIR}';
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: $('#myform').serialize(),
success: function(json) {
if (json.code) {
layer.open({
type: 2,
fix:true,
scrollbar: false,
maxmin: true,
resize: true,
shadeClose: true,
shade: 0,
btn: [dr_lang('插入内容'), dr_lang('取消')],
title: '{dr_lang('AI创作')}',
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '"60%", "70%"' : '"95%", "90%"'}],
content: json.msg,
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
var newcontent = $(body).find('#dr_result').html();
// 判断字数
var newcontent_length = newcontent.length;
if (newcontent_length < 10) {
dr_cmf_tips(0, '{dr_lang('你还没有点击开始创作')}');
return;
}
if (newcontent_length < 100) {
dr_cmf_tips(0, '{dr_lang('内容字数不足')}');
return;
}
// 插入内容
if ("undefined" == typeof UE){
$('#dr_content').summernote('reset');
$('#dr_content').summernote('pasteHTML', newcontent);
} else {
UE.getEditor('dr_content').setContent(newcontent);
}
layer.close(index);
}
});
} else {
dr_cmf_tips(0, json.msg || '{dr_lang('请求失败')}');
}
},
error: function(xhr, status, err) {
dr_cmf_tips(0, err || '{dr_lang('请求失败')}');
}
});
}
</script>
{/if}
<label><button type="button" onclick="$('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}&is_self=1', 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存内容')}</button></label>
<label><button type="button" onclick="$('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$post_url}&catid='+$('#dr_catid').val())" class="btn green"> <i class="fa fa-plus"></i> {dr_lang('保存再添加')}</button></label>
<label><button type="button" onclick="$('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$reply_url}')" class="btn yellow"> <i class="fa fa-mail-reply-all"></i> {dr_lang('保存并返回')}</button></label>
{if $ci->_is_admin_auth(MOD_DIR.'/draft/add')}
<label><button type="button" onclick="$('#dr_is_draft').val(1);dr_ajax_submit('{dr_now_url()}', 'myform', '2000')" class="btn red"> <i class="fa fa-pencil"></i> {dr_lang('保存草稿')}</button></label>
{/if}
{if !$id && $ci->_is_admin_auth(MOD_DIR.'/time/add')}
<label><button type="button" onclick="dr_ajax_time_submit()" class="btn dark"> <i class="fa fa-clock-o"></i> {dr_lang('定时发布')}</button></label>
{/if}
{if $is_form_cache}
<label><button type="button" onclick="auto_form_data_delete()" class="btn red"> <i class="fa fa-trash"></i> {dr_lang('删除历史缓存')}</button></label>
{/if}
{/if}
{if $id && !$is_verify && !$is_post_user && $ci->_is_admin_auth(MOD_DIR.'/verify/index')}
<label><button type="button" onclick="dr_ajax_tui_submit()" class="btn green"> <i class="fa fa-sign-out"></i> {dr_lang('退稿')}</button></label>
{/if}
{else}
<label><a href="{$reply_url}" class="btn yellow"> <i class="fa fa-mail-reply-all"></i> {dr_lang('返回列表')}</a></label>
<label><button type="button" onclick="$('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$reply_url}')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('恢复此内容')}</button></label>
{/if}
{if $web_url}
<label><a href="{$web_url}" target="_blank" class="btn dark"> <i class="fa fa-link"></i> {dr_lang('浏览')}</a></label>
{/if}
</div>
</div>
</form>
{template "footer.html"}
+73
View File
@@ -0,0 +1,73 @@
{template "header.html"}
<script type="text/javascript">
$(function() {
$('.tabs-left').height($(document).height());
});
</script>
<form class="form-horizontal" method="post" role="form" id="myform">
{$form}
<div class="portlet-body">
{if $page==0}
<div class="form-body" style="margin-left:40px">
<div class="form-group">
<div class="mt-radio-inline">
<label class="mt-radio">
<input type="radio" onclick="$('.myflag').show()" name="clear" value="0" checked=""> {dr_lang('启用')}
<span></span>
</label>
<label class="mt-radio">
<input type="radio" onclick="$('.myflag').hide()" name="clear" value="1"> {dr_lang('清空推荐位')}
<span></span>
</label>
</div>
</div>
{if $module['setting']['flag']}
<div class="form-group myflag">
<div class="mt-checkbox-list">
{loop $module['setting']['flag'] $i $t}
<label class="mt-checkbox mt-checkbox-outline">
<input name="flag[]" type="checkbox" value="{$i}"> <i class="{dr_icon($t.icon)}"></i> {$t.name}
<span></span>
</label>
{/loop}
</div>
</div>
{else}
<div style="color:red">{dr_lang('推荐位尚未设置')}</div>
{/if}
</div>
{else if $page==1}
<div class="form-group">
<div class="col-md-4"> {$select} </div>
<span class="help-block">{dr_lang('可以同步发送到多个栏目之中')}</span>
</div>
{else if $page==5}
<div class="form-group">
<div class="col-md-12">
<div class="mt-radio-inline">
<label class="mt-radio">
<input type="radio" name="clear" value="0" checked=""> {dr_lang('原文保持可阅读')}
<span></span>
</label>
<label class="mt-radio">
<input type="radio" name="clear" value="1"> {dr_lang('原文不可阅读')}
<span></span>
</label>
</div>
<span class="help-block">{dr_lang('不可阅读表示退稿后不能阅读内容')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label ajax_name">{dr_lang('退稿理由')}</label>
<div class="col-md-8">
<textarea class="form-control" id="dr_note" name="note" rows="5"></textarea>
<span class="help-block">{dr_lang('将选中内容状态设置为[审核被拒]状态,用户可以重新编辑,再投稿审核')}</span>
</div>
</div>
{/if}
</div>
</div>
</form>
{template "footer.html"}
+20
View File
@@ -0,0 +1,20 @@
{template "header.html"}
<form class="form-horizontal" role="form" id="myform">
{$form}
<div class="form-body">
<div class="form-group">
<div class="col-xs-12" id="multi-select">
{$select}
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
{dr_lang('同步发布的内容都会继承主内容,删除时会同步删除')}
</div>
</div>
</div>
</form>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
{template "footer.html"}
+50
View File
@@ -0,0 +1,50 @@
{template "header.html"}
<form class="form-horizontal" role="form" id="myform">
{$form}
<div class="form-body">
<div class="form-group">
<label class="control-label col-xs-3 ajax_name"> {dr_lang('发布时间')}</label>
<div class="col-xs-9">
<span class="form-date input-group">
<link href="{THEME_PATH}assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.css" rel="stylesheet" type="text/css" />
<link href="{THEME_PATH}assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker.min.css" rel="stylesheet" type="text/css" />
<link href="{THEME_PATH}assets/global/plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css" />
<script src="{THEME_PATH}assets/global/plugins/moment.min.js" type="text/javascript"></script>
<script src="{THEME_PATH}assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.finecms.js" type="text/javascript"></script>
<script src="{THEME_PATH}assets/global/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.finecms.js" type="text/javascript"></script>
<div class="input-group date field_date_inputtime">
<input id="posttime" name="posttime" type="text" style="width:160px;" value="{$posttime}" required="required" class="form-control ">
<span class="input-group-btn">
<button class="btn default date-set" type="button">
<i class="fa fa-calendar"></i>
</button>
</span>
</div>
<script>
$(function(){
$(".field_date_inputtime").datetimepicker({
isRTL: App.isRTL(),
format: "yyyy-mm-dd hh:ii:ss",
showMeridian: true,
autoclose: true,
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left"),
todayBtn: true
});
});
</script>
</span>
<span class="help-block">{dr_lang('定时时间不能晚于当前时间')}</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3 ajax_name"> {dr_lang('功能提醒')}</label>
<div class="col-xs-9">
<div class="form-control-static">{dr_lang('服务器需要开启自动任务功能')}</div>
</div>
</div>
</div>
</form>
{template "footer.html"}
+238
View File
@@ -0,0 +1,238 @@
{template "header.html"}
<script type="text/javascript">
$(function() {
{if empty($data['SITE_CLOSE'])}
$('.dr_close_msg').hide();
{else}
$('.dr_close_msg').show();
{/if}
{if empty($data['SITE_INDEX_HTML'])}
$('.dr_index_time').hide();
{else}
$('.dr_index_time').show();
{/if}
dr_theme({$is_theme});
});
function dr_theme(id) {
if (id == 1) {
$("#dr_theme_html").html($("#dr_web").html());
} else {
$("#dr_theme_html").html($("#dr_local").html());
}
}
</script>
<div id="dr_local" style="display: none">
<label class="col-md-2 control-label">{dr_lang('主题风格')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[SITE_THEME]">
<option value="default"> -- </option>
{loop $theme $t}
<option{if $t==$data['SITE_THEME']} selected=""{/if} value="{$t}">{$t}</option>
{/loop}
</select></label>
<span class="help-block">{dr_lang('位于网站主站根目录下:/static/风格名称/')}</span>
</div>
</div>
<div id="dr_web" style="display: none">
<label class="col-md-2 control-label">{dr_lang('远程资源')}</label>
<div class="col-md-9">
<input class="form-control input-xlarge" type="text" placeholder="http://" name="data[SITE_THEME2]" value="{php echo $data['SITE_THEME'];}">
<span class="help-block">{dr_lang('网站将调用此地址的css、js、图片等静态资源,以http开头并以/结尾')}</span>
</div>
</div>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-globe"></i> {dr_lang('网站设置')} </a>
</li>
<li class="">
<a href="{dr_url("api/demo", ['name'=>'pc'])}" target="_blank"> <i class="fa fa-desktop"></i> {dr_lang('预览网站')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站名称')}</label>
<div class="col-md-9">
<label><input class="form-control input-large" type="text" name="data[SITE_NAME]" id="dr_name" value="{htmlspecialchars((string)$data['SITE_NAME'])}"></label>
<span class="help-block">{dr_lang('简短的网站名称,显示在后台标题位置')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('系统状态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_close_msg').hide()" name="data[SITE_CLOSE]" value="0" {if empty($data['SITE_CLOSE'])}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_close_msg').show()" name="data[SITE_CLOSE]" value="1" {if $data['SITE_CLOSE']}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('当关闭网站时,除管理员之外的用户将无法访问(静态页面除外)')}</span>
</div>
</div>
<div class="form-group dr_close_msg">
<label class="col-md-2 control-label">{dr_lang('关闭理由')}</label>
<div class="col-md-9">
<textarea class="form-control" style="height:100px" name="data[SITE_CLOSE_MSG]">{php echo $data['SITE_CLOSE_MSG'] ? $data['SITE_CLOSE_MSG'] : '网站升级中....';}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('首页静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_index_time').show()" name="data[SITE_INDEX_HTML]" value="1" {if $data['SITE_INDEX_HTML']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_index_time').hide()" name="data[SITE_INDEX_HTML]" value="0" {if empty($data['SITE_INDEX_HTML'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('开启后,系统会定时删除index.html文件,当有人访问首页时才会自动生成新的index.html文件')}</span>
</div>
</div>
<div class="form-group dr_index_time">
<label class="col-md-2 control-label">{dr_lang('生成周期')}</label>
<div class="col-md-9">
<div class="input-inline input-small">
<div class="input-group">
<input type="text" name="data[SITE_INDEX_TIME]" value="{php echo $data['SITE_INDEX_TIME'] ? intval($data['SITE_INDEX_TIME']) : 10;}" class="form-control">
<span class="input-group-addon">
{dr_lang('小时')}
</span>
</div>
</div>
<span class="help-inline"> {dr_lang('每隔多少小时生成首页静态文件')} </span>
<p>
{if $run_time}
<font color="green">{dr_lang('最近自动执行时间为:%s', $run_time)}</font>
{else}
<font color="red">{dr_lang('当前服务器没有设置自动任务脚本')}</font>
{/if}
</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站语言')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[SITE_LANGUAGE]">
<option value="zh-cn"> -- </option>
{loop $lang $t}
<option{if $t==$data['SITE_LANGUAGE']} selected=""{/if} value="{$t}">{$t}</option>
{/loop}
</select></label>
<span class="help-block">{dr_lang('为网站设置不同的语言包')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('风格模式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="dr_theme(1)" name="theme" value="1" {if $is_theme}checked{/if} /> {dr_lang('远程地址')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="dr_theme(0)" name="theme" value="0" {if !$is_theme}checked{/if} /> {dr_lang('本网站资源')} <span></span></label>
</div>
</div>
</div>
<div class="form-group" id="dr_theme_html">
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模板目录')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[SITE_TEMPLATE]">
<option value="default"> -- </option>
{loop $template_path $t}
<option{if $t==$data['SITE_TEMPLATE']} selected=""{/if} value="{$t}">{$t}</option>
{/loop}
</select></label>
<span class="help-block">{dr_lang('存放网站模板html文件的目录')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模板路径')}</label>
<div class="col-md-9">
{if IS_DEV}
<div class="form-control-static"><label>{TPLPATH}pc/<font color="red">{SITE_TEMPLATE}</font>/home/index.html</label></div>
{else}
<div class="form-control-static"><label>/{dr_lang('模板目录')}/pc/<font color="red">{SITE_TEMPLATE}</font>/home/index.html</label></div>
{/if}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站时区')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[SITE_TIMEZONE]">
<option value=""> -- </option>
<option value="-12" {if $data['SITE_TIMEZONE']=="-12"}selected{/if}>(GMT -12:00)</option>
<option value="-11" {if $data['SITE_TIMEZONE']=="-11"}selected{/if}>(GMT -11:00)</option>
<option value="-10" {if $data['SITE_TIMEZONE']=="-10"}selected{/if}>(GMT -10:00)</option>
<option value="-9" {if $data['SITE_TIMEZONE']=="-9"}selected{/if}>(GMT -09:00)</option>
<option value="-8" {if $data['SITE_TIMEZONE']=="-8"}selected{/if}>(GMT -08:00)</option>
<option value="-7" {if $data['SITE_TIMEZONE']=="-7"}selected{/if}>(GMT -07:00)</option>
<option value="-6" {if $data['SITE_TIMEZONE']=="-6"}selected{/if}>(GMT -06:00)</option>
<option value="-5" {if $data['SITE_TIMEZONE']=="-5"}selected{/if}>(GMT -05:00)</option>
<option value="-4" {if $data['SITE_TIMEZONE']=="-4"}selected{/if}>(GMT -04:00)</option>
<option value="-3.5" {if $data['SITE_TIMEZONE']=="-3.5"}selected{/if}>(GMT -03:30)</option>
<option value="-3" {if $data['SITE_TIMEZONE']=="-3"}selected{/if}>(GMT -03:00)</option>
<option value="-2" {if $data['SITE_TIMEZONE']=="-2"}selected{/if}>(GMT -02:00)</option>
<option value="-1" {if $data['SITE_TIMEZONE']=="-1"}selected{/if}>(GMT -01:00)</option>
<option value="0" {if $data['SITE_TIMEZONE']=="0"}selected{/if}>(GMT)</option>
<option value="1" {if $data['SITE_TIMEZONE']=="1"}selected{/if}>(GMT +01:00)</option>
<option value="2" {if $data['SITE_TIMEZONE']=="2"}selected{/if}>(GMT +02:00)</option>
<option value="3" {if $data['SITE_TIMEZONE']=="3"}selected{/if}>(GMT +03:00)</option>
<option value="3.5" {if $data['SITE_TIMEZONE']=="3.5"}selected{/if}>(GMT +03:30)</option>
<option value="4" {if $data['SITE_TIMEZONE']=="4"}selected{/if}>(GMT +04:00)</option>
<option value="4.5" {if $data['SITE_TIMEZONE']=="4.5"}selected{/if}>(GMT +04:30)</option>
<option value="5" {if $data['SITE_TIMEZONE']=="5"}selected{/if}>(GMT +05:00)</option>
<option value="5.5" {if $data['SITE_TIMEZONE']=="5.5"}selected{/if}>(GMT +05:30)</option>
<option value="5.75" {if $data['SITE_TIMEZONE']=="5.75"}selected{/if}>(GMT +05:45)</option>
<option value="6" {if $data['SITE_TIMEZONE']=="6"}selected{/if}>(GMT +06:00)</option>
<option value="6.5" {if $data['SITE_TIMEZONE']=="6.6"}selected{/if}>(GMT +06:30)</option>
<option value="7" {if $data['SITE_TIMEZONE']=="7"}selected{/if}>(GMT +07:00)</option>
<option value="8" {if $data['SITE_TIMEZONE']=="" || $data['SITE_TIMEZONE']=="8"}selected{/if}>(GMT +08:00)</option>
<option value="9" {if $data['SITE_TIMEZONE']=="9"}selected{/if}>(GMT +09:00)</option>
<option value="9.5" {if $data['SITE_TIMEZONE']=="9.5"}selected{/if}>(GMT +09:30)</option>
<option value="10" {if $data['SITE_TIMEZONE']=="10"}selected{/if}>(GMT +10:00)</option>
<option value="11" {if $data['SITE_TIMEZONE']=="11"}selected{/if}>(GMT +11:00)</option>
<option value="12" {if $data['SITE_TIMEZONE']=="12"}selected{/if}>(GMT +12:00)</option>
</select></label>
<span class="help-block">{dr_lang('例如中国地区选择“GMT +08:00”表示东八区')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('时间格式')}</label>
<div class="col-md-9">
<label><input class="form-control" type="text" name="data[SITE_TIME_FORMAT]" value="{htmlspecialchars((string)$data['SITE_TIME_FORMAT'])}"></label>
<span class="help-block">{dr_lang('网站时间显示格式与date函数一致,默认Y-m-d H:i:s')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('服务器时间')}</label>
<div class="col-md-9">
<div class="form-control-static">{dr_date(time(), 'Y-m-d H:i:s')}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
{template "footer.html"}
+248
View File
@@ -0,0 +1,248 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('网站域名')} </a>
</li>
{if IS_USE_MODULE && $module}
<li class="{if $page==1}active{/if}">
<a href="#tab_1" data-toggle="tab" onclick="$('#dr_page').val('1')"> <i class="fa fa-table"></i> {dr_lang('模块域名')} </a>
</li>
{/if}
<li>
<a href="#tab_3" data-toggle="tab" onclick="dr_check_domain()"> <i class="fa fa-refresh"></i> {dr_lang('域名检测')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('电脑域名')}</label>
<div class="col-md-4">
<div class="input-group" style="width: 300px;">
<input type="text" {if SITE_ID == 1} readonly{/if} name="data[site_domain]" value="{htmlspecialchars((string)$data['site_domain'])}" class="form-control input-large">
<span class="input-group-btn">
{if SITE_ID == 1}
<a class="btn red" href="javascript:dr_iframe('{dr_lang("变更域名")}', '{dr_url("module/site_domain/edit")}', '450px', '400px');"><i class="fa fa-edit"></i> {dr_lang('变更')}</a>
{else}
<a class="btn blue" href="{SITE_URL}" target="_blank"><i class="fa fa-send"></i> {dr_lang('访问')}</a>
{/if}
</span>
</div>
<span class="help-block">{dr_lang('域名格式:www.xxx.com')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('手机域名')}</label>
<div class="col-md-9">
<div class="input-group" style="width: 300px;">
<input class="form-control input-large" readonly type="text" value="{htmlspecialchars((string)$data['mobile_domain'])}"></label>
<span class="input-group-btn">
<a class="btn red" href="{dr_url("module/site_mobile/index")}"><i class="fa fa-edit"></i> {dr_lang('变更')}</a>
</span>
</div>
<span class="help-block">{dr_lang('手机访问时的域名,通常m.xxx.com')}</span>
</div>
</div>
{if SITE_ID > 1}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('Web目录')}</label>
<div class="col-md-9">
<div class="input-group">
<input type="text" name="data[webpath]" id="dr_html_dir" value="{htmlspecialchars((string)$data['webpath'])}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_test_html_dir('dr_html_dir')" type="button"><i class="fa fa-code"></i> {dr_lang('测试')}</button>
</span>
</div>
<span class="help-block">{dr_lang('本网站的目录,必须填写一个有效的目录,并设置可写权限')}</span>
</div>
</div>
{/if}
</div>
</div>
<div class="tab-pane {if $page==1}active{/if}" id="tab_1">
<div class="form-body form">
{loop $module $dir $t}
{if !$t.share}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('%s电脑域名', $t.name)}</label>
<div class="col-md-9">
{if $t.error}
<span class="help-block" style="color:#ed6b75;margin-top:7px;">{$t.error}</span>
{else}
<div class="input-group" style="width: 300px;">
<input type="text" name="data[module_{$dir}]" value="{htmlspecialchars((string)$data['module_'.$dir])}" class="form-control">
<span class="input-group-btn">
<a class="btn red" href="javascript:dr_help(750);"><i class="fa fa-book"></i> {dr_lang('说明')}</a>
</span>
</div>
{/if}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('%s手机域名', $t.name)}</label>
<div class="col-md-9">
{if $t.error}
<span class="help-block" style="color:#ed6b75;margin-top:7px;">{$t.error}</span>
{else}
<div class="input-group" style="width: 300px;">
<input type="text" name="data[module_mobile_{$dir}]" value="{htmlspecialchars((string)$data['module_mobile_'.$dir])}" class="form-control">
<span class="input-group-btn">
<a class="btn red" href="javascript:dr_help(750);"><i class="fa fa-book"></i> {dr_lang('说明')}</a>
</span>
</div>
<span class="help-block">{dr_lang('如果绑定了手机域名,这里必须要绑定域名')}</span>
{/if}
</div>
</div>
<div class="form-group" style="margin-bottom: 30px;">
<label class="col-md-2 control-label">{dr_lang('%s模块Web目录', $t.name)}</label>
<div class="col-md-9">
{if $t.error}
<span class="help-block" style="color:#ed6b75;margin-top:7px;">{$t.error}</span>
{else}
<div class="input-group">
<input type="text" name="data[webpath_{$dir}]" id="dr_html_dir_{$dir}" value="{htmlspecialchars((string)$data['webpath_'.$dir])}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_test_html_dir('dr_html_dir_{$dir}')" type="button"><i class="fa fa-code"></i> {dr_lang('测试')}</button>
</span>
</div>
<span class="help-block">{dr_lang('本模块的Web目录,必须填写一个有效的目录,并设置可写权限')}</span>
{/if}
</div>
</div>
{/if}
{/loop}
</div>
</div>
<div class="tab-pane " id="tab_3">
<div class="form-body form">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('域名检测结果')}</label>
<div class="col-md-9">
<div id="dr_domain" style="margin-top: -12px;">
</div>
</div>
</div>
</div>
</iv>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
</div>
<form class="form-horizontal">
<div class="portlet bordered light myfbody">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject">{dr_lang('服务器绑定域名说明')}</span>
<span class="caption-helper">{dr_lang('以下域名需要在服务器上进行绑定,也可以找空间商帮你操作')}</span>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
{if $data['site_domain']}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('电脑域名')}</label>
<div class="col-md-9">
<span class="form-control-static">{$data['site_domain']}</span>
<span class="help-block">{dr_lang('绑定目录:')}{php echo dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', '') : WEBPATH;}</span>
</div>
</div>
{/if}
{if $data['mobile_domain']}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('手机域名')}</label>
<div class="col-md-9">
<span class="form-control-static">{$data['mobile_domain']}</span>
<span class="help-block">{dr_lang('绑定目录:')}{php echo dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', SITE_MOBILE_DIR.'/') : WEBPATH.SITE_MOBILE_DIR.'/';}</span>
</div>
</div>
{/if}
{loop $module $dir $t}
{if !$t.error}
{if $data['module_'.$dir]}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('%s电脑域名', $t.name)}</label>
<div class="col-md-9">
<span class="form-control-static">{$data['module_'.$dir]}</span>
<span class="help-block">{dr_lang('绑定目录:')}{php echo dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, $dir, '') : WEBPATH;}</span>
</div>
</div>
{/if}
{if $data['module_mobile_'.$dir]}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('%s手机域名', $t.name)}</label>
<div class="col-md-9">
<span class="form-control-static">{$data['module_mobile_'.$dir]}</span>
<span class="help-block">{dr_lang('绑定目录:')}{php echo dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, $dir, 'mobile/') : WEBPATH.'mobile/';}</span>
</div>
</div>
{/if}
{/if}
{/loop}
</div>
</div>
</div>
</form>
<script>
function dr_check_domain() {
$.ajax({
type: "POST",
dataType: "text",
url: "{dr_url('api/domain')}",
data: $("#myform").serialize(),
success: function(html) {
$("#dr_domain").html(html);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);;
}
});
}
</script>
{template "footer.html"}
@@ -0,0 +1,56 @@
{template "header.html"}
<style>
body {
overflow: hidden
}
</style>
<form class="form-horizontal" method="post" role="form" id="myform">
{$form}
<div class="form-body">
{if $is_fclient}
{dr_lang('当前网站不能修改主域名,请到[%s]上修改主域名再进行数据通信操作', $fcname)}
{else}
<div class="form-group">
<div class="col-xs-12">
<div class="input-group" style="width: 100%">
<input type="text" id="dr_domain" placeholder="{dr_lang('输入新域名')}" type="text" name="domain" class="form-control ">
<span class="input-group-btn">
<a class="btn green" href="javascript:dr_test_domain_dir('dr_domain');"><i class="fa fa-send"></i> {dr_lang('测试')}</a>
</span>
</div>
<div class="form-control-static" id="dr_domian_error" style="color: red;display: none"></div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
<p class="form-control-static"> {dr_lang('例如:www.test.com,不能包含/符号')} </p>
<p class="form-control-static"> {dr_lang('域名变更需要提前把新域名绑定到本网站')} </p>
</div>
</div>
{/if}
</div>
</form>
<script>
function dr_test_domain_dir(id) {
$('#dr_domian_error').html('{dr_lang('正在测试中...')}');
$('#dr_domian_error').show();
$.ajax({type: "GET",dataType:"json", url: admin_file+"?c=api&m=test_site_domain&v="+encodeURIComponent($("#"+id).val()),
success: function(json) {
if (json.code) {
dr_tips(json.code, json.msg);
$('#dr_domian_error').hide();
} else {
$('#dr_domian_error').html(json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
}
</script>
{template "footer.html"}
+393
View File
@@ -0,0 +1,393 @@
{template "header.html"}
<div class="note note-danger">
<p>{dr_lang('水印仅限于本地存储的图片文件,此处设置针对远程图片无效')}</p>
</div>
<link href="{ROOT_THEME_PATH}assets/global/plugins/jquery-fileupload/css/jquery.fileupload.css?v={CMF_UPDATE_TIME}" rel="stylesheet" type="text/css" />
<script src="{ROOT_THEME_PATH}assets/global/plugins/jquery-fileupload/js/jquery.fileupload.min.js?v={CMF_UPDATE_TIME}" type="text/javascript"></script>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-photo"></i> {dr_lang('水印设置')} </a>
</li>
<li class="{if $page==1}active{/if}">
<a href="#tab_1" data-toggle="tab" onclick="$('#dr_page').val('1')"> <i class="fa fa-cog"></i> {dr_lang('缩略图设置')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==1}active{/if}" id="tab_1">
<div class="form-body">
<div class="form-group " >
<label class="col-md-2 control-label">{dr_lang('缩略图格式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="image[ext]" value="0" {if empty($image['ext'])}checked{/if} /> JPG <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="image[ext]" value="1" {if $image['ext']}checked{/if} /> WEBP <span></span></label>
</div>
<span class="help-block">{dr_lang('缩略图扩展名格式选择')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('缩略图存储目录')}</label>
<div class="col-md-9">
<div class="input-group input-xlarge">
<input class="form-control " type="text" id="dr_cache_dir" name="image[cache_path]" value="{htmlspecialchars((string)$image['cache_path'])}" >
<span class="input-group-btn">
<button class="btn blue" onclick="dr_test_domain_dir('dr_cache_dir')" type="button"><i class="fa fa-code"></i> {dr_lang('测试')}</button>
</span>
</div>
<span class="help-block">{dr_lang('绝对路径请以“/”开头,默认uploadfile/thumb/')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('缩略图访问URL地址')}</label>
<div class="col-md-9">
<div class="input-group input-xlarge">
<input class="form-control " id="dr_cache_url" type="text" name="image[cache_url]" value="{htmlspecialchars((string)$image['cache_url'])}" >
<span class="input-group-btn">
<button class="btn blue" onclick="dr_test_thumb_domain()" type="button"><i class="fa fa-wrench"></i> {dr_lang('检测')}</button>
</span>
</div>
<span class="help-block">{dr_lang('缩略图文件访问地址,可单独指定域名,默认/uploadfile/thumb/')}</span>
</div>
</div>
<div class="form-group" style="display: none" id="dr_test_thumb_domain">
<label class="col-md-2 control-label">{dr_lang('目录检测结果')}</label>
<div class="col-md-9" style="padding-top: 3px; line-height: 25px; color:green" id="dr_test_thumb_domain_result">
</div>
</div>
</div>
</div>
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('水印位置')}</label>
<div class="col-md-9">
<div class="btn-group fc-3x3" data-toggle="buttons">
{loop $locate $i $t}
<label class="btn btn-default {if $data.locate == $i} active{/if} {if dr_strpos($i, 'bottom')!==false} btn2{/if}">
<input type="radio" name="data[locate]" {if $data.locate == $i}checked{/if} value="{$i}" class="toggle"> {dr_lang($t)}
</label>
{/loop}
</div>
<span class="help-block">{dr_lang('选择水印在图片中的位置')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('水印类型')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="dr_type(0)" name="data[type]" value="0" {if empty($data['type'])}checked{/if} /> {dr_lang('图片')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="dr_type(1)" name="data[type]" value="1" {if $data['type']}checked{/if} /> {dr_lang('文字')} <span></span></label>
</div>
</div>
</div>
<div class="form-group dr_sy dr_sy_1">
<label class="col-md-2 control-label">{dr_lang('文字字体')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[wm_font_path]">
{loop $waterfile $t}
{if strpos($t, '.ttf') !== false}
<option {if $t==$data['wm_font_path']} selected=""{/if} value="{$t}">{$t}</option>
{/if}
{/loop}
</select></label>
<label class="wm-fileupload-font"><div style="margin-bottom:5px;" class="btn green btn-sm fileinput-button"><i class="fa fa-plus"></i> <span>{dr_lang('上传')}</span> <input type="file" name="file_data"> </div> </label>
<span class="help-block">{dr_lang('自定义水印字体文件cache/watermark/***.ttf')}</span>
</div>
</div>
<div class="form-group dr_sy dr_sy_1">
<label class="col-md-2 control-label">{dr_lang('水印文字')}</label>
<div class="col-md-5">
<input name="data[wm_text]" value="{htmlspecialchars((string)$data['wm_text'])}" type="text" class="form-control">
<span class="help-block">{dr_lang('如果为中文,先要水印目录中添加中文字体')}</span>
</div>
</div>
<div class="form-group dr_sy dr_sy_1">
<label class="col-md-2 control-label">{dr_lang('水印文字大小')}</label>
<div class="col-md-9">
<label><input name="data[wm_font_size]" value="{intval($data['wm_font_size'])}" type="text" class="form-control"></label>
<span class="help-block">{dr_lang('字体大小,单位px像素')}</span>
</div>
</div>
<div class="form-group dr_sy dr_sy_1">
<label class="col-md-2 control-label">{dr_lang('水印文字颜色')}</label>
<div class="col-md-9" style="padding-top: 2px;">
<label><input type="hidden" id="hue-demo" data-control="hue" class="form-control demo" name="data[wm_font_color]" value="{htmlspecialchars((string)$data['wm_font_color'])}"></label>
</div>
</div>
<div class="form-group dr_sy dr_sy_0">
<label class="col-md-2 control-label">{dr_lang('水印文件')}</label>
<div class="col-md-9">
<label><select class="form-control" name="data[wm_overlay_path]">
{loop $waterfile $t}
{if strpos($t, '.jpg') !== false || strpos($t, '.jpeg') !== false || strpos($t, '.png') !== false}
<option {if $t==$data['wm_overlay_path']} selected=""{/if} value="{$t}">{$t}</option>
{/if}
{/loop}
</select></label>
<label class="wm-fileupload-img"><div style="margin-bottom:5px;" class="btn green btn-sm fileinput-button"><i class="fa fa-plus"></i> <span>{dr_lang('上传')}</span> <input type="file" name="file_data"> </div> </label>
<span class="help-block">{dr_lang('自定义图片水印文件位于/cache/watermark/')}</span>
</div>
</div>
<div class="form-group dr_sy dr_sy_0">
<label class="col-md-2 control-label">{dr_lang('水印图片透明度')}</label>
<div class="col-md-9">
<label><input name="data[wm_opacity]" value="{intval($data.wm_opacity)}" type="text" class="form-control" placeholder="{dr_lang('px')}"></label>
<span class="help-block">{dr_lang('设置范围:1~100,表示水印图片的透明度数,可以预览看效果')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('水印图片内边距')}</label>
<div class="col-md-9">
<label><input name="data[wm_padding]" value="{intval($data.wm_padding)}" type="text" class="form-control" placeholder="{dr_lang('px')}"></label>
<span class="help-block">{dr_lang('内边距,以像素为单位,是水印与图片边缘之间的距离')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('水印图片偏移量')}</label>
<div class="col-md-9">
<div class="input-inline input-small">
<div class="input-group">
<span class="input-group-addon">{dr_lang('水平')}</span>
<input type="text" name="data[wm_hor_offset]" value="{intval($data.wm_hor_offset)}" class="form-control" placeholder="px">
</div>
</div>
<div class="input-inline input-small">
<div class="input-group">
<span class="input-group-addon">{dr_lang('垂直')}</span>
<input type="text" name="data[wm_vrt_offset]" value="{intval($data.wm_vrt_offset)}" class="form-control" placeholder="px">
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('图片大小限制')}</label>
<div class="col-md-9">
<div class="input-inline input-large">
<div class="input-group">
<span class="input-group-addon">{dr_lang('宽大于')}</span>
<input type="text" name="data[width]" value="{intval($data.width)}" class="form-control" placeholder="px">
</div>
</div>
<div class="input-inline input-large">
<div class="input-group">
<span class="input-group-addon">{dr_lang('高大于')}</span>
<input type="text" name="data[height]" value="{intval($data.height)}" class="form-control" placeholder="px">
</div>
</div>
<span class="help-block">{dr_lang('对超过设定值的图片附件加水印,例如小尺寸的图片不水印')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('编辑器水印')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[ueditor]" value="0" {if empty($data['ueditor'])}checked{/if} /> {dr_lang('按编辑器属性')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[ueditor]" value="1" {if $data['ueditor']}checked{/if} /> {dr_lang('全部水印')} <span></span></label>
</div>
<span class="help-block">{dr_lang('是否对编辑器上传的图片进行强制水印')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('缩略图水印')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[thumb]" value="0" {if empty($data['thumb'])}checked{/if} /> {dr_lang('按调用参数')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[thumb]" value="1" {if $data['thumb']}checked{/if} /> {dr_lang('全部水印')} <span></span></label>
</div>
<span class="help-block">{dr_lang('是否对缩略图函数dr_thumb的图片进行强制水印')}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button></label>
<label><button type="button" onclick="dr_preview()" class="btn red"> <i class="fa fa-photo"></i> {dr_lang('预览水印')}</button></label>
</div>
</div>
</form>
<link href="{THEME_PATH}assets/global/plugins/bootstrap-colorpicker/css/colorpicker.css" rel="stylesheet" type="text/css" />
<link href="{THEME_PATH}assets/global/plugins/jquery-minicolors/jquery.minicolors.css" rel="stylesheet" type="text/css" />
<script src="{THEME_PATH}assets/global/plugins/bootstrap-colorpicker/js/bootstrap-colorpicker.js" type="text/javascript"></script>
<script src="{THEME_PATH}assets/global/plugins/jquery-minicolors/jquery.minicolors.min.js" type="text/javascript"></script>
<script type="text/javascript">
function dr_type(v) {
$('.dr_sy').hide();
$('.dr_sy_'+v).show();
}
function dr_preview() {
layer.open({
type: 2,
title: '{dr_lang('水印预览')}',
fix:true,
scrollbar: false,
shadeClose: true,
shade: 0,
area: [{php echo \Phpcmf\Service::IS_PC_USER() ? '\'50%\', \'60%\'' : '"95%", "90%"'}],
success: function(layero, index){
var body = layer.getChildFrame('body', index);
$(body).attr("style", "text-align:center");
},
content: '{dr_url("api/preview")}&'+$("#myform").serialize()+'&is_ajax=1'
});
}
$(function(){
// 初始化上传组件
$('.wm-fileupload-font').fileupload({
disableImageResize: false,
autoUpload: true,
maxFileSize: 2,
url: '{dr_url("module/site_image/upload_index")}&at=font',
dataType: 'json',
formData : {
'{csrf_token()}': '{csrf_hash()}',
},
progressall: function (e, data) {
// 上传进度条 all
var progress = parseInt(data.loaded / data.total * 100, 10);
layer.msg(progress+'%');
},
add: function (e, data) {
data.submit();
},
done: function (e, data) {
//console.log($(this).html());
dr_tips(data.result.code, data.result.msg);
if (data.result.code) {
setTimeout("window.location.reload(true)", 2000);
}
},
});
// 初始化上传组件
$('.wm-fileupload-img').fileupload({
disableImageResize: false,
autoUpload: true,
maxFileSize: 2,
url: '{dr_url("module/site_image/upload_index")}&at=img',
dataType: 'json',
formData : {
'{csrf_token()}': '{csrf_hash()}',
},
progressall: function (e, data) {
// 上传进度条 all
var progress = parseInt(data.loaded / data.total * 100, 10);
layer.msg(progress+'%');
},
add: function (e, data) {
data.submit();
},
done: function (e, data) {
//console.log($(this).html());
dr_tips(data.result.code, data.result.msg);
if (data.result.code) {
setTimeout("window.location.reload(true)", 2000);
}
},
});
$("#hue-demo").minicolors({
control: $(this).attr('data-control') || 'hue',
defaultValue: $(this).attr('data-defaultValue') || '',
inline: $(this).attr('data-inline') === 'true',
letterCase: $(this).attr('data-letterCase') || 'lowercase',
opacity: $(this).attr('data-opacity'),
position: $(this).attr('data-position') || 'bottom left',
change: function(hex, opacity) {
if (!hex) return;
if (opacity) hex += ', ' + opacity;
if (typeof console === 'object') {
console.log(hex);
}
},
theme: 'bootstrap'
});
dr_type({intval($data['type'])});
});
function dr_test_thumb_domain() {
// 延迟加载
var loading = layer.load(2, {
shade: [0.3,'#fff'], //0.1透明度的白色背景
time: 5000
});
$('#dr_test_domain').hide();
$.ajax({type: "POST",dataType:"json", url: admin_file+"?c=api&m=test_thumb_domain", data: $('#myform').serialize(),
success: function(json) {
layer.close(loading);
$('#dr_test_thumb_domain').show();
$('#dr_test_thumb_domain_result').html(json.msg);
return false;
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError);
}
});
}
function dr_test_domain_dir(id) {
$.ajax({type: "GET",dataType:"json", url: admin_file+"?c=api&m=test_attach_dir&v="+encodeURIComponent($("#"+id).val()),
success: function(json) {
dr_tips(json.code, json.msg, -1);
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
}
</script>
<style>
.btn-default.active, .btn-default:active, .btn-default:hover, .btn-default.active.focus {
border-color: #e7ecf1;
}
.fc-3x3 .btn2 {
border-bottom: 1px solid #e7ecf1;
}
</style>
{template "footer.html"}
+182
View File
@@ -0,0 +1,182 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('网站设置')} </a>
</li>
<li class="">
<a href="{dr_url("api/demo", ['name'=>'mobile'])}" target="_blank"> <i class="fa fa-mobile"></i> {dr_lang('预览网站')} </a>
</li>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
<div class="form-body">
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('访问模式')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_zsy').hide();$('.dr_mode_2').show();$('.dr_mode_0').hide();$('.dr_mode_1').hide()" name="data[mode]" value="-1" {if $data['mode']==-1}checked{/if} /> {dr_lang('关闭手机端(自适应模式)')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_zsy').show();$('.dr_mode_2').hide();$('.dr_mode_0').show();$('.dr_mode_1').hide()" name="data[mode]" value="0" {if empty($data['mode'])}checked{/if} /> {dr_lang('域名模式')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" onclick="$('.dr_zsy').show();$('.dr_mode_2').hide();$('.dr_mode_1').show();$('.dr_mode_0').hide()" name="data[mode]" value="1" {if $data['mode']==1}checked{/if} /> {dr_lang('目录模式')} <span></span></label>
</div>
</div>
</div>
<div class="form-group dr_mode_2" style="{if $data['mode'] == -1}{else}display: none{/if}">
<label class="col-md-2 control-label">{dr_lang('自动识别模板')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[auto2]" value="1" {if $data['auto']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[auto2]" value="0" {if empty($data['auto'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('手机设备访问时,自动识别mobile模板;关闭后始终采用PC模板')}</span>
</div>
</div>
<div class="form-group dr_mode_0" style="{if empty($data['mode'])}{else}display: none{/if}">
<label class="col-md-2 control-label">{dr_lang('手机域名')}</label>
<div class="col-md-9">
<div class="input-group" style="width: 300px;">
<input type="text" id="dr_domain" type="text" name="data[domain]" value="{htmlspecialchars((string)$data['domain'])}" class="form-control input-large">
<span class="input-group-btn">
<a class="btn green" href="javascript:dr_test_domain('dr_domain');"><i class="fa fa-send"></i> {dr_lang('测试域名')}</a>
</span>
</div>
<span class="help-block">{dr_lang('格式:m.test.com,不能包含/符号')}</span>
<div class="form-control-static" id="dr_domian_error" style="color: red;display: none"></div>
</div>
</div>
<div class="form-group dr_mode_1" style="{if $data['mode'] == 1}{else}display: none{/if}">
<label class="col-md-2 control-label">{dr_lang('手机目录')}</label>
<div class="col-md-9">
<div class="input-group" style="width:250px;">
<input type="text" id="dr_dirname" type="text" name="data[dirname]" value="{htmlspecialchars((string)$data['dirname'])}" class="form-control">
<span class="input-group-btn">
<a class="btn green" href="javascript:dr_test_dir('dr_dirname');"><i class="fa fa-send"></i> {dr_lang('生成目录')}</a>
</span>
</div>
<span class="help-block">{dr_lang('格式:mobile,不能包含/符号')}</span>
<div class="form-control-static" id="dr_dir_error" style="color: red;display: none"></div>
</div>
</div>
<div class="form-group dr_zsy" style="{if $data['mode']==-1}display:none{/if}">
<label class="col-md-2 control-label">{dr_lang('自动识别')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[auto]" value="1" {if $data['auto']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[auto]" value="0" {if empty($data['auto'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('未绑定移动端域名时自动识别移动端终端模板;绑定移动端域名时自动跳转到移动端域名上')}</span>
<span class="help-block">{dr_lang('当网站启用了CDN就不建议开启自动识别功能,会影响CDN的缓存加载,建议使用静态页面跳转的方式')}</span>
</div>
</div>
<div class="form-group dr_zsy" style="{if $data['mode']==-1}display:none{/if}">
<label class="col-md-2 control-label">{dr_lang('生成静态')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[tohtml]" value="1" {if $data['tohtml']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[tohtml]" value="0" {if empty($data['tohtml'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('当PC端执行生成静态栏目和内容的命令时,移动端也会生成相应的静态文件')}</span>
</div>
</div>
<div class="form-group ">
<label class="col-md-2 control-label">{dr_lang('将平板端排除')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[not_pad]" value="1" {if $data['not_pad']}checked{/if} /> {dr_lang('开启')} <span></span></label>
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[not_pad]" value="0" {if empty($data['not_pad'])}checked{/if} /> {dr_lang('关闭')} <span></span></label>
</div>
<span class="help-block">{dr_lang('平板端访问时不会识别为移动端界面,平板将访问PC界面')}</span>
</div>
</div>
<div class="form-group dr_zsy" style="{if $data['mode']==-1}display:none{/if}">
<label class="col-md-2 control-label">{dr_lang('风格路径')}</label>
<div class="col-md-9">
<div class="form-control-static"><label>{MOBILE_THEME_PATH}</label></div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('模板路径')}</label>
<div class="col-md-9">
{if IS_DEV}
<div class="form-control-static"><label>{TPLPATH}mobile/{SITE_TEMPLATE}/home/index.html</label></div>
{else}
<div class="form-control-static"><label>/{dr_lang('模板目录')}/mobile/{SITE_TEMPLATE}/home/index.html</label></div>
{/if}
</div>
</div>
{if !$is_tpl}
<div class="form-group ">
<label class="col-md-2 control-label">{dr_lang('模板提示')}</label>
<div class="col-md-9">
<div class="form-control-static" style="color:red"><label>{dr_lang('没有检测到你的手机端模板,将无法使用单独的手机界面')}</label></div>
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button>
</div>
</div>
</form>
<script>
function dr_test_domain(id) {
$('#dr_domian_error').html('{dr_lang('正在测试中...')}');
$('#dr_domian_error').show();
$.ajax({type: "GET",dataType:"json", url: admin_file+"?c=api&m=test_mobile_domain&v="+encodeURIComponent($("#"+id).val()),
success: function(json) {
if (json.code) {
dr_tips(json.code, json.msg);
$('#dr_domian_error').hide();
} else {
$('#dr_domian_error').html(json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
}
function dr_test_dir(id) {
$('#dr_dir_error').html('{dr_lang('正在测试中...')}');
$('#dr_dir_error').show();
$.ajax({type: "GET",dataType:"json", url: admin_file+"?c=api&m=test_mobile_dir&v="+encodeURIComponent($("#"+id).val()),
success: function(json) {
if (json.code) {
dr_tips(json.code, json.msg);
$('#dr_dir_error').hide();
} else {
$('#dr_dir_error').html(json.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_admin_alert_error(HttpRequest, ajaxOptions, thrownError)
}
});
}
</script>
{template "footer.html"}
+102
View File
@@ -0,0 +1,102 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title tabbable-line">
<ul class="nav nav-tabs" style="float:left;">
<li class="{if $page==0}active{/if}">
<a toid="dr_default" iid="0" data-toggle="tab"> {dr_lang('网站信息')} </a>
</li>
{loop $mymerge $i $t}
<li class="{if $page==($i+1)}active{/if}">
<a toid="dr_row_{$t}" iid="{$i+1}" data-toggle="tab">{$field[$t]['name']}</a>
</li>
{/loop}
{if $mymerge}
<script type="text/javascript">
$(function () {
$('.myfield-main .portlet').hide();
$('#dr_default').show();
$('.nav-tabs a').click(function () {
var tid = $(this).attr('toid');
var iid = $(this).attr('iid');
$('#dr_page').val(iid);
$('.myfield-main .portlet').hide();
$('#'+tid).show();
});
$('.mytitle').hide();
{if $page>0}
$('.myfield-main .portlet').hide();
$('#dr_row_{php echo $mymerge[$page-1];}').show();
{/if}
});
</script>
{/if}
</ul>
</div>
<div class="portlet-body">
<div class="myfield-main">
<div class="portlet light bordered" id="dr_default">
<div class="portlet-body">
<div class="form-body">
<div class="form-group" id="dr_row_logo">
<label class="col-md-2 control-label">{dr_lang('LOGO')}</label>
<div class="col-md-9">
{$logofield}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('网站名称')}</label>
<div class="col-md-9">
<label><input class="form-control input-large" type="text" name="data[SITE_NAME]" id="dr_name" value="{htmlspecialchars((string)$data['SITE_NAME'])}"></label>
<span class="help-block">{dr_lang('简短的网站名称,显示在后台标题位置')}</span>
</div>
</div>
<div class="form-group" id="dr_row_icp">
<label class="col-md-2 control-label">{dr_lang('ICP备案信息')}</label>
<div class="col-md-9">
<label><input class="form-control input-large" type="text" name="data[SITE_ICP]" value="{htmlspecialchars((string)$data['SITE_ICP'])}"></label>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('第三方统计代码')}</label>
<div class="col-md-9">
<textarea class="form-control" style="height:100px" name="data[SITE_TONGJI]">{$data['SITE_TONGJI']}</textarea>
</div>
</div>
{if $my_site_info}
{load "$my_site_info"}
{/if}
{$myfield}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button></label>
{if dr_is_app('mbdy') && $ci->_is_admin_auth()}<label><a class="btn yellow" href="javascript:dr_iframe_show('show', '{dr_url('mbdy/site/cms')}');"> <i class="fa fa-code"></i>
{dr_lang('前端调用')}</a></label>{/if}
</div>
</div>
</form>
{template "footer.html"}
+246
View File
@@ -0,0 +1,246 @@
{template "header.html"}
<script type="text/javascript">
$(function() {
dr_set_type({intval($type)});
});
function dr_set_type(id) {
$('.dr_type').hide();
$('.dr_type_'+id).show();
}
</script>
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="myfbody">
<div class="portlet bordered light ">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green-sharp">
{dr_lang('URL规则')}
</span>
</div>
<div class="actions">
<div class="btn-group">
<a class="btn" href="{$reply_url}"> <i class="fa fa-mail-reply"></i> {dr_lang('返回')}</a>
</div>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
{$myfield}
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('类别')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
{loop $ci->type $ii $name}
<label class="mt-radio">
<input onclick="dr_set_type({$ii})" {if $ii==$type}checked{/if} name="type" type="radio" value="{$ii}"> {$name}
<span></span>
</label>
{/loop}
</div>
</div>
</div>
<!--单页URL-->
<div class="form-group dr_type_0 dr_type">
<label class="col-md-2 control-label">{dr_lang('自定义页面')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[0][page]" value="{htmlspecialchars((string)$value.page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_page()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_0 dr_type">
<label class="col-md-2 control-label">{dr_lang('自定义页面分页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[0][page_page]" value="{htmlspecialchars((string)$value.page_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_page()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<!--共享模块-->
<div class="form-group dr_type_2 dr_type">
<label class="col-md-2 control-label">{dr_lang('搜索页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[2][search]" value="{htmlspecialchars((string)$value.search)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_search()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_2 dr_type">
<label class="col-md-2 control-label">{dr_lang('搜索分页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[2][search_page]" value="{htmlspecialchars((string)$value.search_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_search_page()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<!--独立模块-->
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('模块首页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][module]" value="{htmlspecialchars((string)$value.module)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_index()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('栏目页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][list]" value="{htmlspecialchars((string)$value.list)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_list()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('栏目分页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][list_page]" value="{htmlspecialchars((string)$value.list_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_list()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('内容页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][show]" value="{htmlspecialchars((string)$value.show)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_show()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('内容分页(可选)')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][show_page]" value="{htmlspecialchars((string)$value.show_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_show()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('搜索页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][search]" value="{htmlspecialchars((string)$value.search)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_search()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_1 dr_type">
<label class="col-md-2 control-label">{dr_lang('搜索分页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[1][search_page]" value="{htmlspecialchars((string)$value.search_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_search_page()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<!--共享模块-->
<div class="form-group dr_type_3 dr_type">
<label class="col-md-2 control-label">{dr_lang('栏目页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[3][list]" value="{htmlspecialchars((string)$value.list)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_list()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_3 dr_type">
<label class="col-md-2 control-label">{dr_lang('栏目分页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[3][list_page]" value="{htmlspecialchars((string)$value.list_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_list()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_3 dr_type">
<label class="col-md-2 control-label">{dr_lang('内容页')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[3][show]" value="{htmlspecialchars((string)$value.show)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_show()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group dr_type_3 dr_type">
<label class="col-md-2 control-label">{dr_lang('内容分页(可选)')}</label>
<div class="col-md-7">
<div class="input-group">
<input type="text" name="value[3][show_page]" value="{htmlspecialchars((string)$value.show_page)}" class="form-control">
<span class="input-group-btn">
<button class="btn blue" onclick="dr_url_module_show()" type="button"><i class="fa fa-code"></i> {dr_lang('提示')}</button>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('连接符号')}</label>
<div class="col-md-7">
<label>
<input type="text" name="catjoin" value="{htmlspecialchars((string)$value.catjoin)}" class="form-control">
</label>
<span class="help-block"> {dr_lang('针对pdirname的连接符号,默认为"/",如:china[连接符号]beijin')} </span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存内容')}</button></label>
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$post_url}')" class="btn green"> <i class="fa fa-plus"></i> {dr_lang('保存再添加')}</button></label>
<label><button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$reply_url}')" class="btn yellow"> <i class="fa fa-mail-reply-all"></i> {dr_lang('保存并返回')}</button></label>
</div>
</div>
</form>
{template "footer.html"}
+77
View File
@@ -0,0 +1,77 @@
{template header.html}
<script type="text/javascript">
function dr_test(obj, name, domain) {
$(obj).html('{dr_lang('在检测中')}');
$.ajax({
url: domain+"/rewrite-test.html",
type: 'GET',
timeout: 1000,
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "callback"
}).done(function(data) {
$(obj).html('{dr_lang('环境检测')}');
if (data.code) {
dr_tips(1, data.msg);
} else {
alert('域名【'+name+'】不支持伪静态,首先需要确定服务器支持rewrite模块并开启了,其次需要正确配置上面的方法');
}
}) .fail(function() {
$(obj).html('{dr_lang('环境检测')}');
alert('域名【'+name+'】不支持伪静态,首先需要确定服务器支持rewrite模块并开启了,其次需要正确配置上面的方法');
});
}
function dr_rewrite_config() {
$('#dr_write').hide();
$.ajax({
type: "GET",
url: "{dr_url('module/urlrule/rewrite_add')}",
dataType: "json",
success: function (data) {
if (data.code) {
dr_tips(1, data.msg);
$('#dr_write').show();
$('#dr_code').html(data.data.code);
$('#dr_error').html(data.data.error);
} else {
dr_tips(0, data.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
}
</script>
<div class="note note-danger">
<p>{dr_lang('当前服务器是:<b>%s</b>', $name)}</p>
</div>
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold">{$name}</span>
<span class="caption-helper">需要在服务器中配置,不懂的可以咨询服务器空间商</span>
</div>
</div>
<div class="portlet-body">
<p>{$note}</p>
{if $code}
<p><textarea class="form-control" style="width:90%; height:{php echo $count * 25;}px;">{$code}</textarea></p>
{/if}
<ul class="list-group" style="width:90%;">
{loop $domain $name $cname}
<li class="list-group-item">{$cname}{$name}
<span class="badge badge badge-danger" style="cursor: pointer" onClick="dr_test(this, '{$name}', '{dr_http_prefix($name)}')">{dr_lang('环境检测')} </span>
</li>
{/loop}
</ul>
</div>
</div>
</div>
{template footer.html}
+70
View File
@@ -0,0 +1,70 @@
{template "header.html"}
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{if $ci->_is_admin_auth('del')}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
<label><button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button>
</label>
{if !IS_OEM_CMS}
<label><button type="button" onclick="dr_help(1210)" class="btn default btn-sm"> <i class="fa fa-book"></i> {dr_lang('常用的规则代码')}</button>
</label>
{/if}
</div>
</div> {/if}
<div class="table-scrollable">
<table class="table table-noborder table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th style="text-align:center" class="{dr_sorting('type')}" name="type" width="140">{dr_lang('类型')}</th>
<th class="{dr_sorting('name')}" name="name">{dr_lang('名称')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td style="text-align:center"> <span class="badge badge-{$color[$t['type']]}"> {$ci->type[$t['type']]} </span></td>
<td>{$t.name}</td>
<td>
{if $ci->_is_admin_auth('edit')}
<label><a href="{dr_url($uriprefix.'/edit', ['id'=>$t.id])}" class="btn btn-xs green"> <i class="fa fa-edit"></i> {dr_lang('修改')}</a></label>
<label><a href="javascript:dr_admin_menu_ajax('{dr_url($uriprefix.'/copy_edit', ['id'=>$t.id])}');" class="btn btn-xs dark"> <i class="fa fa-copy"></i> {dr_lang('复制')}</a></label>
<label><button type="button" onclick="javascript:dr_iframe_show('{dr_lang('导出')}', '{dr_url($uriprefix.'/export_edit', ['id'=>$t.id])}');" class="btn blue btn-xs"> <i class="fa fa-mail-forward"></i> {dr_lang('导出')}</button></label>
{/if}
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
</form>
</div>
{template "footer.html"}
+113
View File
@@ -0,0 +1,113 @@
{template header.html}
<script type="text/javascript">
function dr_test(obj, name, domain) {
$(obj).html('{dr_lang('在检测中')}');
$.ajax({
url: domain+"/rewrite-test.html",
type: 'GET',
timeout: 1000,
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "callback"
}).done(function(data) {
$(obj).html('{dr_lang('环境检测')}');
if (data.code) {
dr_tips(1, data.msg);
} else {
alert('域名【'+name+'】不支持伪静态,首先需要确定服务器支持rewrite模块并开启了,其次需要正确配置上面的方法');
}
}) .fail(function() {
$(obj).html('{dr_lang('环境检测')}');
alert('域名【'+name+'】不支持伪静态,首先需要确定服务器支持rewrite模块并开启了,其次需要正确配置上面的方法');
});
}
function dr_rewrite_config() {
$('#dr_write').hide();
$.ajax({
type: "GET",
url: "{dr_url('module/urlrule/rewrite_add')}",
dataType: "json",
success: function (data) {
if (data.code) {
dr_tips(1, data.msg);
$('#dr_write').show();
$('#dr_code').html(data.data.code);
$('#dr_error').html(data.data.error);
} else {
dr_tips(0, data.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
dr_ajax_alert_error(HttpRequest, this, thrownError);
}
});
}
</script>
<div class="note note-danger">
<p>{dr_lang('当前服务器是:<b>%s</b>', $name)}</p>
</div>
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold">{$name}</span>
<span class="caption-helper">需要在服务器中配置,不懂的可以咨询服务器空间商</span>
</div>
</div>
<div class="portlet-body">
<p>{$note}</p>
{if $code}
<p><textarea class="form-control" style="width:90%; height:{php echo $count * 25;}px;">{$code}</textarea></p>
{/if}
<ul class="list-group" style="width:90%;">
{loop $domain $name $cname}
<li class="list-group-item">{$cname}{$name}
<span class="badge badge badge-danger" style="cursor: pointer" onClick="dr_test(this, '{$name}', '{dr_http_prefix($name)}')">{dr_lang('环境检测')} </span>
</li>
{/loop}
</ul>
</div>
<p>伪静态URL解析规则配置文件:/config/rewrite.php </p>
<p>使用自定义URL之后必须要设置解析规则,否则是无法正常打开页面的</p>
<p>
<a href="javascript:;" class="btn green" onClick="dr_rewrite_config()"> {dr_lang('生成解析规则')} </a>
<a href="javascript:;" class="btn green" onClick="dr_help(642)"> {dr_lang('在线帮助')} </a>
</p>
</div>
</div>
<div class="portlet light bordered" id="dr_write" style="display: none">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green sbold">生成结果</span>
</div>
</div>
<div class="alert alert-danger margin-top-30">
<p>生成的代码不一定准确,仅供参考语法</p>
<p>一定一定一定不要全部复制到配置文件中,一定要逐条调试</p>
<p>规则的优先级别一定要根据正则表达式的优先级别来写,否则会出现指向错乱的情况</p>
</div>
<div class="portlet-body">
<div id="dr_code"></div>
</div>
<div class="portlet-body" id="dr_error" style="color: red">
</div>
</div>
<style>
#dr_code textarea{
margin: 5px 0;
}
#dr_code {
line-height: 20px;
color: #999;
}
</style>
{template footer.html}
+111
View File
@@ -0,0 +1,111 @@
{template "header.html"}
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
{$form}
<div class="portlet bordered light myfbody">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-green-sharp">
{dr_lang('审核流程')}
</span>
</div>
<div class="actions">
<div class="btn-group">
<a class="btn" href="{$reply_url}"> <i class="fa fa-mail-reply"></i> {dr_lang('返回')}</a>
</div>
</div>
</div>
<div class="portlet-body">
<div class="form-body">
<div class="form-group" id='dr_row_name'>
<label class="col-md-2 control-label">{dr_lang('名称')}</label>
<div class="col-md-7">
<label>
<input type="text" name="data[name]" value="{htmlspecialchars((string)$name)}" class="form-control">
</label>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('修改数据时')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio">
<input {if !$value.edit}checked{/if} name="value[edit]" type="radio" value="0"> {dr_lang('不审核')}
<span></span>
</label>
<label class="mt-radio">
<input {if $value.edit}checked{/if} name="value[edit]" type="radio" value="1"> {dr_lang('审核')}
<span></span>
</label>
</div>
<span class="help-block"> {dr_lang('修改数据时是否重新走审核流程,选择不审核就直接通过')} </span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{dr_lang('删除数据时')}</label>
<div class="col-md-9">
<div class="mt-radio-inline">
<label class="mt-radio">
<input {if !$value.del}checked{/if} name="value[del]" type="radio" value="0"> {dr_lang('不审核')}
<span></span>
</label>
<label class="mt-radio">
<input {if $value.del}checked{/if} name="value[del]" type="radio" value="1"> {dr_lang('审核')}
<span></span>
</label>
</div>
<span class="help-block"> {dr_lang('删除数据时是否重新走审核流程,选择不审核就直接删除')} </span>
</div>
</div>
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
{php for($i = 1; $i < 9; $i++) { }
<div class="form-group">
<label class="col-md-2 control-label"> {dr_lang('第%s次审核', $i)} </label>
<div class="col-md-7">
{if $is_vip}
<label>
<?php if ($value['role'][$i] && !is_array($value['role'][$i])) { $value['role'][$i] = [$value['role'][$i]] ;} ?>
<select name="value[role][{$i}][]" multiple class="form-control bs-select" data-title="{dr_lang('不审核')}">
{loop $ci->role $t}
{if $t.id != 1 && !$t.application.tid}
<option value="{$t.id}" {if dr_in_array($t.id, $value['role'][$i])} selected{/if}> {dr_lang($t.name)} </option>
{/if}
{/loop}
</select>
</label>
{else}
<label>
<select name="value[role][{$i}]" class="form-control">
<option value=""> {dr_lang('不审核')} </option>
{loop $ci->role $t}
{if $t.id != 1 && !$t.application.tid}
<option value="{$t.id}" {if $t.id == $value['role'][$i]} selected{/if}> {dr_lang($t.name)} </option>
{/if}
{/loop}
</select>
</label>
{/if}
</div>
</div>
{php } }
</div>
</div>
</div>
<div class="portlet-body form myfooter">
<div class="form-actions text-center">
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000')" class="btn green"> <i class="fa fa-save"></i> {dr_lang('保存内容')}</button>
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$post_url}')" class="btn green"> <i class="fa fa-plus"></i> {dr_lang('保存再添加')}</button>
<button type="button" onclick="dr_ajax_submit('{dr_now_url()}', 'myform', '2000', '{$reply_url}')" class="btn yellow"> <i class="fa fa-mail-reply-all"></i> {dr_lang('保存并返回')}</button>
</div>
</div>
</form>
{template "footer.html"}
+72
View File
@@ -0,0 +1,72 @@
{template "header.html"}
<div class="right-card-box">
<form class="form-horizontal" role="form" id="myform">
{dr_form_hidden()}
{if $ci->_is_admin_auth('del')}
<div class="bootstrap-table bootstrap-table2">
<div id="toolbar" class="toolbar">
<button type="button" onclick="dr_ajax_option('{dr_url($uriprefix.'/del')}', '{dr_lang('你确定要删除它们吗?')}', 1)" class="btn red btn-sm"> <i class="fa fa-trash"></i> {dr_lang('删除')}</button>
</div>
</div>
{/if}
<div class="table-scrollable">
<table class="table table-striped table-bordered table-hover table-checkable dataTable">
<thead>
<tr class="heading">
{if $ci->_is_admin_auth('del')}
<th class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set=".checkboxes" />
<span></span>
</label>
</th>
{/if}
<th style="text-align:center" width="70" class="{dr_sorting('id')}" name="id">Id</th>
<th width="240" class="{dr_sorting('name')}" name="name">{dr_lang('名称')}</th>
<th style="text-align:center" class="{dr_sorting('verify')}" name="verify" width="80">{dr_lang('次数')}</th>
<th>{dr_lang('操作')}</th>
</tr>
</thead>
<tbody>
{loop $list $t}
{php $verify = dr_string2array($t.verify);}
<tr class="odd gradeX" id="dr_row_{$t.id}">
{if $ci->_is_admin_auth('del')}
<td class="myselect">
<label class="mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes" name="ids[]" value="{$t.id}" />
<span></span>
</label>
</td>
{/if}
<td style="text-align:center">{$t.id}</td>
<td>{$t.name}</td>
<td style="text-align:center"> <span class="badge badge-blue"> {dr_count($verify['role'])} </span></td>
<td>
{if $ci->_is_admin_auth('edit')}
<label><a href="{dr_url($uriprefix.'/edit', ['id'=>$t.id])}" class="btn btn-xs green"> <i class="fa fa-edit"></i> {dr_lang('修改')}</a></label>
<label><a href="javascript:dr_admin_menu_ajax('{dr_url($uriprefix.'/copy_edit', ['id'=>$t.id])}', 1);" class="btn btn-xs dark"> <i class="fa fa-copy"></i> {dr_lang('复制')}</a></label>
{/if}
<label><a href="javascript:dr_iframe_show('{dr_lang('查看流程')}', '{dr_url('cms/api/verify', ['id'=>$t.id])}', '40%');" class="btn btn-xs blue"> <i class="fa fa-search"></i> {dr_lang('查看流程')}</a></label>
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{if $mypages}
<div class="row fc-list-footer table-checkable ">
<div class="col-md-12 fc-list-page">
{$mypages}
</div>
</div>
{/if}
</form>
</div>
{template "footer.html"}
+25
View File
@@ -0,0 +1,25 @@
{template "header.html"}
<ul class="list-group">
{loop $value.role $i $rid}
<?php
if (!is_array($rid)) {
$ns = dr_lang($role[$rid]['name'] ? $role[$rid]['name'] : '管理员');
} else {
$ns = [];
foreach ($rid as $r) {
$ns[] = dr_lang($role[$r]['name'] ? $role[$r]['name'] : '管理员');
}
$ns = array_unique($ns);
$ns = implode('、', $ns);
}
?>
<li class="list-group-item"> <span class="btn btn-xs green">{dr_lang('第%s次审核', $i)}</span> <span class="badge badge-roundless">{$ns}</span></li>
{/loop}
<li class="list-group-item"> <span class="btn btn-xs green">{dr_lang('第%s次审核', $i+1)}</span> <span class="badge badge-roundless">{dr_lang('审核完成')}</span> </li>
</ul>
{template "footer.html"}