official_website/app/func/commont.php

2255 lines
91 KiB
PHP
Raw Normal View History

2024-12-02 13:57:08 +08:00
<?php
/**
* @Descripttion : FOXCMS 是一款高效的 PHP 多端跨平台内容管理系统
* @Author : FoxCMS Team
* @Date : 2023/6/26 17:42
* @version : V1.08
* @copyright : ©2021-现在 贵州黔狐科技股份有限公司 版权所有
* @LastEditTime : 2023/6/26 17:42
*/
use think\facade\Db;
use app\admin\util\TableUtil;
//获取基本设置对象
function getBasic()
{
//获取静态文件存放目录
$basic = \app\common\model\Basic::where("status", 1)->find();
return $basic;
}
//组合多维数组
function unlimitedForLayer($cate, $name = 'sub', $pid = 0)
{
$arr = array();
foreach ($cate as $v) {
if ($v['pid'] == $pid) {
$v["link"] = getColumnUrl($v);
$v[$name] = unlimitedForLayer($cate, $name, $v['id']);
$arr[] = $v;
}
}
return $arr;
}
//子栏目重新组装数据
function alterChildColumn($list)
{
$arr = array();
foreach ($list as $v) {
$v['url'] = $v['v_path'];
$arr[] = $v;
}
return $arr;
}
//栏目地址重新组装
function columnList($list, $titlelen = -1)
{
$arr = array();
$table_prefix = config("database.connections.mysql.prefix");
foreach ($list as $v) {
$v["link"] = getColumnUrl($v);
$v['source'] = $v['article_source'];
if ($titlelen != -1 && $titlelen > 0 && strlen($v['title']) > 0) {
$v['title'] = myTitle($v['title'], $titlelen);
}
$columnList = get_column_down($v['id']);
$v['child_num'] = sizeof($columnList); //子栏目数
$sum = 0;
foreach ($columnList as $column) {
$table_name = $table_prefix . $column['column_model'];
if (TableUtil::check_table($table_name)) {
$sum += Db::name($column['column_model'])->where('column_id', $column['id'])->count();
}
}
$v['sum'] = $sum;
$arr[] = $v;
}
return $arr;
}
//获取父类对象
function getParent($list, $pid)
{
foreach ($list as $data) {
if ($pid == $data->id) {
return $data;
}
}
return [];
}
//栏目地址重新组装
function alterList($list, $pmodel = "", $titlelen = -1)
{
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
$url_html_suffix = config("route.url_html_suffix");
$arr = array();
$basic = getBasic(); //基本信息
$isMobile = is_mobile();
$home_lang = xn_cfg("base.home_lang"); //默认语言
foreach ($list as $v) {
$html_save_path = $basic["html_save_path"];
$cur_lang = $v['visit_lang'];
if ($home_lang == $cur_lang) {
$cur_lang = "";
} else {
$html_save_path = $cur_lang;
}
if (empty($pmodel)) {
$model = $v["model"];
} else {
$model = $pmodel;
}
if ($v["id"] == -1) {
$v["link"] = "javascript:void(0);";
} else {
if ($url_model == 1) {
$nUrl = DIRECTORY_SEPARATOR . $model . DIRECTORY_SEPARATOR . 'detail';
if (empty($cur_lang)) {
$v["link"] = url("{$nUrl}") . "?id={$v['id']}";
} else {
$v["link"] = url("{$nUrl}") . "?id={$v['id']}&lang={$cur_lang}";
}
} elseif ($url_model == 2) {
$nUrl = "/{$cur_lang}" . DIRECTORY_SEPARATOR . $model . DIRECTORY_SEPARATOR . 'detail';
$v["link"] = url("{$nUrl}/{$v['id']}");
} elseif ($url_model == 3) {
$column_id = $v['column_id'];
if (empty($column_id)) {
$v["link"] = "javascript:void(0);";
continue;
}
if ($isMobile) { //手机访问
$nUrl = "/$cur_lang" . DIRECTORY_SEPARATOR . $model . DIRECTORY_SEPARATOR . 'detail';
$v["link"] = url("{$nUrl}/{$v['id']}");
} else {
$columnList = get_column_up($column_id, "", $v['visit_lang']);
$parenPath = "";
foreach ($columnList as $column) {
$parenPath .= $column["dir_path"];
}
$document_page = xn_cfg("seo.document_page"); //文档生成方式
if ($document_page == 1) { //多加一层时间
$url = "/{$html_save_path}/" . $parenPath . '/' . foxDate("Ymd", $v['create_time']) . '/' . $v['id'] . "." . $url_html_suffix;
} else {
$url = "/{$html_save_path}/" . $parenPath . '/' . $v['id'] . "." . $url_html_suffix;
}
$v["link"] = replaceSymbol($url);
}
}
}
$v['source'] = $v['article_source'];
$v['image'] = $v['img_url'];
if ($titlelen != -1 && $titlelen > 0 && strlen($v['title']) > 0) {
$v['title'] = myTitle($v['title'], $titlelen);
}
$v["link"] = replaceSymbol($v["link"]);
$arr[] = $v;
}
return $arr;
}
//当前导航添加
function navAddField(&$list, $id, $currentstyle, $at = "yes")
{
if ($at == "yes") {
$curColumn = \app\common\model\Column::field("tier")->find($id);
if ($curColumn) {
$tierArr = explode(",", $curColumn["tier"]);
foreach ($tierArr as $id) {
foreach ($list as $v) {
if ($v["id"] == $id) {
$v["currentstyle"] = $currentstyle;
break;
}
}
}
}
} elseif ($at == "no") {
foreach ($list as $v) {
if ($v["id"] == $id) {
$v["currentstyle"] = $currentstyle;
break;
}
}
}
}
//栏目、模型、会员属性动态组装
function fieldObjTag($field, $obj)
{
if ($field->dtype == "text") { //单行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input class="foxui-size-small {$field->name}" placeholder="{$field->remark}" value="{$val}" />
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "multitext") { //多行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="block-box">
<div class="foxui-textarea">
<textarea class="{$field->name}" autocomplete="off" rows="16" placeholder="{$field->remark}">{$val}</textarea>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "htmltext") { //HTML文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="block-box rich-text">
<!-- 富文本 -->
<textarea class="richText {$field->name}" id="{$field->name}">{$val}</textarea>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "radio") { //单选
$valArr = explode(",", $field->dfvalue);
$content = "";
if ($obj) {
$valf = getFieldVal($obj, $field->name);
} else {
if (sizeof($valArr) > 0) {
$valf = $valArr[0];
}
}
foreach ($valArr as $key => $val) {
if ($val == $valf) {
$content .= '<div class="foxui-radio is-checked">';
} else {
$content .= '<div class="foxui-radio">';
}
$content .= '<span class="foxui-radio-input">
<i class="foxui-radio-icon"></i>
<input type="radio" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-radio-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label class="foxui-required">{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-radio-group {$field->name}">
{$content}
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "checkbox") { //多选
$valArr = explode(",", $field->dfvalue);
$valfArr = explode(",", getFieldVal($obj, $field->name));
$content = "";
foreach ($valArr as $key => $val) {
if (in_array($val, $valfArr)) {
$content .= '<div class="foxui-checkbox is-checked">';
} else {
$content .= '<div class="foxui-checkbox">';
}
$content .= '<span class="foxui-checkbox-input">
<i class="foxui-checkbox-icon"></i>
<input type="checkbox" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-checkbox-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="{$field->name}">
{$content}
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "switch") { //开关
$val = getFieldVal($obj, $field->name);
$isCheck = "";
if ($val == 1) {
$isCheck = "is-checked";
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box display-flex foxui-align-items-center">
<div class="foxui-switch {$isCheck}">
<input type="checkbox" checked="checked" value="{$val}" class="foxui-switch-input {$field->name}" />
<span class="foxui-switch-core"></span>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "select") { //下拉框
$val = "";
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$define = $field->define;
$define = str_replace("enum(", "", $define);
$define = str_replace(")", "", $define);
$define = str_replace("'", "", $define);
$valArr = explode(",", $define);
// $valArr = explode(",", $field->dfvalue);
$content = "";
foreach ($valArr as $key => $valLi) {
$content .= '<li class="foxui-select-item" data-id="' . $valLi . '">' . $valLi . '</li>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-select">
<div class="foxui-select-handle foxui-select-icon">
<input class="foxui-select-input foxui-size-small {$field->name}" readonly="readonly" placeholder="请选择值" value="{$val}" data-id="{$val}"/>
<i class="foxui-icon-close-circle"></i>
</div>
<div class="foxui-select-menu">
<ul class="foxui-select-slide">
{$content}
</ul>
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "datetime") { //日期和时间
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-picker foxui-datetime-picker">
<div class="foxui-picker-handle foxui-input-prefix">
<i class="foxui-icon-gongzuo-o foxui-prefix-icon"></i>
<input class="foxui-size-small {$field->name}" readonly="readonly"placeholder="请选择时间" value="{$val}" />
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "int") { //整数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9]/g,'');" class="foxui-size-small {$field->name}" placeholder="只允许纯数字" value="{$val}" />
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "float") { //小数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的数值" value="{$val}" />
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "decimal") { //金额类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的金额" value="{$val}" />
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "pic") { //图片
$contentImg = "";
if ($obj) { //值不为空
$imgIds = getFieldVal($obj, $field->name);
if (!empty($imgIds)) {
$idsArr = explode(",", $imgIds);
if (sizeof($idsArr) > 0) {
foreach ($idsArr as $k => $img) {
$contentImg .= '
<li class="foxui-images-item foxui-animate-fadeInDown">
<div class="content">
<img src="' . $img . '" />
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
</li>
';
}
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-images foxui-images-fluid">
<div class="foxui-images-card {$field->name}">
<ul class="foxui-images-list">
{$contentImg}
<div class="foxui-images-handle">
<div class="foxui-images-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加图片</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "pics") { //图片集合
$contentImg = "";
if ($obj) { //值不为空
$imgIds = getFieldVal($obj, $field->name);
if (!empty($imgIds)) {
$idsArr = explode(",", $imgIds);
if (sizeof($idsArr) > 0) {
foreach ($idsArr as $k => $img) {
$contentImg .= '
<li class="foxui-images-item foxui-drag-item foxui-animate-fadeInDown">
<div class="content">
<img src="' . $img . '" />
<div class="foxui-drag-handle"></div>
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
</li>
';
}
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-images foxui-drag" data-count="-1">
<div class="foxui-images-card {$field->name}">
<ul class="foxui-images-list foxui-drag-container">
{$contentImg}
<div class="foxui-images-handle">
<div class="foxui-images-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加图片</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "media") { //媒体
$contentMedia = "";
if ($obj) { //值不为空
$videostr = getFieldVal($obj, $field->name);
$videoArr = json_decode($videostr);
if (sizeof($videoArr) > 0) {
foreach ($videoArr as $video) {
$contentMedia .= '
<li class="foxui-videos-item foxui-animate-fadeInDown">
<div class="content">
<img data-id="' . $video->id . '" src="' . $video->pic . '" data-url="' . $video->url . '"/>
<span class="duration">' . $video->duration . '</span>
<div class="play">
<i class="foxui-icon-kaishi-f"></i>
</div>
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
<input type="text" class="foxui-videos-title" placeholder="请输入标题" value="' . $video->title . '"/>
</li>
';
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-videos foxui-drag" data-count="-1">
<div class="foxui-videos-card {$field->name}">
<ul class="foxui-videos-list foxui-drag-container">
{$contentMedia}
<div class="foxui-videos-handle">
<div class="foxui-videos-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加视频</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "color") {
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-color">
<div class="foxui-color-handle is-alpha">
<span class="foxui-color-show" style="background-color: {$val}"></span>
<i class="foxui-icon-close"></i>
<span class="foxui-color-background"></span>
<input class="foxui-color-input {$field->name}" value="{$val}"/>
</div>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "icon") { //图标
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="inline-box">
<div class="foxui-iconsel foxui-size-medium">
<div class="foxui-iconsel-handle">
<div class="foxui-iconsel-show">
<i class="{$val}"></i>
</div>
<i class="foxui-icon-jiahao-o"></i>
<input class="foxui-iconsel-input {$field->name}" value="{$val}" />
</div>
</div>
</div>
</div>
</div>
php;
return $html;
}
}
//基本设置、联系方式属性动态组装
function fieldTag($field, $obj, $group = "")
{
$group = $group ?? "basic"; //默认
$call = "{fox:{$group} name='{$field->name}'/}";
if ($field->dtype == "text") { //单行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input class="foxui-size-small {$field->name}" placeholder="{$field->remark}" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "multitext") { //多行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-textarea">
<textarea class="{$field->name}" autocomplete="off" rows="1" placeholder="{$field->remark}">{$val}</textarea>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "htmltext") { //HTML文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="block-box rich-text">
<!-- 富文本 -->
<textarea class="richText {$field->name}" id="{$field->name}">{$val}</textarea>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "radio") { //单选
$valArr = explode(",", $field->dfvalue);
$content = "";
if ($obj) {
$valf = getFieldVal($obj, $field->name);
} else {
if (sizeof($valArr) > 0) {
$valf = $valArr[0];
}
}
foreach ($valArr as $key => $val) {
if ($val == $valf) {
$content .= '<div class="foxui-radio is-checked">';
} else {
$content .= '<div class="foxui-radio">';
}
$content .= '<span class="foxui-radio-input">
<i class="foxui-radio-icon"></i>
<input type="radio" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-radio-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label class="foxui-required">{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-radio-group {$field->name}">
{$content}
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "checkbox") { //多选
$valArr = explode(",", $field->dfvalue);
$valfArr = explode(",", getFieldVal($obj, $field->name));
$content = "";
foreach ($valArr as $key => $val) {
if (in_array($val, $valfArr)) {
$content .= '<div class="foxui-checkbox is-checked">';
} else {
$content .= '<div class="foxui-checkbox">';
}
$content .= '<span class="foxui-checkbox-input">
<i class="foxui-checkbox-icon"></i>
<input type="checkbox" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-checkbox-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="{$field->name}">
{$content}
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "switch") { //开关
$val = getFieldVal($obj, $field->name);
$isCheck = "";
if ($val == 1) {
$isCheck = "is-checked";
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box display-flex foxui-align-items-center">
<div class="foxui-switch {$isCheck}">
<input type="checkbox" checked="checked" value="{$val}" class="foxui-switch-input {$field->name}" />
<span class="foxui-switch-core"></span>
</div>
</div>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "select") { //下拉框
$val = "";
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$define = $field->define;
$define = str_replace("enum(", "", $define);
$define = str_replace(")", "", $define);
$define = str_replace("'", "", $define);
$valArr = explode(",", $define);
// $valArr = explode(",", $field->dfvalue);
$content = "";
foreach ($valArr as $key => $valLi) {
$content .= '<li class="foxui-select-item" data-id="' . $valLi . '">' . $valLi . '</li>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-select">
<div class="foxui-select-handle foxui-select-icon">
<input class="foxui-select-input foxui-size-small {$field->name}" readonly="readonly" placeholder="请选择值" value="{$val}" data-id="{$val}"/>
<i class="foxui-icon-close-circle"></i>
</div>
<div class="foxui-select-menu">
<ul class="foxui-select-slide">
{$content}
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "datetime") { //日期和时间
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-picker foxui-datetime-picker">
<div class="foxui-picker-handle foxui-input-prefix">
<i class="foxui-icon-gongzuo-o foxui-prefix-icon"></i>
<input class="foxui-size-small {$field->name}" readonly="readonly"placeholder="请选择时间" value="{$val}" data-id="{$val}"/>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "int") { //整数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9]/g,'');" class="foxui-size-small {$field->name}" placeholder="只允许纯数字" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "float") { //小数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的数值" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "decimal") { //金额类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的金额" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "pic") { //图片
$contentImg = "";
if ($obj) { //值不为空
$imgIds = getFieldVal($obj, $field->name);
if (!empty($imgIds)) {
$idsArr = explode(",", $imgIds);
if (sizeof($idsArr) > 0) {
foreach ($idsArr as $k => $img) {
$contentImg .= '
<li class="foxui-images-item foxui-animate-fadeInDown">
<div class="content">
<img src="' . $img . '" />
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
</li>
';
}
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-images foxui-images-fluid">
<div class="foxui-images-card {$field->name}">
<ul class="foxui-images-list">
{$contentImg}
<div class="foxui-images-handle">
<div class="foxui-images-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加图片</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "media") { //媒体
$contentMedia = "";
if ($obj) { //值不为空
$videostr = getFieldVal($obj, $field->name);
$videoArr = json_decode($videostr);
if (sizeof($videoArr) > 0) {
foreach ($videoArr as $video) {
$contentMedia .= '
<li class="foxui-videos-item foxui-animate-fadeInDown">
<div class="content">
<img data-id="' . $video->id . '" src="' . $video->pic . '" data-url="' . $video->url . '"/>
<span class="duration">' . $video->duration . '</span>
<div class="play">
<i class="foxui-icon-kaishi-f"></i>
</div>
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
<input type="text" class="foxui-videos-title" placeholder="请输入标题" value="' . $video->title . '"/>
</li>
';
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-videos foxui-drag" data-count="1">
<div class="foxui-videos-card {$field->name}">
<ul class="foxui-videos-list foxui-drag-container">
{$contentMedia}
<div class="foxui-videos-handle">
<div class="foxui-videos-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加视频</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "color") {
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-color">
<div class="foxui-color-handle is-alpha">
<span class="foxui-color-show" style="background-color: {$val}"></span>
<i class="foxui-icon-close"></i>
<span class="foxui-color-background"></span>
<input class="foxui-color-input {$field->name}" value="{$val}"/>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "icon") { //图标
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="inline-box">
<div class="foxui-iconsel foxui-size-medium">
<div class="foxui-iconsel-handle">
<div class="foxui-iconsel-show">
<i class="{$val}"></i>
</div>
<i class="foxui-icon-jiahao-o"></i>
<input class="foxui-iconsel-input {$field->name}" value="{$val}" />
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
}
}
//广告位等直接显示字段值
function fieldOtherTag($field, $obj)
{
$call = "{$field->name}";
if ($field->dtype == "text") { //单行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input class="foxui-size-small {$field->name}" placeholder="{$field->remark}" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "multitext") { //多行文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-textarea">
<textarea class="{$field->name}" autocomplete="off" rows="1" placeholder="{$field->remark}">{$val}</textarea>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "htmltext") { //HTML文本
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="block-box rich-text">
<!-- 富文本 -->
<textarea class="richText {$field->name}" id="{$field->name}">{$val}</textarea>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "radio") { //单选
$valArr = explode(",", $field->dfvalue);
$content = "";
if ($obj) {
$valf = getFieldVal($obj, $field->name);
} else {
if (sizeof($valArr) > 0) {
$valf = $valArr[0];
}
}
foreach ($valArr as $key => $val) {
if ($val == $valf) {
$content .= '<div class="foxui-radio is-checked">';
} else {
$content .= '<div class="foxui-radio">';
}
$content .= '<span class="foxui-radio-input">
<i class="foxui-radio-icon"></i>
<input type="radio" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-radio-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label class="foxui-required">{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-radio-group {$field->name}">
{$content}
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "checkbox") { //多选
$valArr = explode(",", $field->dfvalue);
$valfArr = explode(",", getFieldVal($obj, $field->name));
$content = "";
foreach ($valArr as $key => $val) {
if (in_array($val, $valfArr)) {
$content .= '<div class="foxui-checkbox is-checked">';
} else {
$content .= '<div class="foxui-checkbox">';
}
$content .= '<span class="foxui-checkbox-input">
<i class="foxui-checkbox-icon"></i>
<input type="checkbox" value="' . $val . '" checked="checked" />
</span>
<span class="foxui-checkbox-label">' . $val . '</span>
</div>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="{$field->name}">
{$content}
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "switch") { //开关
$val = getFieldVal($obj, $field->name);
$isCheck = "";
if ($val == 1) {
$isCheck = "is-checked";
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box display-flex foxui-align-items-center">
<div class="foxui-switch {$isCheck}">
<input type="checkbox" checked="checked" value="{$val}" class="foxui-switch-input {$field->name}" />
<span class="foxui-switch-core"></span>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "select") { //下拉框
$val = "";
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$define = $field->define;
$define = str_replace("enum(", "", $define);
$define = str_replace(")", "", $define);
$define = str_replace("'", "", $define);
$valArr = explode(",", $define);
$content = "";
foreach ($valArr as $key => $valLi) {
$content .= '<li class="foxui-select-item" data-id="' . $valLi . '">' . $valLi . '</li>';
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-select">
<div class="foxui-select-handle foxui-select-icon">
<input class="foxui-select-input foxui-size-small {$field->name}" readonly="readonly" placeholder="请选择值" value="{$val}" data-id="{$val}"/>
<i class="foxui-icon-close-circle"></i>
</div>
<div class="foxui-select-menu">
<ul class="foxui-select-slide">
{$content}
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "datetime") { //日期和时间
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-picker foxui-datetime-picker">
<div class="foxui-picker-handle foxui-input-prefix">
<i class="foxui-icon-gongzuo-o foxui-prefix-icon"></i>
<input class="foxui-size-small {$field->name}" readonly="readonly"placeholder="请选择时间" value="{$val}" />
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "int") { //整数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9]/g,'');" class="foxui-size-small {$field->name}" placeholder="只允许纯数字" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "float") { //小数类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的数值" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "decimal") { //金额类型
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<input type="text" onkeyup="this.value=this.value.replace(/[^0-9\.]/g,'');" class="foxui-size-small {$field->name}" placeholder="允许小数点的金额" value="{$val}" />
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "pic") { //图片
$contentImg = "";
if ($obj) { //值不为空
$imgIds = getFieldVal($obj, $field->name);
if (!empty($imgIds)) {
$idsArr = explode(",", $imgIds);
if (sizeof($idsArr) > 0) {
foreach ($idsArr as $k => $img) {
$contentImg .= '
<li class="foxui-images-item foxui-animate-fadeInDown">
<div class="content">
<img src="' . $img . '" />
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
</li>
';
}
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-images foxui-images-fluid">
<div class="foxui-images-card {$field->name}">
<ul class="foxui-images-list">
{$contentImg}
<div class="foxui-images-handle">
<div class="foxui-images-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加图片</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "pics") { //图片集合
$contentImg = "";
if ($obj) { //值不为空
$imgIds = getFieldVal($obj, $field->name);
if (!empty($imgIds)) {
$idsArr = explode(",", $imgIds);
if (sizeof($idsArr) > 0) {
foreach ($idsArr as $k => $img) {
$contentImg .= '
<li class="foxui-images-item foxui-drag-item foxui-animate-fadeInDown">
<div class="content">
<img src="' . $img . '" />
<div class="foxui-drag-handle"></div>
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
</li>
';
}
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-images foxui-drag" data-count="-1">
<div class="foxui-images-card {$field->name}">
<ul class="foxui-images-list foxui-drag-container">
{$contentImg}
<div class="foxui-images-handle">
<div class="foxui-images-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加图片</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "media") { //媒体
$contentMedia = "";
if ($obj) { //值不为空
$videostr = getFieldVal($obj, $field->name);
$videoArr = json_decode($videostr);
if (sizeof($videoArr) > 0) {
foreach ($videoArr as $video) {
$contentMedia .= '
<li class="foxui-videos-item foxui-animate-fadeInDown">
<div class="content">
<img data-id="' . $video->id . '" src="' . $video->pic . '" data-url="' . $video->url . '"/>
<span class="duration">' . $video->duration . '</span>
<div class="play">
<i class="foxui-icon-kaishi-f"></i>
</div>
<span class="replace">替换</span>
<i class="foxui-icon-cuowu-f delete"></i>
</div>
<input type="text" class="foxui-videos-title" placeholder="请输入标题" value="' . $video->title . '"/>
</li>
';
}
}
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group foxui-align-items-start">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-videos foxui-drag" data-count="1">
<div class="foxui-videos-card {$field->name}">
<ul class="foxui-videos-list foxui-drag-container">
{$contentMedia}
<div class="foxui-videos-handle">
<div class="foxui-videos-handle-inner">
<i class="foxui-icon-jiahao-o"></i>
<span class="text">添加视频</span>
</div>
</div>
</ul>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "color") {
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="input-box">
<div class="foxui-color">
<div class="foxui-color-handle is-alpha">
<span class="foxui-color-show" style="background-color: {$val}"></span>
<i class="foxui-icon-close"></i>
<span class="foxui-color-background"></span>
<input class="foxui-color-input {$field->name}" value="{$val}"/>
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
} elseif ($field->dtype == "icon") { //图标
$val = $field->dfvalue;
if ($obj) { //值不为空
$val = getFieldVal($obj, $field->name);
}
$html = <<<php
<div class="section-main-item">
<div class="foxui-input-group">
<div class="input-label">
<label>{$field->title}</label>
</div>
<div class="inline-box">
<div class="foxui-iconsel foxui-size-medium">
<div class="foxui-iconsel-handle">
<div class="foxui-iconsel-show">
<i class="{$val}"></i>
</div>
<i class="foxui-icon-jiahao-o"></i>
<input class="foxui-iconsel-input {$field->name}" value="{$val}" />
</div>
</div>
</div>
</div>
<div class="call-field">
<span class="foxui-color-secondary">字段名称:</span>
<span class="foxui-tag foxui-light-info">{$call}</span>
</div>
</div>
php;
return $html;
}
}
//获取对象中的属性值
function getFieldVal($obj, $fieldName)
{
if ($obj) {
return $obj[$fieldName];
}
return "";
}
//栏目属性动态组装
function columnFieldTag($id = "")
{
$column = \app\common\model\Column::find($id);
$where = ['status' => 1, "is_system" => 0];
$columnList = \app\common\model\ColumnField::where($where)->where(function ($query) use ($id) {
$query->whereOr([['', 'exp', \think\facade\Db::raw("FIND_IN_SET($id, column_ids)")]]);
})->order(["sort_order" => "desc", "create_time" => "asc"])->select();
$html = "";
foreach ($columnList as $field) { //循环栏目模型
$html .= fieldObjTag($field, $column);
}
return $html;
}
//模型属性动态组装
function modelFieldTag($model, $id = "")
{
$html = "";
$modelObj = \think\facade\Db::name($model)->find($id); //查询对应模型值
$where = ["model" => $model, "is_system" => 0, "status" => 1];
$modelList = \app\common\model\ModelField::where($where)->order(["sort_order" => "desc", "create_time" => "asc"])->select(); //查询模型字段
foreach ($modelList as $field) { //循环栏目模型
$html .= fieldObjTag($field, $modelObj);
}
return $html;
}
//会员属性动态组装
function memberFieldTag($model = "", $id = "", $member_model_id = 0)
{
$html = "";
$modelObj = null;
if (!empty($model) && !empty($id)) {
$modelObj = \think\facade\Db::name($model)->find($id); //查询对应模型值
//不显示密码
$modelObj['password'] = "";
}
$where = ["status" => 1, "member_model_id" => $member_model_id];
$modelList = \app\common\model\MemberModelField::where($where)->order(["sort_order" => "desc", "create_time" => "asc"])->select(); //查询模型字段
foreach ($modelList as $field) { //循环栏目模型
$html .= fieldObjTag($field, $modelObj);
}
return $html;
}
//变量属性动态组装
function variateFieldTag($group, $id = "")
{
$html = "";
$groupObj = \think\facade\Db::name($group)->find($id); //查询对应模型值
$where = ["status" => 1, 'group' => $group];
$modelList = \app\common\model\VariateField::where($where)->order(["sort_order" => "desc", "create_time" => "asc"])->select(); //查询模型字段
foreach ($modelList as $field) { //循环栏目模型
$html .= fieldTag($field, $groupObj, $group);
}
return $html;
}
//表单字段
function formFieldTag($tableName, $id = "", $formListId = "")
{
$html = "";
$tableObj = \think\facade\Db::table($tableName)->find($id); //查询对应模型值
$where = [];
if (!empty($formListId)) {
array_push($where, ['form_list_id', '=', $formListId]);
}
$formFieldList = \app\common\model\FormField::where($where)->order(["sort_order" => "asc", "create_time" => "asc"])->select(); //查询模型字段
foreach ($formFieldList as $field) { //循环栏目模型
$html .= fieldObjTag($field, $tableObj);
}
return $html;
}
//广告位字段
function advFieldTag($id)
{
$html = "";
$slideObj = \app\common\model\Slide::find($id);
$where = ["advertising_space_id" => $slideObj["advertising_space_id"]];
$advFieldList = \app\common\model\AdvertisingSpaceField::where($where)->order(["sort_order" => "desc", "create_time" => "asc"])->select(); //查询模型字段
foreach ($advFieldList as $field) { //循环栏目模型
$html .= fieldOtherTag($field, $slideObj);
}
return $html;
}
//首页地址处理
function resetIndexUrl($url, $lang = "")
{
$home_lang = xn_cfg("base.home_lang"); //默认语言
if ($home_lang == $lang) {
$lang = "";
}
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
$url_html_suffix = config("route.url_html_suffix");
if (!empty($lang)) {
if ($url_model == 1) {
$url = url("{$url}") . "?lang={$lang}";
} else if ($url_model == 2) {
$url = "{$url}_{$lang}";
$url = url("{$url}");
} else if ($url_model == 3) {
$url = "{$url}_{$lang}.$url_html_suffix";
}
} else {
if ($url_model == 1 || $url_model == 2) {
if (empty($url)) {
$url = "/";
}
} else if ($url_model == 3) {
$url = "{$url}.$url_html_suffix";
}
}
return $url;
}
//针对栏目重新根据seo设置组装url
function resetUrl($url, $id, $lang = "")
{
// if (empty($url)) {
// return $url;
// }
$home_lang = xn_cfg("base.home_lang"); //默认语言
if ($home_lang == $lang) {
$lang = "";
}
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
$url_html_suffix = config("route.url_html_suffix");
//栏目
$column_page = xn_cfg("seo.column_page"); //栏目生成方式
if ($url_model == 1) {
if (empty($lang)) {
if (empty($id)) {
$url = url("{$url}");
} else {
$url = url("{$url}") . "?id={$id}";
}
} else {
if (empty($id)) {
$url = url("{$url}") . "?id={$id}&lang={$lang}";
} else {
$url = url("{$url}") . "?id={$id}&lang={$lang}";
}
}
} elseif ($url_model == 2) {
$url = url("/{$lang}{$url}/{$id}");
} elseif ($url_model == 3) { //静态模式下
if (is_mobile()) { //手机访问
if (empty($id)) {
$url = url("/{$lang}{$url}");
} else {
$url = url("/{$lang}{$url}/{$id}");
}
return replaceSymbol($url);
}
$column_id = $id;
if (empty($column_id)) {
$url = "javascript:void(0);";
} else {
$basic = getBasic(); //暂时不用
if (empty($lang)) {
$html_save_path = $basic['html_save_path'];
} else {
$html_save_path = $lang;
}
$curColumn = \app\common\model\Column::find($id);
$columnList = get_column_up($column_id);
if ($column_page == 1 && $curColumn["pid"] != 0) {
$htmlfile = "list_" . $curColumn['id']; //子栏目名称
//子栏目存放路径
foreach ($columnList as $column) {
if ($column["pid"] == 0) {
$url = "/{$html_save_path}/" . $column['dir_path'] . "/" . $htmlfile . "." . $url_html_suffix;
break;
}
}
} else {
if ($curColumn["pid"] == 0) {
$url = "/{$html_save_path}/" . $curColumn['dir_path'] . '/';
} else {
$parenPath = "";
foreach ($columnList as $column) {
$parenPath .= $column["dir_path"];
}
$url = "/{$html_save_path}/" . $parenPath . '/';
}
}
}
}
return replaceSymbol($url);
}
//详情数据
function detailSetUrl($url, $id, $columnId, $model, $lang = "")
{
$url_html_suffix = config("route.url_html_suffix");
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
$home_lang = xn_cfg("base.home_lang"); //默认语言
if ($home_lang == $lang) {
$lang = "";
}
//栏目
$document_page = xn_cfg("seo.document_page"); //文档生成方式
if ($url_model == 1) {
if (empty($lang)) {
if (empty($id)) {
$url = url("{$url}");
} else {
$url = url("{$url}") . "?id={$id}";
}
} else {
if (empty($id)) {
$url = url("{$url}") . "?id={$id}&lang={$lang}";
} else {
$url = url("{$url}") . "?id={$id}&lang={$lang}";
}
}
} elseif ($url_model == 2) {
$url = url("/{$lang}{$url}/{$id}");
} elseif ($url_model == 3) { //静态模式下
if (is_mobile()) { //手机访问
if (empty($id)) {
$url = url("/{$lang}{$url}");
} else {
$url = url("/{$lang}{$url}/{$id}");
}
return replaceSymbol($url);
}
$basic = getBasic(); //暂时不能用
if (empty($lang)) {
$html_save_path = $basic['html_save_path'];
} else {
$html_save_path = $lang;
}
$curData = \think\facade\Db::name($model)->find($id);
$columnList = get_column_up($columnId);
$parenPath = "";
foreach ($columnList as $column) {
$parenPath .= "/" . $column["dir_path"];
}
if ($document_page == 1) {
$url = "/{$html_save_path}/" . $parenPath . '/' . foxDate("Ymd", $curData['create_time']) . '/' . $curData['id'] . "." . $url_html_suffix;
} else {
$url = "/{$html_save_path}/" . $parenPath . '/' . $curData['id'] . "." . $url_html_suffix;
}
}
return replaceSymbol($url);
}
//获取标签的url 针对TAG标签
function tagUrl($id)
{
$url_html_suffix = config("route.url_html_suffix");
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
if ($url_model == 1) {
$url = url("list") . "?id={$id}";
} elseif ($url_model == 2) {
$url = url("list/{$id}");
} elseif ($url_model == 3) { //静态模式下
if (is_mobile()) { //手机访问
$url = url("list/{$id}");
return replaceSymbol($url);
}
$basic = getBasic();
$url = "/{$basic["html_save_path"]}/tag/" . $id . "." . $url_html_suffix;
}
return replaceSymbol($url);
}
//获取栏目url
function getColumnUrl($column, $index = 0)
{
$url = "";
if ($column["column_attr"] == 0) {
$url = resetUrl($column['v_path'], $column["id"], $column['visit_lang']);
} elseif ($column["column_attr"] == 1) { //外部链接
$url = $column['out_link_head'] . $column['out_link'];
} elseif ($column["column_attr"] == 2) { //内链栏目
$inner_column = $column['inner_column'];
if (!empty($inner_column)) {
$columnInner = \app\common\model\Column::find($inner_column);
if ($columnInner) {
$vPath = $columnInner["v_path"];
$url = resetUrl($vPath, $inner_column, $column['visit_lang']);
}
}
}
return replaceSymbol($url);
}
//tag标签地址
function tagSetUrl($url, $param)
{
//生成路由 //1:动态url,2:伪静态化,3:静态页面
$url_model = xn_cfg("seo.url_model");
$id = $param['id'];
// $name = $param['name'];
if ($url_model == 1) {
if (sizeof($param) > 0) {
$paramStr = func_param_pack($param, "&"); //参数串
$url = url("{$url}") . "?{$paramStr}";
} else {
$url = url("{$url}");
}
} elseif ($url_model == 2 || $url_model == 3) { //2:伪静态化,3:静态页面
unset($param['id']);
if (sizeof($param) > 0) {
$paramStr = func_param_pack($param, "&"); //参数串
// $url = url("{$url}/{$id}")."?{$paramStr}";
$url = url("{$url}") . "?{$paramStr}";
} else {
$url = url("{$url}");
}
}
return replaceSymbol($url);
}
//查询栏目的所有字栏目id
function getChildrensColumnId($columnId, $model, $lang = "")
{
//向下查询所有子孙栏目
$allColumn = get_column_down($columnId, $model, $lang);
$columnIdArr = [];
foreach ($allColumn as $column) {
array_push($columnIdArr, $column["id"]);
}
return $columnIdArr;
}
//获取所有父类祖辈的栏目id
function getParentsColumnId($columnId, $model, $lang = "")
{
//向下查询所有子孙栏目
$allColumn = get_column_up($columnId, $model, $lang);
$columnIdArr = [];
foreach ($allColumn as $column) {
array_push($columnIdArr, $column["id"]);
}
return $columnIdArr;
}
//获取页面中分页的分页标签配置
function getPageList($fileContent)
{
$param = [];
if (!empty($fileContent) && $fileContent != null) {
$start = "{fox:list";
$end = "{/fox:list}";
$fileContent = get_between($fileContent, $start, $end);
$fileContent = mb_substr($fileContent, 0, stripos($fileContent, "}"));
$fileContent = preg_replace('/\ +=/', "=", $fileContent); //去掉等号(=)前面的空格
$fileContent = preg_replace('/\= +/', "=", $fileContent); //去掉等号(=)后面的空格
$fileArr = explode(" ", $fileContent);
foreach ($fileArr as $fc) {
$kwArr = explode("=", $fc);
if (sizeof($kwArr) == 2) {
$k = $kwArr[0];
$v = num_en($kwArr[1]);
$param[$k] = $v;
}
}
}
return $param;
}
//访问统计
function access_stat_js($html, $domainNo)
{
$url = "//" . $domainNo . url("/plus/Access/stat");
$jsStr = <<<EOF
<script>
(function () {
let hm = document.createElement("script");
hm.src = "{$url}";
let s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
EOF;
$html = str_ireplace('</head>', $jsStr . "\n</head>", $html);
$html = add_copyright($html);
return $html;
}
//版权
function add_copyright($html)
{
$base = xn_cfg("base");
$copyright_remove_mark = $base['copyright_remove_mark'] ?? 0;
$copyright_color = $base['copyright_color'];
if (isset($base['copyright_mark_desc'])) {
$copyright_mark_desc = dataD($base['copyright_mark_desc']);
} else {
$copyright_mark_desc = 'fd72bSHX4oDNwz44otEPuqo2mtVYMV1SpwCXdeIkhGNpp4FV2IjkjPcWL5x2gBTnmTeGfddN/DbGCYloPlMW9TXA0i4bGnRP9u/O6LrJc6ZKhYNG1uhNEmx7258k15KGuG4JmTQR4aVuE1foEVS8jesSsJjsICeyrZ52Us0mQ+yiR7puMQUDakZjw6Z3Hx8yJIOfbBkILMoZFckX83M8HUwn9ustzDNwTg42Q5/RO6PO9XWEV7Dr3kRhsOOzMDZbLoThkObKowxFE8i8oRPVo9wzQsDcPyog98IstVArSx6NFA7BxfG84KYvzCC4T8UX8pke9XQZo4xWnKaPOz+Ga5CvXsEsWg56Qv+8wjtlk42YUrOeptS752MW2tWns18GLC475eL7ITr0RgOK6q6DSDsaVa25z0sgFFns8pKBEJWM1C9laExssU+6GtmQgTIvhrHtMwQnuP40g85/YRsC6u97rSMIaCMm3LvmVAbE7KcKx1JU/KMdfbx88/u4gHeqvjmm1xunk4Vsou/hhwoCZws';
$copyright_mark_desc = dataD($copyright_mark_desc);
}
if ($copyright_remove_mark == 0 || $copyright_remove_mark != 1) {
$versionPath = root_path() . "data/update/version/info.php";
$versionInfo = require($versionPath);
$version = "未知";
if (!empty($versionInfo['version'])) {
$version = "V{$versionInfo['version']}";
}
$textColor = $base['font_color'];
$addHtml = str_replace("_COLOR", $textColor, $copyright_mark_desc);
$addHtml = str_replace("_COPYRIGHTCOLOR", $copyright_color, $addHtml);
$addHtml = str_replace("V_V", $version, $addHtml);
$addHtml = str_replace("_YEAR", date("Y"), $addHtml);
$html = str_ireplace('</html>', $addHtml . "\n</html>", $html);
}
return $html;
}
//判断表是否存在
function is_exist_table($tableName)
{
$table_infos = Db::query('SHOW TABLE STATUS');
if (sizeof($table_infos) > 0) {
foreach ($table_infos as $table_info) {
if ($tableName == $table_info['Name']) {
return true;
}
}
}
return false;
}
//退出地址
function logout_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Login/logout");
}
//栏目模型地址
function getColumModels_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Column/getColumModels");
}
//个人中心
function adminEdit_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Admin/edit");
}
//清除缓存
function loginClearCache_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Login/clearCache");
}
//修改密码
function adminUpdatePassword_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/admin/updatePassword");
}
//循环生成静态html
function seoAllSite_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Seo/allSite");
}
//单独静态生成
function seoAddDataBuildDetail_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Seo/addDataBuildDetail");
}
//单独静态栏目生成
function singleAllSite_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Seo/singleAllSite");
}
//删除幻灯片
function slideDelete_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Slide/delete");
}
//幻灯片编辑
function slideEdit_url()
{
$adminP = config("adminconfig.admin_path");
return url($adminP . "/Slide/edit");
}
// 获取语言包数据
function getLang($lang)
{
// 设置缓存的键,可以包含文件的路径或其他标识符
$cacheKey = 'file_content_' . md5($lang);
// 尝试从缓存中读取内容
$rContent = \think\facade\Cache::get($cacheKey);
if ($rContent === null || $rContent === "{}" || $rContent === "") {
// 缓存未命中,从文件中读取内容
$filePath = root_path('app/lang') . "pack/{$lang}.ini"; //复制原语音包路
$filePath = replaceSymbol($filePath);
$content = file_get_contents($filePath);
$rContent = "{" . $content . "}";
// 将内容写入缓存,并设置缓存过期时间
\think\facade\Cache::set($cacheKey, $rContent, 3600); // 假设缓存有效期为1小时
}
if (empty($rContent)) {
return [];
}
return json_decode($rContent, true);
}
//根据语言标识翻译
function getLangContentByMark($lang, $mark)
{
$langs = getLang($lang);
return $langs[$mark];
}