Initial project files: BESCMS full source
This commit is contained in:
@@ -0,0 +1,767 @@
|
||||
<?php namespace Phpcmf\Controllers\Admin;
|
||||
|
||||
// URL规则
|
||||
class Urlrule extends \Phpcmf\Table
|
||||
{
|
||||
public $type;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->type = array(
|
||||
//0 => dr_lang('自定义页面插件'),
|
||||
1 => dr_lang('独立模块'),
|
||||
2 => dr_lang('共享模块搜索'),
|
||||
3 => dr_lang('共享栏目和内容页'),
|
||||
//5 => dr_lang('模块表单'),
|
||||
);
|
||||
if (!dr_is_app('page')) {
|
||||
unset($this->type[0]);
|
||||
}
|
||||
\Phpcmf\Service::V()->assign([
|
||||
'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
|
||||
[
|
||||
'URL规则' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-link'],
|
||||
'添加' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/add', 'fa fa-plus'],
|
||||
'修改' => ['hide:'.APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
|
||||
'伪静态' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/rewrite_index', 'fa fa-cog'],
|
||||
'导入' => ['add:'.APP_DIR.'/urlrule/import_add', 'fa fa-sign-in', '60%', '70%'],
|
||||
'help' => [418],
|
||||
]
|
||||
),
|
||||
]);
|
||||
// 支持附表存储
|
||||
$this->is_data = 0;
|
||||
$this->my_field = array(
|
||||
'name' => array(
|
||||
'ismain' => 1,
|
||||
'name' => dr_lang('名称'),
|
||||
'fieldname' => 'name',
|
||||
'fieldtype' => 'Text',
|
||||
'setting' => array(
|
||||
'option' => array(
|
||||
'width' => 200,
|
||||
),
|
||||
'validate' => array(
|
||||
'required' => 1,
|
||||
)
|
||||
)
|
||||
),
|
||||
);
|
||||
// url显示名称
|
||||
$this->name = dr_lang('URL规则');
|
||||
// 初始化数据表
|
||||
$this->_init([
|
||||
'table' => 'urlrule',
|
||||
'field' => $this->my_field,
|
||||
'order_by' => 'id desc',
|
||||
]);
|
||||
}
|
||||
|
||||
// 后台查看url列表
|
||||
public function index() {
|
||||
|
||||
$this->_List([], -1);
|
||||
\Phpcmf\Service::V()->assign('color', [
|
||||
0 => 'default',
|
||||
1 => 'info',
|
||||
2 => 'success',
|
||||
3 => 'warning',
|
||||
4 => 'danger',
|
||||
5 => '',
|
||||
6 => 'primary',
|
||||
]);
|
||||
\Phpcmf\Service::V()->display('urlrule_index.html');
|
||||
}
|
||||
|
||||
// 伪静态
|
||||
public function rewrite_index() {
|
||||
|
||||
$domain = [];
|
||||
list($module, $site) = \Phpcmf\Service::M('Site')->domain();
|
||||
$domain[$site['site_domain']] = dr_lang('本站电脑域名');
|
||||
$site['mobile_domain'] && $domain[$site['mobile_domain']] = dr_lang('本站手机域名');
|
||||
if ($module) {
|
||||
foreach ($module as $dir => $t) {
|
||||
if ($site['module_'.$dir]) {
|
||||
$domain[$site['module_'.$dir]] = dr_lang('%s电脑域名', $t['name']);
|
||||
}
|
||||
if ($site['module_mobile_'.$dir]) {
|
||||
$domain[$site['module_mobile_'.$dir]] = dr_lang('%s手机域名', $t['name']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$site = \Phpcmf\Service::M('Site')->config(SITE_ID);
|
||||
if ($site['client']) {
|
||||
foreach ($site['client'] as $t) {
|
||||
if ($t['domain']) {
|
||||
$domain[$t['domain']] = dr_lang('%s终端域名', $t['name']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strpos($site['config']['SITE_DOMAIN'], '/') !== false) {
|
||||
list($a, $b) = explode('/', $site['config']['SITE_DOMAIN']);
|
||||
$root = '/'.$b;
|
||||
} else {
|
||||
$root = '';
|
||||
}
|
||||
$server = strtolower($_SERVER['SERVER_SOFTWARE']);
|
||||
if (strpos($server, 'apache') !== FALSE) {
|
||||
$name = 'Apache';
|
||||
$note = '<font color=red><b>'.dr_lang('将以下内容保存为.htaccess文件,放到每个域名所绑定的根目录').'</b></font>';
|
||||
$code = '';
|
||||
|
||||
// 子目录
|
||||
$code.= '###当存在多个子目录格式的域名时,需要多写几组RewriteBase标签:RewriteBase /目录/ '.PHP_EOL;
|
||||
if (isset($site['mobile']['mode']) && $site['mobile']['mode'] && $site['mobile']['dirname']) {
|
||||
$code.= 'RewriteEngine On'.PHP_EOL.PHP_EOL;
|
||||
$code.= 'RewriteBase /'.$site['mobile']['dirname'].'/'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-f'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-d'.PHP_EOL
|
||||
.'RewriteRule !.(js|ico|gif|jpe?g|bmp|png|css)$ /'.$site['mobile']['dirname'].'/index.php [NC,L]'.PHP_EOL.PHP_EOL;
|
||||
$code.= '####以上目录需要单独保持到/'.$site['mobile']['dirname'].'/.htaccess文件中';
|
||||
}
|
||||
// 主目录
|
||||
$code.= 'RewriteEngine On'.PHP_EOL.PHP_EOL;
|
||||
$code.= 'RewriteBase '.$root.'/'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-f'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-d'.PHP_EOL
|
||||
.'RewriteRule !.(js|ico|gif|jpe?g|bmp|png|css)$ '.$root.'/index.php [NC,L]'.PHP_EOL.PHP_EOL;
|
||||
} elseif (strpos($server, 'nginx') !== FALSE) {
|
||||
$name = $server;
|
||||
$note = '<font color=red><b>'.dr_lang('将以下代码放到Nginx配置文件中去(如果是绑定了域名,所绑定目录也要配置下面的代码)').'</b></font>';
|
||||
// 子目录
|
||||
$code = '###当存在多个子目录格式的域名时,需要多写几组location标签:location /目录/ '.PHP_EOL;
|
||||
if (isset($site['mobile']['mode']) && $site['mobile']['mode'] && $site['mobile']['dirname']) {
|
||||
$code.= 'location '.$root.'/'.$site['mobile']['dirname'].'/ { '.PHP_EOL
|
||||
.' if (-f $request_filename) {'.PHP_EOL
|
||||
.' break;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.' if ($request_filename ~* "\.(js|ico|gif|jpe?g|bmp|png|css)$") {'.PHP_EOL
|
||||
.' break;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.' if (!-e $request_filename) {'.PHP_EOL
|
||||
.' rewrite . '.$root.'/'.$site['mobile']['dirname'].'/index.php last;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.'}'.PHP_EOL.PHP_EOL;
|
||||
}
|
||||
// 主目录
|
||||
$code.= 'location '.$root.'/ { '.PHP_EOL
|
||||
.' if (-f $request_filename) {'.PHP_EOL
|
||||
.' break;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.' if ($request_filename ~* "\.(js|ico|gif|jpe?g|bmp|png|css)$") {'.PHP_EOL
|
||||
.' break;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.' if (!-e $request_filename) {'.PHP_EOL
|
||||
.' rewrite . '.$root.'/index.php last;'.PHP_EOL
|
||||
.' }'.PHP_EOL
|
||||
.'}'.PHP_EOL;
|
||||
} else {
|
||||
$name = $server;
|
||||
$note = '<font color=red><b>'.dr_lang('无法为此服务器提供伪静态规则,建议让运营商帮你把下面的Apache规则做转换').'</b></font>';
|
||||
$code = 'RewriteEngine On'.PHP_EOL
|
||||
.'RewriteBase /'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-f'.PHP_EOL
|
||||
.'RewriteCond %{REQUEST_FILENAME} !-d'.PHP_EOL
|
||||
.'RewriteRule !.(js|ico|gif|jpe?g|bmp|png|css)$ /index.php [NC,L]';
|
||||
}
|
||||
|
||||
\Phpcmf\Service::V()->assign([
|
||||
'name' => $name,
|
||||
'code' => $code,
|
||||
'note' => $note,
|
||||
'site' => $site,
|
||||
'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
|
||||
[
|
||||
'URL规则' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-link'],
|
||||
'伪静态' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/rewrite_index', 'fa fa-cog'],
|
||||
'help' => [21],
|
||||
]
|
||||
),
|
||||
'count' => $code ? dr_count(explode(PHP_EOL, $code)) : 0,
|
||||
'domain' => $domain,
|
||||
]);
|
||||
\Phpcmf\Service::V()->display('urlrule_rewrite.html');
|
||||
}
|
||||
|
||||
// 后台添加url内容
|
||||
public function add() {
|
||||
$this->_Post(0);
|
||||
\Phpcmf\Service::V()->display('urlrule_add.html');
|
||||
}
|
||||
|
||||
// 后台修改url内容
|
||||
public function edit() {
|
||||
$this->_Post(intval(\Phpcmf\Service::L('input')->get('id')));
|
||||
\Phpcmf\Service::V()->display('urlrule_add.html');
|
||||
}
|
||||
|
||||
// 复制url
|
||||
public function copy_edit() {
|
||||
|
||||
$id = intval(\Phpcmf\Service::L('input')->get('id'));
|
||||
$data = \Phpcmf\Service::M()->db->table('urlrule')->where('id', $id)->get()->getRowArray();
|
||||
if (!$data) {
|
||||
$this->_json(0, dr_lang('数据#%s不存在', $id));
|
||||
}
|
||||
|
||||
unset($data['id']);
|
||||
$data['name'].= '_copy';
|
||||
|
||||
$rt = \Phpcmf\Service::M()->table('urlrule')->insert($data);
|
||||
if (!$rt['code']) {
|
||||
$this->_json(0, dr_lang($rt['msg']));
|
||||
}
|
||||
|
||||
\Phpcmf\Service::M('cache')->sync_cache('urlrule', 'module');
|
||||
$this->_json(1, dr_lang('复制成功'));
|
||||
}
|
||||
|
||||
// 保存
|
||||
protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
|
||||
return parent::_Save($id, $data, $old, function($id, $data){
|
||||
// 保存前的格式化
|
||||
$type = (int)\Phpcmf\Service::L('input')->post('type');
|
||||
$value = \Phpcmf\Service::L('input')->post('value');
|
||||
if ($value[$type]) {
|
||||
foreach ($value[$type] as $i => $t) {
|
||||
if (strpos($t, '?') !== false) {
|
||||
$this->_json(0, dr_lang('URL规则中不能包含%s号', '?'));
|
||||
} elseif (strpos($t, '#') !== false) {
|
||||
$this->_json(0, dr_lang('URL规则中不能包含%s号', '#'));
|
||||
} elseif (strpos($t, '(')
|
||||
&& preg_match('/\{([a-z0-9_]+)\(\$data\)\}/iU', $t, $mt)) {
|
||||
if (!function_exists($mt[1])) {
|
||||
$this->_json(0, dr_lang('URL规则中函数%s未定义', $mt[1]));
|
||||
}
|
||||
}
|
||||
$value[$type][$i] = trim($t);
|
||||
}
|
||||
}
|
||||
$data[1]['type'] = $type;
|
||||
$join = \Phpcmf\Service::L('input')->post('catjoin');
|
||||
$value[$type]['catjoin'] = $join ? $join : '/';
|
||||
$data[1]['value'] = dr_array2string($value[$type]);
|
||||
return dr_return_data(1, 'ok', $data);
|
||||
}, function ($id, $data, $old) {
|
||||
\Phpcmf\Service::M('cache')->sync_cache('urlrule', 'module');
|
||||
});
|
||||
}
|
||||
|
||||
// 导出
|
||||
public function export_edit() {
|
||||
|
||||
$id = intval(\Phpcmf\Service::L('input')->get('id'));
|
||||
$data = \Phpcmf\Service::M()->table('urlrule')->get($id);
|
||||
if (!$data) {
|
||||
$this->_admin_msg(0, dr_lang('URL规则(%s)不存在', $id));
|
||||
}
|
||||
|
||||
\Phpcmf\Service::V()->assign([
|
||||
'data' => dr_array2string($data),
|
||||
]);
|
||||
\Phpcmf\Service::V()->display('api_export_code.html');exit;
|
||||
}
|
||||
|
||||
// 导入
|
||||
public function import_add() {
|
||||
|
||||
if (IS_AJAX_POST) {
|
||||
$data = \Phpcmf\Service::L('input')->post('code');
|
||||
$data = dr_string2array($data);
|
||||
if (!is_array($data)) {
|
||||
$this->_json(0, dr_lang('导入信息验证失败'));
|
||||
} elseif (!$data['value']) {
|
||||
$this->_json(0, dr_lang('导入信息不完整'));
|
||||
}
|
||||
unset($data['id']);
|
||||
$rt = \Phpcmf\Service::M()->table('urlrule')->insert($data);
|
||||
if (!$rt['code']) {
|
||||
$this->_json(0, $rt['msg']);
|
||||
}
|
||||
\Phpcmf\Service::M('cache')->sync_cache('urlrule', 'module');
|
||||
$this->_json(1, dr_lang('操作成功'));
|
||||
}
|
||||
|
||||
\Phpcmf\Service::V()->assign([
|
||||
'data' => '',
|
||||
'form' => dr_form_hidden(),
|
||||
]);
|
||||
\Phpcmf\Service::V()->display('api_export_code.html');
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取内容
|
||||
* $id 内容id,新增为0
|
||||
* */
|
||||
protected function _Data($id = 0) {
|
||||
$data = parent::_Data($id);
|
||||
$data['value'] = dr_string2array($data['value']);
|
||||
return $data;
|
||||
}
|
||||
|
||||
// 后台删除url内容
|
||||
public function del() {
|
||||
$this->_Del(
|
||||
\Phpcmf\Service::L('input')->get_post_ids(),
|
||||
null,
|
||||
function ($r) {
|
||||
\Phpcmf\Service::M('cache')->sync_cache('urlrule', 'module');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// 生成伪静态解析文件规则
|
||||
public function rewrite_add() {
|
||||
$rt = $this->get_rewrite_code();
|
||||
$this->_json($rt['code'], $rt['msg'], $rt['data']);
|
||||
}
|
||||
|
||||
// 生成伪静态解析代码
|
||||
private function get_rewrite_code() {
|
||||
|
||||
$data = \Phpcmf\Service::M()->table('urlrule')->getAll();
|
||||
if (!$data) {
|
||||
return dr_return_data(0, dr_lang('你没有设置URL规则'));
|
||||
}
|
||||
|
||||
$code = '';
|
||||
$error = '';
|
||||
$write = []; // 防止重复
|
||||
foreach ($data as $r) {
|
||||
$value = dr_string2array($r['value']);
|
||||
if ($r['type'] == 1) {
|
||||
// 独立模块
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----开始'.PHP_EOL;
|
||||
if ($value['module']) {
|
||||
$rule = $value['module'];
|
||||
$cname = "【".$r['name']."】模块首页({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rule = 'index.php?s=手动填写模块目录';
|
||||
} else {
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'];
|
||||
}
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname.'(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>';
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['list_page']) {
|
||||
$rule = $value['list_page'];
|
||||
$cname = "【".$r['name']."】模块栏目列表(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{page}'])) {
|
||||
$error.= "<p>".$cname."缺少{page}标签,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{dirname}']) && !isset($rname['{id}']) && !isset($rname['{pdirname}'])) {
|
||||
$error.= "<p>".$cname."缺少{dirname}或{id}或{pdirname}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
if (isset($rname['{dirname}'])) {
|
||||
// 目录格式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&dir=$'.$rname['{dirname}'].'&page=$'.$rname['{page}'];
|
||||
} elseif (isset($rname['{pdirname}'])) {
|
||||
// 层次目录格式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&dir=$'.$rname['{pdirname}'].'&page=$'.$rname['{page}'];
|
||||
} else {
|
||||
// id模式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&id=$'.$rname['{id}'].'&page=$'.$rname['{page}'];
|
||||
}
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname.'(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>';
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['list']) {
|
||||
$rule = $value['list'];
|
||||
$cname = "【".$r['name']."】模块栏目列表({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{dirname}']) && !isset($rname['{id}']) && !isset($rname['{pdirname}'])) {
|
||||
$error.= "<p>".$cname."缺少{dirname}或{id}或{pdirname}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
if (isset($rname['{dirname}'])) {
|
||||
// 目录格式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&dir=$'.$rname['{dirname}'];
|
||||
} elseif (isset($rname['{pdirname}'])) {
|
||||
// 层次目录格式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&dir=$'.$rname['{pdirname}'];
|
||||
} else {
|
||||
// id模式
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=category&id=$'.$rname['{id}'];
|
||||
}
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['show_page']) {
|
||||
$rule = $value['show_page'];
|
||||
$cname = "【".$r['name']."】模块内容页(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{id}'])) {
|
||||
$error.= "<p>".$cname."缺少{id}标签,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{page}'])) {
|
||||
$error.= "<p>".$cname."缺少{page}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=show&id=$'.$rname['{id}'].'&page=$'.$rname['{page}'];
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['show']) {
|
||||
$rule = $value['show'];
|
||||
$cname = "【".$r['name']."】模块内容页({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{id}'])) {
|
||||
$error.= "<p>".$cname."缺少{id}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=show&id=$'.$rname['{id}'];
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['search_page']) {
|
||||
$rule = $value['search_page'];
|
||||
$cname = "【".$r['name']."】模块搜索页(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{param}']) && !isset($rname['{rewrite}'])) {
|
||||
$error.= "<p>".$cname."缺少{param}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=search&rewrite=$'.($rname['{param}'] ? $rname['{param}'] : $rname['{rewrite}']);
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['search']) {
|
||||
$rule = $value['search'];
|
||||
$cname = "【".$r['name']."】模块搜索页({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (!isset($rname['{modname}'])) {
|
||||
$rname['{modname}'] = '{modname}';
|
||||
}
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=search';
|
||||
$rule = str_replace('${modname}', '手动填写模块目录', $rule);
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----结束'.PHP_EOL;
|
||||
} elseif ($r['type'] == 3 ) {
|
||||
// 共享栏目
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----开始'.PHP_EOL;
|
||||
if ($value['list_page']) {
|
||||
$rule = $value['list_page'];
|
||||
$cname = "【".$r['name']."】模块栏目列表(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{page}'])) {
|
||||
$error.= "<p>".$cname."缺少{page}标签,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{dirname}']) && !isset($rname['{id}']) && !isset($rname['{pdirname}'])) {
|
||||
$error.= "<p>".$cname."缺少{dirname}或{id}或{pdirname}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (isset($rname['{dirname}'])) {
|
||||
// 目录格式
|
||||
$rule = 'index.php?c=category&dir=$'.$rname['{dirname}'].'&page=$'.$rname['{page}'];
|
||||
} elseif (isset($rname['{pdirname}'])) {
|
||||
// 层次目录格式
|
||||
$rule = 'index.php?c=category&dir=$'.$rname['{pdirname}'].'&page=$'.$rname['{page}'];
|
||||
} else {
|
||||
// id模式
|
||||
$rule = 'index.php?c=category&id=$'.$rname['{id}'].'&page=$'.$rname['{page}'];
|
||||
}
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['list']) {
|
||||
$rule = $value['list'];
|
||||
$cname = "【".$r['name']."】模块栏目列表({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{dirname}']) && !isset($rname['{id}']) && !isset($rname['{pdirname}'])) {
|
||||
$error.= "<p>".$cname."缺少{dirname}或{id}或{pdirname}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
if (isset($rname['{dirname}'])) {
|
||||
// 目录格式
|
||||
$rule = 'index.php?c=category&dir=$'.$rname['{dirname}'];
|
||||
} elseif (isset($rname['{pdirname}'])) {
|
||||
// 层次目录格式
|
||||
$rule = 'index.php?c=category&dir=$'.$rname['{pdirname}'];
|
||||
} else {
|
||||
// id模式
|
||||
$rule = 'index.php?c=category&id=$'.$rname['{id}'];
|
||||
}
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['show_page']) {
|
||||
$rule = $value['show_page'];
|
||||
$cname = "【".$r['name']."】模块内容页(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{page}'])) {
|
||||
$error.= "<p>".$cname."缺少{page}标签,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{id}'])) {
|
||||
$error.= "<p>".$cname."缺少{id}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$rule = 'index.php?c=show&id=$'.$rname['{id}'].'&page=$'.$rname['{page}'];
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['show']) {
|
||||
$rule = $value['show'];
|
||||
$cname = "【".$r['name']."】模块内容页({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{id}'])) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$rule = 'index.php?c=show&id=$'.$rname['{id}'];
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----结束'.PHP_EOL;
|
||||
} elseif ($r['type'] == 2 ) {
|
||||
// 共享模块
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----开始'.PHP_EOL;
|
||||
if ($value['search_page']) {
|
||||
$rule = $value['search_page'];
|
||||
$cname = "【".$r['name']."】模块搜索页(分页)({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{modname}'])) {
|
||||
$error.= "<p>".$cname."缺少{modname}标签,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{param}'])) {
|
||||
$error.= "<p>".$cname."缺少{param}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=search&rewrite=$'.$rname['{param}'];
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($value['search']) {
|
||||
$rule = $value['search'];
|
||||
$cname = "【".$r['name']."】模块搜索页({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{modname}'])) {
|
||||
$error.= "<p>".$cname."缺少{modname}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$rule = 'index.php?s=$'.$rname['{modname}'].'&c=search';
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----结束'.PHP_EOL;
|
||||
} elseif ($r['type'] == 4 ) {
|
||||
// 关键词库插件
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----开始'.PHP_EOL;
|
||||
if ($value['tag']) {
|
||||
$rule = $value['tag'];
|
||||
$cname = "【".$r['name']."】TagURL({$rule})";
|
||||
list($preg, $rname) = $this->_rule_preg_value($rule);
|
||||
if (!$preg || !$rname) {
|
||||
$error.= "<p>".$cname."无法识别,需要手动写解析规则</p>";
|
||||
} elseif (!isset($rname['{tag}'])) {
|
||||
$error.= "<p>".$cname."缺少{tag}标签,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$rule = 'index.php?s=tag&name=$'.$rname['{tag}'];
|
||||
if (isset($write[$preg])) {
|
||||
$error.= "<p>".$cname."与".$write[$preg]."规则存在冲突,需要手动写解析规则</p>";
|
||||
} else {
|
||||
$write[$preg] = $cname;
|
||||
$code.= '<textarea class="form-control" rows="1"> "'.$preg.'" => "'.$rule.'", //'.$cname."(此规则由系统生成,不一定会准确,请开发者自行调整)</textarea>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$code.= PHP_EOL.' // '.$r['name'].'---解析规则----结束'.PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
return dr_return_data(1, dr_lang('生成成功'), [
|
||||
'code' => nl2br($code),
|
||||
'error' => $error,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
// 正则解析
|
||||
private function _rule_preg_value($rule) {
|
||||
|
||||
$rule = trim(trim($rule, '/'));
|
||||
|
||||
if (preg_match_all('/\{(.*)\}/U', $rule, $match)) {
|
||||
|
||||
$value = [];
|
||||
foreach ($match[0] as $k => $v) {
|
||||
$value[$v] = ($k + 1);
|
||||
}
|
||||
|
||||
$preg = preg_replace(
|
||||
[
|
||||
'#\{id\}#U',
|
||||
'#\{uid\}#U',
|
||||
'#\{mid\}#U',
|
||||
'#\{fid\}#U',
|
||||
'#\{page\}#U',
|
||||
|
||||
'#\{pdirname\}#Ui',
|
||||
'#\{dirname\}#Ui',
|
||||
'#\{opdirname\}#Ui',
|
||||
'#\{otdirname\}#Ui',
|
||||
'#\{modname\}#Ui',
|
||||
'#\{name\}#Ui',
|
||||
|
||||
'#\{tag\}#U',
|
||||
'#\{param\}#U',
|
||||
'#\{rewrite\}#U',
|
||||
|
||||
'#\{y\}#U',
|
||||
'#\{m\}#U',
|
||||
'#\{d\}#U',
|
||||
|
||||
'#\{\.+}#U',
|
||||
'#/#'
|
||||
],
|
||||
[
|
||||
'([0-9]+)',
|
||||
'([0-9]+)',
|
||||
'(\d+)',
|
||||
'(\w+)',
|
||||
'([0-9]+)',
|
||||
|
||||
'([\w\/]+)',
|
||||
'([A-za-z0-9 \-\_]+)',
|
||||
'([A-za-z0-9 \-\_]+)',
|
||||
'([A-za-z0-9 \-\_]+)',
|
||||
'([a-z]+)',
|
||||
'([a-z]+)',
|
||||
|
||||
'(.+)',
|
||||
'(.+)',
|
||||
'(.+)',
|
||||
|
||||
'([0-9]{4})',
|
||||
'([0-9]{2})',
|
||||
'([0-9]{2})',
|
||||
|
||||
'(.+)',
|
||||
'\/'
|
||||
],
|
||||
$rule
|
||||
);
|
||||
|
||||
// 替换特殊的结果
|
||||
$preg = str_replace(
|
||||
['(.+))}-', '.html'],
|
||||
['(.+)-', '\.html'],
|
||||
$preg
|
||||
);
|
||||
|
||||
return [$preg, $value];
|
||||
}
|
||||
|
||||
return [$rule, []];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user