948 lines
29 KiB
PHP
948 lines
29 KiB
PHP
<?php
|
||
|
||
\Phpcmf\Hooks::on('index_page', function() {
|
||
if (is_file(COREPATH.'Control/Html.php')) {
|
||
require COREPATH.'Control/Html.php';
|
||
$ci = \Phpcmf\Service::C();
|
||
// 跳过构造函数:避免 IS_COMMON 下重复初始化,且不覆盖 Common 单例
|
||
$ref = new \ReflectionClass(\Phpcmf\Control\Html::class);
|
||
$c = $ref->newInstanceWithoutConstructor();
|
||
// 同步当前控制器的 public 属性(site_info、member 等)
|
||
foreach (get_object_vars($ci) as $key => $value) {
|
||
$c->$key = $value;
|
||
}
|
||
if (method_exists($c, 'index')) {
|
||
$c->index();
|
||
return dr_return_data(1, 'ok');
|
||
}
|
||
}
|
||
|
||
});
|
||
/**
|
||
* 模块首页地址
|
||
* $dir 模块目录
|
||
*/
|
||
function dr_module_url($dir) {
|
||
|
||
if (defined('MOD_DIR') && $dir == MOD_DIR) {
|
||
return MODULE_URL;
|
||
}
|
||
|
||
return \Phpcmf\Service::L('cache')->get('module-'.dr_module_siteid().'-'.$dir, 'url');
|
||
}
|
||
|
||
function dr_module_category_data_field($cat, $field, $module) {
|
||
if (!$cat['ismain']) {
|
||
// 非主栏目继承上级
|
||
$cat = dr_cat_value(
|
||
$module['mid'],
|
||
\Phpcmf\Service::L('category', 'module')->get_ismain_id($module['mid'], $cat)
|
||
);
|
||
}
|
||
if ($cat) {
|
||
if (isset($module['setting']['module_category_hide']) && $module['setting']['module_category_hide']) {
|
||
if ($module['category_data_field']) {
|
||
foreach ($module['category_data_field'] as $f => $v) {
|
||
if (!dr_in_array($f, $cat['field'])) {
|
||
$field[$f] = $v;
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if ($cat['field']) {
|
||
foreach ($cat['field'] as $f) {
|
||
if ($module['category_data_field'][$f]) {
|
||
$field[$f] = $module['category_data_field'][$f];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $field;
|
||
}
|
||
function dr_module_param($mid, $name) {
|
||
|
||
if (!$mid) {
|
||
return '';
|
||
}
|
||
|
||
return \Phpcmf\Service::L('cache')->get('module-'.dr_module_siteid().'-'.$mid, 'setting', 'param', $name);
|
||
}
|
||
// 获取所属站点id
|
||
function dr_module_siteid() {
|
||
if (isset(XR_C()->content_model->siteid) && (XR_C()->content_model->siteid)) {
|
||
return XR_C()->content_model->siteid;
|
||
}
|
||
return SITE_ID;
|
||
}
|
||
|
||
if (!function_exists('dr_is_double_search')) {
|
||
// 判断搜索值是否是多重选择时的选中状态 1选中 0不选
|
||
function dr_is_double_search($param, $value) {
|
||
|
||
if (!$param) {
|
||
return 0;
|
||
}
|
||
|
||
$arr = explode('|', $param);
|
||
if (in_array($value, $arr)) {
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
if (!function_exists('dr_get_double_search')) {
|
||
// 获取多重选择是的参数值
|
||
function dr_get_double_search($param, $value) {
|
||
|
||
if (!$param) {
|
||
return $value;
|
||
}
|
||
|
||
$arr = explode('|', $param);
|
||
if (in_array($value, $arr)) {
|
||
// 如果存在,那么久移除他
|
||
$arr = array_merge(array_diff($arr, array($value)));
|
||
} else {
|
||
// 没有就加上
|
||
$arr[] = $value;
|
||
}
|
||
|
||
return $arr ? @implode('|', $arr) : '';
|
||
}
|
||
}
|
||
|
||
// 获取内容的tags
|
||
function dr_get_content_tags($value) {
|
||
|
||
if (is_array($value)) {
|
||
return $value;
|
||
} elseif (!$value) {
|
||
return [];
|
||
}
|
||
|
||
$rt = [];
|
||
$tag = explode(',', $value);
|
||
foreach ($tag as $t) {
|
||
$t = trim($t);
|
||
if ($t) {
|
||
// 读缓存
|
||
if (dr_is_app('tag')) {
|
||
$obj = \Phpcmf\Service::M('tag', 'tag');
|
||
if (method_exists($obj, 'get_tag_url')) {
|
||
$url = $obj->get_tag_url($t);
|
||
if ($url) {
|
||
$rt[$t] = $url;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return $rt;
|
||
}
|
||
|
||
// 获取内容的搜索词
|
||
function dr_get_content_kws($value, $mid = '') {
|
||
|
||
if (is_array($value)) {
|
||
return $value;
|
||
} elseif (!$value) {
|
||
return [];
|
||
}
|
||
|
||
$rt = [];
|
||
$mid = $mid ? $mid : (defined('MOD_DIR') ? MOD_DIR : '');
|
||
$tag = explode(',', $value);
|
||
foreach ($tag as $t) {
|
||
$t = trim($t);
|
||
if ($t) {
|
||
$rt[$t] = \Phpcmf\Service::L('router')->search_url([], 'keyword', $t, $mid);
|
||
}
|
||
}
|
||
|
||
return $rt;
|
||
}
|
||
|
||
|
||
/**
|
||
* 内容文章显示内链
|
||
*/
|
||
function dr_content_link($tags, $content, $num = 0, $blank = 1) {
|
||
|
||
if (!$tags || !$content) {
|
||
return $content;
|
||
} elseif (!is_array($tags)) {
|
||
return $content;
|
||
}
|
||
|
||
foreach ($tags as $name => $url) {
|
||
if ($name && $url) {
|
||
$content = @preg_replace(
|
||
'\'(?!((<.*?)|(<a.*?)|(<strong.*?)))('.str_replace(["'", '-'], ["\'", '\-'], preg_quote($name)).')(?!(([^<>]*?)>)|([^>]*?</a>)|([^>]*?</strong>))\'si',
|
||
'<a title="'.$name.'" href="'.$url.'"'.($blank ? ' target="_blank"' : '').'>'.$name.'</a>',
|
||
$content,
|
||
$num ? $num : -1
|
||
);
|
||
}
|
||
}
|
||
|
||
return $content;
|
||
}
|
||
|
||
|
||
// 内容加内链
|
||
function dr_neilian($content, $blank = 1, $num = 0) {
|
||
|
||
if (!$content) {
|
||
return '';
|
||
}
|
||
|
||
if (dr_is_app('tag')) {
|
||
$obj = \Phpcmf\Service::M('tag', 'tag');
|
||
if (method_exists($obj, 'neilian')) {
|
||
return $obj->neilian($content, $blank, $num);
|
||
}
|
||
}
|
||
|
||
return $content;
|
||
}
|
||
|
||
// 获取模块数据及自定义字段
|
||
function dr_mod_value(...$get) {
|
||
|
||
if (empty($get)) {
|
||
return '';
|
||
}
|
||
|
||
if (is_numeric($get[0]) && defined('MOD_DIR') && MOD_DIR) {
|
||
// 值是栏目id时,表示当前模块
|
||
$name = 'module-'.dr_module_siteid().'-'.MOD_DIR;
|
||
} else {
|
||
// 指定模块
|
||
$name = strpos($get[0], '-') ? 'module-'.$get[0] : 'module-'.dr_module_siteid().'-'.$get[0];
|
||
unset($get[0]);
|
||
}
|
||
|
||
$i = 0;
|
||
$param = [];
|
||
foreach ($get as $t) {
|
||
if ($i == 0) {
|
||
$param[] = $name;
|
||
}
|
||
$param[] = $t;
|
||
$i = 1;
|
||
}
|
||
|
||
return call_user_func_array([\Phpcmf\Service::C(), 'get_cache'], $param);
|
||
}
|
||
|
||
|
||
// 获取栏目数据及自定义字段
|
||
function dr_page_value($id, $field, $site = SITE_ID) {
|
||
|
||
if (empty($id)) {
|
||
return '';
|
||
}
|
||
|
||
return \Phpcmf\Service::C()->get_cache('page-'.$site, 'data', $id, $field);
|
||
}
|
||
|
||
// 获取栏目数据及自定义字段
|
||
function dr_cat_value(...$get) {
|
||
|
||
if (empty($get)) {
|
||
return [];
|
||
}
|
||
|
||
$mid = '';
|
||
if (is_numeric($get[0])) {
|
||
// 值是栏目id时,表示当前模块
|
||
if (defined('MOD_DIR') && MOD_DIR) {
|
||
$mid = MOD_DIR;
|
||
$name = 'module-'.dr_module_siteid().'-'.MOD_DIR;
|
||
} else {
|
||
$name = 'module-'.dr_module_siteid().'-share';
|
||
}
|
||
} else {
|
||
// 指定模块
|
||
$mid = $get[0] ? $get[0] : 'share';
|
||
$name = strpos($mid, '-') ? 'module-'.$mid : 'module-'.dr_module_siteid().'-'.$mid;
|
||
unset($get[0]);
|
||
}
|
||
|
||
$i = 0;
|
||
$param = [];
|
||
foreach ($get as $t) {
|
||
if ($i == 0) {
|
||
$param[] = $name;
|
||
$param[] = 'category';
|
||
}
|
||
$param[] = $t;
|
||
$i = 1;
|
||
}
|
||
|
||
$rt = call_user_func_array([\Phpcmf\Service::C(), 'get_cache'], $param);
|
||
if (end($param) == 'url' && $rt) {
|
||
$rt = dr_url_rel(dr_url_prefix($rt, $mid));
|
||
}
|
||
|
||
return $rt;
|
||
}
|
||
|
||
// 获取共享栏目数据及自定义字段
|
||
function dr_share_cat_value($id, $field='') {
|
||
|
||
$get = func_get_args();
|
||
if (empty($get)) {
|
||
return [];
|
||
}
|
||
|
||
$i = 0;
|
||
$param = [];
|
||
foreach ($get as $t) {
|
||
if ($i == 0) {
|
||
$param[] = 'module-'.dr_module_siteid().'-share';
|
||
$param[] = 'category';
|
||
}
|
||
$param[] = $t;
|
||
$i = 1;
|
||
}
|
||
|
||
$rt = call_user_func_array(array(\Phpcmf\Service::C(), 'get_cache'), $param);
|
||
|
||
return $field == 'url' && $rt ? dr_url_rel(dr_url_prefix($rt)) : $rt;
|
||
}
|
||
|
||
|
||
/**
|
||
* 模块栏目面包屑导航
|
||
*
|
||
* @param intval $catid 栏目id
|
||
* @param string $symbol 面包屑间隔符号
|
||
* @param string $url 是否显示URL
|
||
* @param string $html 格式替换
|
||
* @return string
|
||
*/
|
||
function dr_catpos($catid, $symbol = ' > ', $url = true, $html= '', $dirname = 'MOD_DIR', $url_call_func = '') {
|
||
|
||
if (!$catid) {
|
||
return '';
|
||
}
|
||
|
||
$mid = $dirname == 'MOD_DIR' && defined('MOD_DIR') && MOD_DIR ? MOD_DIR : (!$dirname || $dirname == 'MOD_DIR' ? 'share' : $dirname);
|
||
$cat = \Phpcmf\Service::L('cache')->get('module-'.dr_module_siteid().'-'.$mid, 'category');
|
||
if (!isset($cat[$catid])) {
|
||
return '';
|
||
}
|
||
|
||
$name = [];
|
||
$array = explode(',', $cat[$catid]['pids']);
|
||
$array[] = $catid;
|
||
foreach ($array as $id) {
|
||
if ($id && $cat[$id]) {
|
||
if ($url_call_func && function_exists($url_call_func)) {
|
||
$murl = $url_call_func($cat[$id]);
|
||
} else {
|
||
$murl = dr_url_rel(dr_url_prefix($cat[$id]['url'], $mid));
|
||
//$murl = dr_url_prefix($cat[$id]['url'], MOD_DIR, dr_module_siteid(), \Phpcmf\Service::IS_MOBILE_TPL())
|
||
}
|
||
$name[] = $url ? ($html ? str_replace(['[url]', '[name]'], [$murl, $cat[$id]['name']], $html): "<a href=\"{$murl}\">{$cat[$id]['name']}</a>") : $cat[$id]['name'];
|
||
}
|
||
}
|
||
|
||
return implode($symbol, array_unique($name));
|
||
}
|
||
|
||
|
||
// 打赏支付
|
||
function dr_donation($id, $title = '', $dir = '', $remove_div = 1) {
|
||
if (!dr_is_app('pay')) {
|
||
return '没有安装「支付系统」插件';
|
||
}
|
||
!$dir && $dir = defined('MOD_DIR') ? MOD_DIR : 'share';
|
||
return \Phpcmf\Service::M('Pay', 'pay')->payform('my-shang_buy-'.$id.'_'.$dir.'-'.dr_module_siteid(), 0, $title, '', $remove_div);
|
||
}
|
||
|
||
// 是否存在收藏夹中 1收藏了 2没有收藏
|
||
function dr_is_favorite($dir, $id, $uid = 0) {
|
||
|
||
!$uid && $uid = \Phpcmf\Service::C()->uid;
|
||
|
||
if (!$uid) {
|
||
return 0;
|
||
} elseif (!$dir) {
|
||
return 0;
|
||
}
|
||
|
||
return \Phpcmf\Service::M()->db->table(dr_module_table_prefix($dir).'_favorite')->where('uid', $uid)->where('cid', $id)->countAllResults();
|
||
}
|
||
|
||
|
||
/**
|
||
* 模块内容阅读量显示js
|
||
*
|
||
* @param intval $id
|
||
* @return string
|
||
*/
|
||
if (!function_exists('dr_show_hits')) {
|
||
function dr_show_hits($id, $dom = "", $dir = 'MOD_DIR') {
|
||
$is = $dom;
|
||
!$dom && $dom = "dr_show_hits_{$id}";
|
||
$html = $is ? "" : "<span class=\"{$dom}\">0</span>";
|
||
if (defined('MODULE_MYSHOW')) {
|
||
return $html;
|
||
}
|
||
$dir = $dir == 'MOD_DIR' && defined('MOD_DIR') && MOD_DIR ? MOD_DIR : $dir;
|
||
$rt = "$(\".{$dom}\").html(data.msg);";
|
||
if ($is) {
|
||
$rt.= "$(\"#{$dom}\").html(data.msg);";
|
||
}
|
||
return $html."<script type=\"text/javascript\">var apiurl=\"".dr_web_prefix("index.php?s=api&c=module&siteid=".dr_module_siteid()."&app=".$dir)."\"; $.ajax({ type: \"GET\", url:apiurl+\"&m=hits&id={$id}\", dataType: \"jsonp\", success: function(data){ if (data.code) { ".$rt." } else { dr_tips(0, data.msg); } } }); </script>";
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 栏目下级或者同级栏目
|
||
* $data 整个栏目数组
|
||
* $catid 当前栏目id
|
||
*/
|
||
function dr_related_cat($data, $catid) {
|
||
|
||
if (!$data) {
|
||
return [[], []];
|
||
}
|
||
|
||
$my = $data[$catid];
|
||
$related = $parent = [];
|
||
|
||
if ($my['child']) {
|
||
// 当存在子栏目时就显示下级子栏目
|
||
$parent = $my['pid'] ? $data[$my['pid']] : $my;
|
||
foreach ($data as $t) {
|
||
if (!$t['show']) {
|
||
continue;
|
||
}
|
||
if ($t['pid'] == $my['id']) {
|
||
$t['url'] = dr_url_prefix($t['url'], defined('MOD_DIR') ? MOD_DIR : '');
|
||
$related[$t['id']] = $t;
|
||
}
|
||
}
|
||
} elseif ($my['pid']) {
|
||
// 当属于子栏目时就显示同级别栏目
|
||
foreach ($data as $t) {
|
||
if (!$t['show']) {
|
||
continue;
|
||
}
|
||
if ($t['pid'] == $my['pid']) {
|
||
$t['url'] = dr_url_prefix($t['url'], defined('MOD_DIR') ? MOD_DIR : '');
|
||
$related[$t['id']] = $t;
|
||
$parent = $data[$t['pid']];
|
||
}
|
||
}
|
||
} else {
|
||
// 显示顶级栏目
|
||
if (!$data) {
|
||
return [[], []];
|
||
}
|
||
$parent = $my;
|
||
foreach ($data as $t) {
|
||
if (!$t['show']) {
|
||
continue;
|
||
}
|
||
if ($t['pid'] == 0) {
|
||
$t['url'] = dr_url_prefix($t['url'], defined('MOD_DIR') ? MOD_DIR : '');
|
||
$related[$t['id']] = $t;
|
||
}
|
||
}
|
||
}
|
||
|
||
$parent && $parent['url'] = dr_url_prefix($parent['url'], defined('MOD_DIR') ? MOD_DIR : '');
|
||
|
||
return [$parent, $related];
|
||
}
|
||
|
||
/**
|
||
* 模块栏目层次关系
|
||
*
|
||
* @param array $mod
|
||
* @param array $cat
|
||
* @param string $symbol
|
||
*/
|
||
function dr_get_cat_pname($mod, $catid, $symbol = '_') {
|
||
|
||
$cat = $mod['category'][$catid];
|
||
|
||
if (!$cat['pids']) {
|
||
return $cat['name'];
|
||
}
|
||
|
||
$name = [];
|
||
$array = explode(',', $cat['pids']);
|
||
|
||
foreach ($array as $id) {
|
||
if ($id && $mod['category'][$id]) {
|
||
$name[] = $mod['category'][$id]['name'];
|
||
}
|
||
}
|
||
|
||
$name[] = $cat['name'];
|
||
|
||
$name = array_unique($name);
|
||
|
||
krsort($name);
|
||
|
||
return implode($symbol, $name);
|
||
}
|
||
|
||
|
||
|
||
/**
|
||
* url转为相对路径
|
||
*/
|
||
if (!function_exists('dr_url_rel')) {
|
||
|
||
/**
|
||
* url转为相对路径
|
||
*/
|
||
function dr_url_rel($url, $prefix = '') {
|
||
|
||
if ((IS_API_HTTP && (!defined('SYS_API_REL') || !SYS_API_REL)) || IS_ADMIN) {
|
||
return $url;
|
||
} elseif (defined('SYS_URL_REL') && SYS_URL_REL) {
|
||
$surl = FC_NOW_HOST;
|
||
if (defined('SC_HTML_FILE') && SITE_IS_MOBILE_HTML
|
||
&& \Phpcmf\Service::V()->_is_mobile
|
||
&& strpos(SITE_MURL, SITE_URL) === false
|
||
) {
|
||
// 静态生成,移动端域名模式下
|
||
$surl = SITE_MURL;
|
||
}
|
||
$url = str_replace($surl, '/', $url);
|
||
if (IS_DEV && strpos($url, 'http') === 0) {
|
||
$url.= '#站外域名不能转为相对路径(本提示信息关闭开发者模式时不显示)';
|
||
}
|
||
$prefix && $url = str_replace($prefix, '/', $url);
|
||
}
|
||
|
||
return $url;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 内容中的转为相对路径
|
||
*/
|
||
if (!function_exists('dr_text_rel')) {
|
||
|
||
|
||
/**
|
||
* 内容中的转为相对路径
|
||
*/
|
||
function dr_text_rel($text, $prefix = '') {
|
||
|
||
if ((IS_API_HTTP && (!defined('SYS_API_REL') || !SYS_API_REL)) || IS_ADMIN) {
|
||
return $text;
|
||
} elseif (defined('SYS_URL_REL') && SYS_URL_REL) {
|
||
$surl = FC_NOW_HOST;
|
||
if (defined('SC_HTML_FILE') && SITE_IS_MOBILE_HTML
|
||
&& \Phpcmf\Service::V()->_is_mobile
|
||
&& strpos(SITE_MURL, SITE_URL) === false
|
||
) {
|
||
// 静态生成,移动端域名模式下
|
||
$surl = SITE_MURL;
|
||
}
|
||
$text = str_replace('href="'.$surl, 'href="/', $text);
|
||
$text = str_replace('href=\''.$surl, 'href="/', $text);
|
||
$text = str_replace('src="'.$surl, 'src="/', $text);
|
||
$text = str_replace('src=\''.$surl, 'src="/', $text);
|
||
if ($prefix) {
|
||
$surl = $prefix;
|
||
$text = str_replace('href="'.$surl, 'href="/', $text);
|
||
$text = str_replace('href=\''.$surl, 'href="/', $text);
|
||
$text = str_replace('src="'.$surl, 'src="/', $text);
|
||
$text = str_replace('src=\''.$surl, 'src="/', $text);
|
||
}
|
||
}
|
||
|
||
return $text;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 模块栏目URL地址
|
||
*
|
||
* @param array $mod
|
||
* @param array $data
|
||
* @param intval $page
|
||
* @return string
|
||
*/
|
||
function dr_module_category_url($mod, $data, $page = 0, $fid = 0) {
|
||
|
||
if (!$mod) {
|
||
return '栏目所属模块不存在';
|
||
} elseif (!$data) {
|
||
return '栏目数据不存在';
|
||
}
|
||
|
||
// 是否分页
|
||
$page && $data['page'] = $page = is_numeric($page) ? max((int)$page, 1) : $page;
|
||
!$page && $page = 1;
|
||
$is_page = $page > 1 || strpos($page, 'page') !== false;
|
||
|
||
// 动态地址
|
||
$php_url = \Phpcmf\Service::L('router')->url_prefix('module_php', $mod, $data, $fid) . 'c=category&id=' . (isset($data['id']) ? $data['id'] : 0) . ($is_page ? '&page=' . $page : '');
|
||
|
||
// 获取自定义URL
|
||
$url = '';
|
||
$rule = isset($data['setting']['urlrule']) ? \Phpcmf\Service::L('cache')->get('urlrule', (int)$data['setting']['urlrule'], 'value') : 0;
|
||
if ($is_page) {
|
||
if (isset($data['myurl_page']) && $data['myurl_page']) {
|
||
$url = ltrim($data['myurl_page'], '/');
|
||
$myurl = \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $data, $fid));
|
||
dr_save_rewrite_routes($my_url, trim($php_url, '/'));
|
||
return $myurl;
|
||
} elseif ($rule && $rule['list_page']) {
|
||
$url = ltrim($rule['list_page'], '/');
|
||
}
|
||
} else {
|
||
if (isset($data['myurl']) && $data['myurl']) {
|
||
$url = ltrim($data['myurl'], '/');
|
||
$myurl = \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $data, $fid));
|
||
dr_save_rewrite_routes($my_url, trim($php_url, '/'));
|
||
return $myurl;
|
||
} elseif ($rule && $rule['list']) {
|
||
$url = ltrim($rule['list'], '/');
|
||
}
|
||
}
|
||
|
||
if ($url) {
|
||
// URL模式为自定义,且已经设置规则
|
||
$data['fid'] = $fid;
|
||
$data['modname'] = $mod['share'] ? '共享栏目不能使用modname标签' : $mod['dirname'];
|
||
$data['pdirname'].= $data['dirname'];
|
||
$data['pdirname'] = str_replace('/', $rule['catjoin'], $data['pdirname']);
|
||
$data['otdirname'] = $data['opdirname'] = $data['dirname'];
|
||
if ($data['pid']) {
|
||
$pcat = dr_cat_value($mod['mid'], $data['pid']);
|
||
if ($pcat) {
|
||
$data['opdirname'] = $pcat['dirname'];
|
||
}
|
||
}
|
||
if ($data['topid']) {
|
||
$pcat = dr_cat_value($mod['mid'], $data['topid']);
|
||
if ($pcat) {
|
||
$data['otdirname'] = $pcat['dirname'];
|
||
}
|
||
}
|
||
$myurl = \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $data, $fid));
|
||
dr_save_rewrite_routes($myurl, trim($php_url, '/'));
|
||
return $myurl;
|
||
}
|
||
|
||
return \Phpcmf\Service::L('router')->url_prefix('module_php', $mod, $data, $fid) . 'c=category&id=' . (isset($data['id']) ? $data['id'] : 0) . ($is_page ? '&page=' . $page : '');
|
||
}
|
||
|
||
/**
|
||
* 模块内容URL地址
|
||
*
|
||
* @param array $mod
|
||
* @param array $data
|
||
* @param mod $page
|
||
* @return string
|
||
*/
|
||
function dr_module_show_url($mod, $data, $page = 0) {
|
||
|
||
if (!$mod) {
|
||
return 'mod参数不存在';
|
||
} elseif (!$data) {
|
||
return 'data参数不完整';
|
||
}
|
||
|
||
$cat = dr_cat_value($mod['mid'], $data['catid']);
|
||
|
||
$page && $data['page'] = $page = is_numeric($page) ? max((int)$page, 1) : $page;
|
||
!$page && $page = 1;
|
||
$is_page = $page > 1 || strpos($page, 'page') !== false;
|
||
|
||
$url = '';
|
||
$rule = \Phpcmf\Service::L('cache')->get('urlrule', (int)$cat['setting']['urlrule'], 'value');
|
||
if ($is_page) {
|
||
if (isset($data['myurl_page']) && $data['myurl_page']) {
|
||
$url = ltrim($data['myurl_page'], '/');
|
||
return \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $cat));
|
||
} elseif ($rule && $rule['show_page']) {
|
||
$url = ltrim($rule['show_page'], '/');
|
||
}
|
||
} else {
|
||
if (isset($data['myurl']) && $data['myurl']) {
|
||
$url = ltrim($data['myurl'], '/');
|
||
return \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $cat));
|
||
} elseif ($rule && $rule['show']) {
|
||
$url = ltrim($rule['show'], '/');
|
||
}
|
||
}
|
||
|
||
$php_url = \Phpcmf\Service::L('router')->url_prefix('module_php', $mod, $cat) . 'c=show&id=' . $data['id'] . ($is_page ? '&page=' . $page : '');
|
||
|
||
if ($url) {
|
||
// URL模式为自定义,且已经设置规则
|
||
$data['cat'] = $cat;
|
||
$data['modname'] = $mod['dirname'];
|
||
$cat['pdirname'].= $cat['dirname'];
|
||
$data['dirname'] = $cat['dirname'];
|
||
$inputtime = isset($data['_inputtime']) ? $data['_inputtime'] : $data['inputtime'];
|
||
$data['y'] = date('Y', $inputtime);
|
||
$data['yy'] = date('y', $inputtime);
|
||
$data['m'] = date('m', $inputtime);
|
||
$data['d'] = date('d', $inputtime);
|
||
$data['pdirname'] = str_replace('/', $rule['catjoin'], $cat['pdirname']);
|
||
$data['otdirname'] = $data['opdirname'] = $cat['dirname'];
|
||
if ($cat['pid']) {
|
||
$pcat = dr_cat_value($mod['mid'], $cat['pid']);
|
||
if ($pcat) {
|
||
$data['opdirname'] = $pcat['dirname'];
|
||
}
|
||
}
|
||
if ($cat['topid']) {
|
||
$pcat = dr_cat_value($mod['mid'], $cat['topid']);
|
||
if ($pcat) {
|
||
$data['otdirname'] = $pcat['dirname'];
|
||
}
|
||
}
|
||
|
||
$data['url'] = $myurl = \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod, $cat));
|
||
dr_save_rewrite_routes($myurl, trim($php_url, '/'));
|
||
} else {
|
||
$data['url'] = \Phpcmf\Service::L('router')->url_prefix('module_php', $mod, $cat) . 'c=show&id=' . $data['id'] . ($is_page ? '&page=' . $page : '');
|
||
}
|
||
|
||
// 挂钩点 模块内容url地址获取
|
||
$rt = \Phpcmf\Hooks::trigger_callback('module_update_url', $data);
|
||
if ($rt && isset($rt['code']) && $rt['code']) {
|
||
$data['url'] = $rt['data'];
|
||
dr_save_rewrite_routes($data['url'], trim($php_url, '/'));
|
||
}
|
||
|
||
return $data['url'];
|
||
}
|
||
// 模块URL
|
||
function dr_module_index_url($mod, $sid) {
|
||
|
||
// 绑定域名的情况下
|
||
if ($mod['site'][$sid]['domain']) {
|
||
return dr_http_prefix($mod['site'][$sid]['domain']) . '/';
|
||
}
|
||
$php_url = dr_web_prefix('index.php?s=' . $mod['dirname']);
|
||
|
||
// 自定义规则的情况下
|
||
$rule = \Phpcmf\Service::L('cache')->get('urlrule', (int)$mod['urlrule'], 'value', 'module');
|
||
if ($rule) {
|
||
$url = dr_web_prefix(str_replace('{modname}', $mod['dirname'], $rule));
|
||
dr_save_rewrite_routes($url, 'index.php?s=' . $mod['dirname']);
|
||
return $url;
|
||
}
|
||
|
||
return dr_web_prefix('index.php?s=' . $mod['dirname']);
|
||
}
|
||
/**
|
||
* 搜索url组合
|
||
*
|
||
* @param array $params 搜索参数数组
|
||
* @param string|array $name 当前参数名称
|
||
* @param string|array $value 当前参数值
|
||
* @param string $mid 强制定位到模块
|
||
* @param string $fid 指定fid
|
||
* @return string
|
||
*/
|
||
function dr_module_search_url($params = [], $name = '', $value = '', $mid = '', $fid = SITE_FID) {
|
||
|
||
|
||
// 模块目录识别
|
||
defined('MOD_DIR') && MOD_DIR && $dir = MOD_DIR;
|
||
$mid && $dir = $mid;
|
||
|
||
$mod = \Phpcmf\Service::L('cache')->get('module-' . dr_module_siteid() . '-' . $dir);
|
||
if (!$mod) {
|
||
return '模块[' . $dir . ']缓存不存在';
|
||
}
|
||
|
||
if ($name) {
|
||
if (is_array($name)) {
|
||
foreach ($name as $i => $_name) {
|
||
if (isset($value[$i]) && strlen((string)$value[$i])) {
|
||
$params[$_name] = $value[$i];
|
||
} else {
|
||
unset($params[$_name]);
|
||
}
|
||
}
|
||
} else {
|
||
if (strlen((string)$value)) {
|
||
$params[$name] = $value;
|
||
} else {
|
||
unset($params[$name]);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (is_array($params)) {
|
||
foreach ($params as $i => $t) {
|
||
if (strlen((string)$t) == 0) {
|
||
unset($params[$i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
$php_url = \Phpcmf\Service::L('router')->url_prefix('php', $mod, [], $fid) . trim('c=search&' . (is_array($params) ? http_build_query($params) : ''), '&');
|
||
|
||
$rule = \Phpcmf\Service::L('cache')->get('urlrule', (int)$mod['urlrule'], 'value');
|
||
if ($rule && $rule['search']) {
|
||
$fid && $data['fid'] = $fid;
|
||
$data['modname'] = $mod['dirname'];
|
||
$data['param'] = dr_search_rewrite_encode($params, $mod['setting']['search']);
|
||
if ($params && !$data['param']) {
|
||
log_message('debug', '模块['.$mod['dirname'].']无法通过[搜索参数字符串规则]获得参数');
|
||
}
|
||
$url = ltrim($data['param'] ? $rule['search_page'] : $rule['search'], '/');
|
||
$my_url = \Phpcmf\Service::L('router')->get_url_value($data, $url, \Phpcmf\Service::L('router')->url_prefix('rewrite', $mod));
|
||
dr_save_rewrite_routes($my_url, trim($php_url, '/'));
|
||
return dr_url_rel(dr_url_prefix($my_url, $mod['dirname']));
|
||
} else {
|
||
return dr_url_rel(dr_url_prefix(\Phpcmf\Service::L('router')->url_prefix('php', $mod, [], $fid) . trim('c=search&' . (is_array($params) ? http_build_query($params) : ''), '&'), $mod['dirname']));
|
||
}
|
||
}
|
||
|
||
|
||
function dr_module_checktitle() {
|
||
// 获取参数
|
||
$id = (int)\Phpcmf\Service::L('input')->get('id');
|
||
$title = dr_safe_replace(htmlspecialchars((string)\Phpcmf\Service::L('input')->get('title')));
|
||
$module = dr_safe_filename(\Phpcmf\Service::L('input')->get('module'));
|
||
$cache = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$module);
|
||
|
||
// 判断参数
|
||
if (!$title || !$module || !$cache) {
|
||
exit('');
|
||
}
|
||
|
||
// 判断是否重复存在
|
||
if (\Phpcmf\Service::M()->db->table(dr_module_table_prefix($module))->where('id<>'.$id)->where('title', $title)->countAllResults()) {
|
||
exit(dr_lang('已经有相同的%s存在', isset($cache['field']['title']['name']) ? $cache['field']['title']['name'] : dr_lang('主题')));
|
||
}
|
||
|
||
exit('');
|
||
}
|
||
|
||
function dr_module_api_search() {
|
||
|
||
$dir = dr_safe_filename(\Phpcmf\Service::L('input')->get('dir'));
|
||
if (!$dir) {
|
||
\Phpcmf\Service::C()->_msg(0, dr_lang('模块参数不能为空'));
|
||
} elseif (!dr_is_module($dir)) {
|
||
\Phpcmf\Service::C()->goto_404_page(dr_lang('模块[%s]未安装', $dir));
|
||
}
|
||
|
||
$get = \Phpcmf\Service::L('input')->get();
|
||
$cache = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$dir);
|
||
$cache['field']['catdir'] = true;
|
||
$cache['field']['catid'] = true;
|
||
$cache['field']['order'] = true;
|
||
|
||
$param = [];
|
||
foreach ($get as $key => $value) {
|
||
if ($cache['field'] && isset($cache['field'][$key])) {
|
||
$param[$key] = $value;
|
||
}
|
||
}
|
||
|
||
// 跳转url
|
||
dr_redirect(\Phpcmf\Service::L('Router')->search_url(
|
||
$param,
|
||
'keyword',
|
||
dr_safe_replace(\Phpcmf\Service::L('input')->get('keyword')),
|
||
$dir
|
||
));
|
||
}
|
||
|
||
// 评论名称
|
||
if (!function_exists('dr_comment_cname')) {
|
||
function dr_comment_cname($name) {
|
||
|
||
if (!$name) {
|
||
return dr_lang('评论');
|
||
}
|
||
|
||
return dr_lang($name);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 提取描述信息过滤函数
|
||
*/
|
||
|
||
if (! function_exists('dr_filter_description')) {
|
||
function dr_filter_description($value, $data = [], $old = []) {
|
||
return dr_get_description($value, 0);
|
||
}
|
||
}
|
||
|
||
if (! function_exists('dr_get_description')) {
|
||
/**
|
||
* 提取描述信息
|
||
*/
|
||
function dr_get_description($text, $limit = 0) {
|
||
|
||
$rs = \Phpcmf\Hooks::trigger_callback('cms_get_description', $text);
|
||
if ($rs && isset($rs['code']) && $rs['code'] && $rs['msg']) {
|
||
$text = $rs['msg'];
|
||
}
|
||
|
||
if (!$limit) {
|
||
$limit = isset(\Phpcmf\Service::C()->module['setting']['desc_limit']) && \Phpcmf\Service::C()->module['setting']['desc_limit'] ? \Phpcmf\Service::C()->module['setting']['desc_limit'] : 200;
|
||
}
|
||
|
||
if (isset(\Phpcmf\Service::C()->module['setting']['desc_clear']) && \Phpcmf\Service::C()->module['setting']['desc_clear']) {
|
||
$text = str_replace(' ', '', $text);
|
||
$text = str_replace(' ', '', $text);
|
||
}
|
||
|
||
return trim(dr_strcut(dr_clearhtml($text), $limit, ''));
|
||
}
|
||
}
|
||
if (! function_exists('dr_get_keywords')) {
|
||
/**
|
||
* 提取关键字
|
||
*/
|
||
function dr_get_keywords($kw, $siteid = SITE_ID)
|
||
{
|
||
|
||
if (!$kw) {
|
||
return '';
|
||
}
|
||
|
||
$rs = \Phpcmf\Hooks::trigger_callback('cms_get_keywords', $kw, $siteid);
|
||
if ($rs && isset($rs['code']) && $rs['code'] && $rs['msg']) {
|
||
return $rs['msg'];
|
||
}
|
||
|
||
if (is_file(FCPATH.'ThirdParty/WordAnalysis/phpanalysis.class.php')) {
|
||
require_once FCPATH.'ThirdParty/WordAnalysis/phpanalysis.class.php';
|
||
\PhpAnalysis::$loadInit = false;
|
||
$pa = new \PhpAnalysis ( 'utf-8', 'utf-8', false );
|
||
$pa->LoadDict ();
|
||
$pa->SetSource ($kw);
|
||
$pa->StartAnalysis ( true );
|
||
|
||
$tags = $pa->GetFinallyKeywords (20);
|
||
if ($tags) {
|
||
return $tags;
|
||
}
|
||
}
|
||
|
||
return '';
|
||
}
|
||
} |