1259 lines
51 KiB
PHP
1259 lines
51 KiB
PHP
<?php
|
||
/**
|
||
* 易优CMS
|
||
* ============================================================================
|
||
* 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
|
||
* 网站地址: http://www.eyoucms.com
|
||
* ----------------------------------------------------------------------------
|
||
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
|
||
* ============================================================================
|
||
* Author: 小虎哥 <1105415366@qq.com>
|
||
* Date: 2018-4-3
|
||
*/
|
||
|
||
namespace app\admin\controller;
|
||
|
||
use think\Page;
|
||
use think\Db;
|
||
use app\common\logic\ArctypeLogic;
|
||
use app\admin\logic\ProductLogic;
|
||
use app\admin\logic\ProductSpecLogic; // 用于产品规格逻辑功能处理
|
||
|
||
class Product extends Base
|
||
{
|
||
// 模型标识
|
||
public $nid = 'product';
|
||
// 模型ID
|
||
public $channeltype = '';
|
||
// 表单类型
|
||
public $attrInputTypeArr = array();
|
||
|
||
public function _initialize()
|
||
{
|
||
parent::_initialize();
|
||
$channeltype_list = config('global.channeltype_list');
|
||
$this->channeltype = $channeltype_list[$this->nid];
|
||
empty($this->channeltype) && $this->channeltype = 2;
|
||
$this->attrInputTypeArr = config('global.attr_input_type_arr');
|
||
$this->assign('nid', $this->nid);
|
||
$this->assign('channeltype', $this->channeltype);
|
||
}
|
||
|
||
/**
|
||
* 产品列表
|
||
*/
|
||
public function index()
|
||
{
|
||
$assign_data = array();
|
||
$condition = array();
|
||
// 获取到所有GET参数
|
||
$param = input('param.');
|
||
$flag = input('flag/s');
|
||
$typeid = input('typeid/d', 0);
|
||
$begin = strtotime(input('add_time_begin'));
|
||
$end = strtotime(input('add_time_end'));
|
||
|
||
// 应用搜索条件
|
||
foreach (['keywords','typeid','flag','is_release'] as $key) {
|
||
if (isset($param[$key]) && $param[$key] !== '') {
|
||
if ($key == 'keywords') {
|
||
$condition['a.title'] = array('LIKE', "%{$param[$key]}%");
|
||
} else if ($key == 'typeid') {
|
||
$typeid = $param[$key];
|
||
$hasRow = model('Arctype')->getHasChildren($typeid);
|
||
$typeids = get_arr_column($hasRow, 'id');
|
||
/*权限控制 by 小虎哥*/
|
||
$admin_info = session('admin_info');
|
||
if (0 < intval($admin_info['role_id'])) {
|
||
$auth_role_info = $admin_info['auth_role_info'];
|
||
if(! empty($auth_role_info)){
|
||
if(! empty($auth_role_info['permission']['arctype'])){
|
||
if (!empty($typeid)) {
|
||
$typeids = array_intersect($typeids, $auth_role_info['permission']['arctype']);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/*--end*/
|
||
$condition['a.typeid'] = array('IN', $typeids);
|
||
} else if ($key == 'flag') {
|
||
if ('is_release' == $param[$key]) {
|
||
$condition['a.users_id'] = array('gt', 0);
|
||
} else {
|
||
$condition['a.'.$param[$key]] = array('eq', 1);
|
||
}
|
||
// } else if ($key == 'is_release') {
|
||
// if (0 < intval($param[$key])) {
|
||
// $condition['a.users_id'] = array('gt', intval($param[$key]));
|
||
// }
|
||
} else {
|
||
$condition['a.'.$key] = array('eq', $param[$key]);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*权限控制 by 小虎哥*/
|
||
$admin_info = session('admin_info');
|
||
if (0 < intval($admin_info['role_id'])) {
|
||
$auth_role_info = $admin_info['auth_role_info'];
|
||
if(! empty($auth_role_info)){
|
||
if(isset($auth_role_info['only_oneself']) && 1 == $auth_role_info['only_oneself']){
|
||
$condition['a.admin_id'] = $admin_info['admin_id'];
|
||
}
|
||
}
|
||
}
|
||
/*--end*/
|
||
|
||
// 时间检索
|
||
if ($begin > 0 && $end > 0) {
|
||
$condition['a.add_time'] = array('between',"$begin,$end");
|
||
} else if ($begin > 0) {
|
||
$condition['a.add_time'] = array('egt', $begin);
|
||
} else if ($end > 0) {
|
||
$condition['a.add_time'] = array('elt', $end);
|
||
}
|
||
|
||
// 模型ID
|
||
$condition['a.channel'] = array('eq', $this->channeltype);
|
||
// 多语言
|
||
$condition['a.lang'] = array('eq', $this->admin_lang);
|
||
// 回收站
|
||
$condition['a.is_del'] = array('eq', 0);
|
||
|
||
/*自定义排序*/
|
||
$orderby = input('param.orderby/s');
|
||
$orderway = input('param.orderway/s');
|
||
if (!empty($orderby)) {
|
||
$orderby = "a.{$orderby} {$orderway}";
|
||
$orderby .= ", a.aid desc";
|
||
} else {
|
||
$orderby = "a.aid desc";
|
||
}
|
||
/*end*/
|
||
|
||
/**
|
||
* 数据查询,搜索出主键ID的值
|
||
*/
|
||
$count = Db::name('archives')->alias('a')->where($condition)->count('aid');// 查询满足要求的总记录数
|
||
$Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
|
||
$list = Db::name('archives')
|
||
->field("a.aid")
|
||
->alias('a')
|
||
->where($condition)
|
||
->order($orderby)
|
||
->limit($Page->firstRow.','.$Page->listRows)
|
||
->getAllWithIndex('aid');
|
||
|
||
/**
|
||
* 完善数据集信息
|
||
* 在数据量大的情况下,经过优化的搜索逻辑,先搜索出主键ID,再通过ID将其他信息补充完整;
|
||
*/
|
||
if ($list) {
|
||
$aids = array_keys($list);
|
||
$fields = "b.*, a.*, a.aid as aid";
|
||
$row = Db::name('archives')
|
||
->field($fields)
|
||
->alias('a')
|
||
->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
|
||
->where('a.aid', 'in', $aids)
|
||
->getAllWithIndex('aid');
|
||
foreach ($list as $key => $val) {
|
||
$row[$val['aid']]['arcurl'] = get_arcurl($row[$val['aid']]);
|
||
$row[$val['aid']]['litpic'] = handle_subdir_pic($row[$val['aid']]['litpic']); // 支持子目录
|
||
$list[$key] = $row[$val['aid']];
|
||
}
|
||
}
|
||
$show = $Page->show(); // 分页显示输出
|
||
$assign_data['page'] = $show; // 赋值分页输出
|
||
$assign_data['list'] = $list; // 赋值数据集
|
||
$assign_data['pager'] = $Page; // 赋值分页对象
|
||
|
||
// 栏目ID
|
||
$assign_data['typeid'] = $typeid; // 栏目ID
|
||
/*当前栏目信息*/
|
||
$arctype_info = array();
|
||
if ($typeid > 0) {
|
||
$arctype_info = M('arctype')->field('typename')->find($typeid);
|
||
}
|
||
$assign_data['arctype_info'] = $arctype_info;
|
||
/*--end*/
|
||
|
||
/*选项卡*/
|
||
$tab = input('param.tab/d', 3);
|
||
$assign_data['tab'] = $tab;
|
||
/*--end*/
|
||
|
||
/*文档属性*/
|
||
$assign_data['archives_flags'] = model('ArchivesFlag')->getList();
|
||
|
||
$this->assign($assign_data);
|
||
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 添加
|
||
*/
|
||
public function add()
|
||
{
|
||
$admin_info = session('admin_info');
|
||
$auth_role_info = $admin_info['auth_role_info'];
|
||
$this->assign('auth_role_info', $auth_role_info);
|
||
$this->assign('admin_info', $admin_info);
|
||
if (IS_POST) {
|
||
$post = input('post.');
|
||
|
||
/* 处理TAG标签 */
|
||
if (!empty($post['tags_new'])) {
|
||
$post['tags'] = !empty($post['tags']) ? $post['tags'] . ',' . $post['tags_new'] : $post['tags_new'];
|
||
unset($post['tags_new']);
|
||
}
|
||
$post['tags'] = explode(',', $post['tags']);
|
||
$post['tags'] = array_unique($post['tags']);
|
||
$post['tags'] = implode(',', $post['tags']);
|
||
/* END */
|
||
|
||
$content = input('post.addonFieldExt.content', '', null);
|
||
|
||
// 根据标题自动提取相关的关键字
|
||
$seo_keywords = $post['seo_keywords'];
|
||
if (!empty($seo_keywords)) {
|
||
$seo_keywords = str_replace(',', ',', $seo_keywords);
|
||
} else {
|
||
// $seo_keywords = get_split_word($post['title'], $content);
|
||
}
|
||
|
||
// 自动获取内容第一张图片作为封面图
|
||
$is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
|
||
$litpic = '';
|
||
if ($is_remote == 1) {
|
||
$litpic = $post['litpic_remote'];
|
||
} else {
|
||
$litpic = $post['litpic_local'];
|
||
}
|
||
if (empty($litpic)) {
|
||
$litpic = get_html_first_imgurl($content);
|
||
}
|
||
$post['litpic'] = $litpic;
|
||
|
||
/*是否有封面图*/
|
||
if (empty($post['litpic'])) {
|
||
$is_litpic = 0; // 无封面图
|
||
} else {
|
||
$is_litpic = 1; // 有封面图
|
||
}
|
||
|
||
// SEO描述
|
||
$seo_description = '';
|
||
if (empty($post['seo_description']) && !empty($content)) {
|
||
$seo_description = @msubstr(checkStrHtml($content), 0, config('global.arc_seo_description_length'), false);
|
||
} else {
|
||
$seo_description = $post['seo_description'];
|
||
}
|
||
|
||
// 外部链接跳转
|
||
$jumplinks = '';
|
||
$is_jump = isset($post['is_jump']) ? $post['is_jump'] : 0;
|
||
if (intval($is_jump) > 0) {
|
||
$jumplinks = $post['jumplinks'];
|
||
}
|
||
|
||
// 模板文件,如果文档模板名与栏目指定的一致,默认就为空。让它跟随栏目的指定而变
|
||
if ($post['type_tempview'] == $post['tempview']) {
|
||
unset($post['type_tempview']);
|
||
unset($post['tempview']);
|
||
}
|
||
|
||
//处理自定义文件名,仅由字母数字下划线和短横杆组成,大写强制转换为小写
|
||
$htmlfilename = trim($post['htmlfilename']);
|
||
if (!empty($htmlfilename)) {
|
||
$htmlfilename = preg_replace("/[^a-zA-Z0-9_-]+/", "-", $htmlfilename);
|
||
$htmlfilename = strtolower($htmlfilename);
|
||
//判断是否存在相同的自定义文件名
|
||
$filenameCount = Db::name('archives')->where([
|
||
'htmlfilename' => $htmlfilename,
|
||
'lang' => $this->admin_lang,
|
||
])->count();
|
||
if (!empty($filenameCount)) {
|
||
$this->error("自定义文件名已存在,请重新设置!");
|
||
}
|
||
}
|
||
$post['htmlfilename'] = $htmlfilename;
|
||
|
||
// 产品类型
|
||
if (!empty($post['prom_type'])) {
|
||
if ($post['prom_type_vir'] == 2) {
|
||
$post['netdisk_url'] = trim($post['netdisk_url']);
|
||
if (empty($post['netdisk_url'])) {
|
||
$this->error("网盘地址不能为空!");
|
||
}
|
||
$post['prom_type'] = 2;
|
||
} else if ($post['prom_type_vir'] == 3) {
|
||
$post['text_content'] = trim($post['text_content']);
|
||
if (empty($post['text_content'])) {
|
||
$this->error("虚拟文本内容不能为空!");
|
||
}
|
||
$post['prom_type'] = 3;
|
||
}
|
||
}
|
||
|
||
//做自动通过审核判断
|
||
if ($admin_info['role_id'] > 0 && $auth_role_info['check_oneself'] < 1) {
|
||
unset($post['arcrank']);
|
||
}
|
||
|
||
// --存储数据
|
||
$newData = array(
|
||
'typeid'=> empty($post['typeid']) ? 0 : $post['typeid'],
|
||
'channel' => $this->channeltype,
|
||
'is_b' => empty($post['is_b']) ? 0 : $post['is_b'],
|
||
'is_head' => empty($post['is_head']) ? 0 : $post['is_head'],
|
||
'is_special' => empty($post['is_special']) ? 0 : $post['is_special'],
|
||
'is_recom' => empty($post['is_recom']) ? 0 : $post['is_recom'],
|
||
'is_roll' => empty($post['is_roll']) ? 0 : $post['is_roll'],
|
||
'is_slide' => empty($post['is_slide']) ? 0 : $post['is_slide'],
|
||
'is_diyattr' => empty($post['is_diyattr']) ? 0 : $post['is_diyattr'],
|
||
'is_jump' => $is_jump,
|
||
'is_litpic' => $is_litpic,
|
||
'jumplinks' => $jumplinks,
|
||
'seo_keywords' => $seo_keywords,
|
||
'seo_description' => $seo_description,
|
||
'admin_id' => session('admin_info.admin_id'),
|
||
'stock_show' => empty($post['stock_show']) ? 0 : $post['stock_show'],
|
||
'users_price' => empty($post['users_price']) ? 0 : floatval($post['users_price']),
|
||
'lang' => $this->admin_lang,
|
||
'sort_order' => 100,
|
||
'add_time' => strtotime($post['add_time']),
|
||
'update_time' => strtotime($post['add_time']),
|
||
);
|
||
$data = array_merge($post, $newData);
|
||
|
||
$aid = Db::name('archives')->insertGetId($data);
|
||
$_POST['aid'] = $aid;
|
||
if ($aid) {
|
||
// ---------后置操作
|
||
model('Product')->afterSave($aid, $data, 'add', true);
|
||
// ---------end
|
||
|
||
// 若选择多规格选项,则添加产品规格
|
||
if (!empty($post['spec_type']) && 2 == $post['spec_type']) {
|
||
model('ProductSpecPreset')->ProductSpecInsertAll($aid, $data);
|
||
}
|
||
|
||
adminLog('新增产品:'.$data['title']);
|
||
|
||
//虚拟商品保存
|
||
if (!empty($post['prom_type']) && in_array($post['prom_type'], [2,3])) {
|
||
model('ProductNetdisk')->saveProductNetdisk($aid, $data);
|
||
}
|
||
|
||
// 生成静态页面代码
|
||
$successData = [
|
||
'aid' => $aid,
|
||
'tid' => $post['typeid'],
|
||
];
|
||
$this->success("操作成功!", null, $successData);
|
||
exit;
|
||
}
|
||
|
||
$this->error("操作失败!");
|
||
exit;
|
||
}
|
||
|
||
$typeid = input('param.typeid/d', 0);
|
||
$assign_data['typeid'] = $typeid; // 栏目ID
|
||
|
||
// 栏目信息
|
||
$arctypeInfo = Db::name('arctype')->find($typeid);
|
||
|
||
/*允许发布文档列表的栏目*/
|
||
$arctype_html = allow_release_arctype($typeid, array($this->channeltype));
|
||
$assign_data['arctype_html'] = $arctype_html;
|
||
/*--end*/
|
||
|
||
/*自定义字段*/
|
||
// $addonFieldExtList = model('Field')->getChannelFieldList($this->channeltype);
|
||
// $channelfieldBindRow = Db::name('channelfield_bind')->where([
|
||
// 'typeid' => ['IN', [0,$typeid]],
|
||
// ])->column('field_id');
|
||
// if (!empty($channelfieldBindRow)) {
|
||
// foreach ($addonFieldExtList as $key => $val) {
|
||
// if (!in_array($val['id'], $channelfieldBindRow)) {
|
||
// unset($addonFieldExtList[$key]);
|
||
// }
|
||
// }
|
||
// }
|
||
// $assign_data['addonFieldExtList'] = $addonFieldExtList;
|
||
// $assign_data['aid'] = 0;
|
||
/*--end*/
|
||
|
||
/*可控制的字段列表*/
|
||
$assign_data['ifcontrolRow'] = Db::name('channelfield')->field('id,name')->where([
|
||
'channel_id' => $this->channeltype,
|
||
'ifmain' => 1,
|
||
'ifeditable' => 1,
|
||
'ifcontrol' => 0,
|
||
'status' => 1,
|
||
])->getAllWithIndex('name');
|
||
|
||
// 阅读权限
|
||
$arcrank_list = get_arcrank_list();
|
||
$assign_data['arcrank_list'] = $arcrank_list;
|
||
|
||
/*模板列表*/
|
||
$archivesLogic = new \app\admin\logic\ArchivesLogic;
|
||
$templateList = $archivesLogic->getTemplateList($this->nid);
|
||
$this->assign('templateList', $templateList);
|
||
/*--end*/
|
||
|
||
/*默认模板文件*/
|
||
$tempview = 'view_'.$this->nid.'.'.config('template.view_suffix');
|
||
!empty($arctypeInfo['tempview']) && $tempview = $arctypeInfo['tempview'];
|
||
$this->assign('tempview', $tempview);
|
||
/*--end*/
|
||
|
||
// 商城配置
|
||
$shopConfig = getUsersConfigData('shop');
|
||
$assign_data['shopConfig'] = $shopConfig;
|
||
|
||
// 商品规格
|
||
if (isset($shopConfig['shop_open_spec']) && 1 == $shopConfig['shop_open_spec']) {
|
||
// 预设值名称
|
||
$assign_data['preset_value'] = Db::name('product_spec_preset')->where('lang',$this->admin_lang)->field('preset_id,preset_mark_id,preset_name')->group('preset_mark_id')->order('preset_mark_id desc')->select();
|
||
}
|
||
|
||
/*产品参数 - 只要旧参数表有记录,就表示旧参数功能可以启用*/
|
||
$is_showcanshu = 1; // 显示
|
||
$is_old_product_attr = 0; // 旧参数不存在
|
||
if (is_language()) {
|
||
$is_old_product_attr = 1;
|
||
$assign_data['canshu'] = $this->ajax_get_attr_input($typeid);
|
||
} else {
|
||
$is_old_product_attr = Db::name("product_attr")->where('product_attr_id', 'gt', 0)->count();
|
||
if (!empty($is_old_product_attr)) {
|
||
$assign_data['canshu'] = $this->ajax_get_attr_input($typeid);
|
||
} else {
|
||
$AttrList = [];
|
||
if (empty($shopConfig['shop_open'])) { // 关闭商城
|
||
$is_showcanshu = 0; // 不显示
|
||
} else {
|
||
$where = [
|
||
'is_del' => 0,
|
||
'status' => 1
|
||
];
|
||
$AttrList = Db::name('shop_product_attrlist')->where($where)->order('sort_order asc')->select();
|
||
}
|
||
$assign_data['AttrList'] = $AttrList;
|
||
}
|
||
}
|
||
$assign_data['is_showcanshu'] = $is_showcanshu;
|
||
$assign_data['is_old_product_attr'] = $is_old_product_attr;
|
||
/*--end*/
|
||
|
||
// 文档默认浏览量
|
||
$other_config = tpCache('other');
|
||
if (isset($other_config['other_arcclick']) && 0 <= $other_config['other_arcclick']) {
|
||
$arcclick_arr = explode("|", $other_config['other_arcclick']);
|
||
if (count($arcclick_arr) > 1) {
|
||
$assign_data['rand_arcclick'] = mt_rand($arcclick_arr[0], $arcclick_arr[1]);
|
||
} else {
|
||
$assign_data['rand_arcclick'] = intval($arcclick_arr[0]);
|
||
}
|
||
}else{
|
||
$arcclick_config['other_arcclick'] = '500|1000';
|
||
tpCache('other', $arcclick_config);
|
||
$assign_data['rand_arcclick'] = mt_rand(500, 1000);
|
||
}
|
||
|
||
// URL模式
|
||
$tpcache = config('tpcache');
|
||
$assign_data['seo_pseudo'] = !empty($tpcache['seo_pseudo']) ? $tpcache['seo_pseudo'] : 1;
|
||
|
||
/*文档属性*/
|
||
$assign_data['archives_flags'] = model('ArchivesFlag')->getList();
|
||
|
||
$this->assign($assign_data);
|
||
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 编辑
|
||
*/
|
||
public function edit()
|
||
{
|
||
$admin_info = session('admin_info');
|
||
$auth_role_info = $admin_info['auth_role_info'];
|
||
$this->assign('auth_role_info', $auth_role_info);
|
||
$this->assign('admin_info', $admin_info);
|
||
|
||
if (IS_POST) {
|
||
$post = input('post.');
|
||
|
||
/* 处理TAG标签 */
|
||
if (!empty($post['tags_new'])) {
|
||
$post['tags'] = !empty($post['tags']) ? $post['tags'] . ',' . $post['tags_new'] : $post['tags_new'];
|
||
unset($post['tags_new']);
|
||
}
|
||
$post['tags'] = explode(',', $post['tags']);
|
||
$post['tags'] = array_unique($post['tags']);
|
||
$post['tags'] = implode(',', $post['tags']);
|
||
/* END */
|
||
|
||
$typeid = input('post.typeid/d', 0);
|
||
$content = input('post.addonFieldExt.content', '', null);
|
||
|
||
// 根据标题自动提取相关的关键字
|
||
$seo_keywords = $post['seo_keywords'];
|
||
if (!empty($seo_keywords)) {
|
||
$seo_keywords = str_replace(',', ',', $seo_keywords);
|
||
} else {
|
||
// $seo_keywords = get_split_word($post['title'], $content);
|
||
}
|
||
|
||
// 自动获取内容第一张图片作为封面图
|
||
$is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
|
||
$litpic = '';
|
||
if ($is_remote == 1) {
|
||
$litpic = $post['litpic_remote'];
|
||
} else {
|
||
$litpic = $post['litpic_local'];
|
||
}
|
||
if (empty($litpic)) {
|
||
$litpic = get_html_first_imgurl($content);
|
||
}
|
||
$post['litpic'] = $litpic;
|
||
|
||
/*是否有封面图*/
|
||
if (empty($post['litpic'])) {
|
||
$is_litpic = 0; // 无封面图
|
||
} else {
|
||
$is_litpic = !empty($post['is_litpic']) ? $post['is_litpic'] : 0; // 有封面图
|
||
}
|
||
|
||
// SEO描述
|
||
$seo_description = '';
|
||
if (empty($post['seo_description']) && !empty($content)) {
|
||
$seo_description = @msubstr(checkStrHtml($content), 0, config('global.arc_seo_description_length'), false);
|
||
} else {
|
||
$seo_description = $post['seo_description'];
|
||
}
|
||
|
||
// --外部链接
|
||
$jumplinks = '';
|
||
$is_jump = isset($post['is_jump']) ? $post['is_jump'] : 0;
|
||
if (intval($is_jump) > 0) {
|
||
$jumplinks = $post['jumplinks'];
|
||
}
|
||
|
||
// 模板文件,如果文档模板名与栏目指定的一致,默认就为空。让它跟随栏目的指定而变
|
||
if ($post['type_tempview'] == $post['tempview']) {
|
||
unset($post['type_tempview']);
|
||
unset($post['tempview']);
|
||
}
|
||
|
||
// 产品类型
|
||
if (!empty($post['prom_type'])) {
|
||
if ($post['prom_type_vir'] == 2) {
|
||
$post['netdisk_url'] = trim($post['netdisk_url']);
|
||
if (empty($post['netdisk_url'])) {
|
||
$this->error("网盘地址不能为空!");
|
||
}
|
||
$post['prom_type'] = 2;
|
||
} else if ($post['prom_type_vir'] == 3) {
|
||
$post['text_content'] = trim($post['text_content']);
|
||
if (empty($post['text_content'])) {
|
||
$this->error("虚拟文本内容不能为空!");
|
||
}
|
||
$post['prom_type'] = 3;
|
||
}
|
||
}
|
||
|
||
//处理自定义文件名,仅由字母数字下划线和短横杆组成,大写强制转换为小写
|
||
$htmlfilename = trim($post['htmlfilename']);
|
||
if (!empty($htmlfilename)) {
|
||
$htmlfilename = preg_replace("/[^a-zA-Z0-9_-]+/", "-", $htmlfilename);
|
||
$htmlfilename = strtolower($htmlfilename);
|
||
//判断是否存在相同的自定义文件名
|
||
$filenameCount = Db::name('archives')->where([
|
||
'aid' => ['NEQ', $post['aid']],
|
||
'htmlfilename' => $htmlfilename,
|
||
'lang' => $this->admin_lang,
|
||
])->count();
|
||
if (!empty($filenameCount)) {
|
||
$this->error("自定义文件名已存在,请重新设置!");
|
||
}
|
||
}
|
||
$post['htmlfilename'] = $htmlfilename;
|
||
|
||
// 同步栏目切换模型之后的文档模型
|
||
$channel = Db::name('arctype')->where(['id'=>$typeid])->getField('current_channel');
|
||
|
||
//做未通过审核文档不允许修改文档状态操作
|
||
if ($admin_info['role_id'] > 0 && $auth_role_info['check_oneself'] < 1) {
|
||
$old_archives_arcrank = Db::name('archives')->where(['aid' => $post['aid']])->getField("arcrank");
|
||
if ($old_archives_arcrank < 0) {
|
||
unset($post['arcrank']);
|
||
}
|
||
}
|
||
|
||
// --存储数据
|
||
$newData = array(
|
||
'typeid'=> $typeid,
|
||
'channel' => $channel,
|
||
'is_b' => empty($post['is_b']) ? 0 : $post['is_b'],
|
||
'is_head' => empty($post['is_head']) ? 0 : $post['is_head'],
|
||
'is_special' => empty($post['is_special']) ? 0 : $post['is_special'],
|
||
'is_recom' => empty($post['is_recom']) ? 0 : $post['is_recom'],
|
||
'is_roll' => empty($post['is_roll']) ? 0 : $post['is_roll'],
|
||
'is_slide' => empty($post['is_slide']) ? 0 : $post['is_slide'],
|
||
'is_diyattr' => empty($post['is_diyattr']) ? 0 : $post['is_diyattr'],
|
||
'is_jump' => $is_jump,
|
||
'is_litpic' => $is_litpic,
|
||
'jumplinks' => $jumplinks,
|
||
'seo_keywords' => $seo_keywords,
|
||
'seo_description' => $seo_description,
|
||
'stock_show' => empty($post['stock_show']) ? 0 : $post['stock_show'],
|
||
'users_price' => empty($post['users_price']) ? 0 : floatval($post['users_price']),
|
||
'add_time' => strtotime($post['add_time']),
|
||
'update_time' => getTime(),
|
||
);
|
||
$data = array_merge($post, $newData);
|
||
|
||
$r = Db::name('archives')->where([
|
||
'aid' => $data['aid'],
|
||
'lang' => $this->admin_lang,
|
||
])->update($data);
|
||
|
||
if ($r) {
|
||
// ---------后置操作
|
||
$newAttr = !empty($post['is_old_product_attr']) ? false : true;
|
||
model('Product')->afterSave($data['aid'], $data, 'edit', $newAttr);
|
||
// 更新规格名称数据
|
||
// model('ProductSpecData')->ProducSpecNameEditSave($data);
|
||
|
||
//虚拟商品保存
|
||
if (!empty($post['prom_type']) && in_array($post['prom_type'], [2,3])) {
|
||
model('ProductNetdisk')->saveProductNetdisk($data['aid'], $data);
|
||
}
|
||
|
||
if (!empty($post['spec_type']) && 1 == $post['spec_type']) {
|
||
// 产品规格数据表
|
||
Db::name("product_spec_data")->where('aid', $data['aid'])->delete();
|
||
// 产品多规格组装表
|
||
Db::name("product_spec_value")->where('aid', $data['aid'])->delete();
|
||
} else if (!empty($post['spec_type']) && 2 == $post['spec_type']) {
|
||
// 更新规格值及金额数据
|
||
model('ProductSpecValue')->ProducSpecValueEditSave($data);
|
||
}
|
||
|
||
// ---------end
|
||
adminLog('编辑产品:'.$data['title']);
|
||
|
||
// 生成静态页面代码
|
||
$successData = [
|
||
'aid' => $data['aid'],
|
||
'tid' => $typeid,
|
||
];
|
||
$this->success("操作成功!", null, $successData);
|
||
exit;
|
||
}
|
||
|
||
$this->error("操作失败!");
|
||
exit;
|
||
}
|
||
|
||
$assign_data = array();
|
||
|
||
$id = input('id/d');
|
||
$info = model('Product')->getInfo($id);
|
||
|
||
// 获取规格数据信息
|
||
// 包含:SpecSelectName、HtmlTable、spec_mark_id_arr、preset_value
|
||
$assign_data = model('ProductSpecData')->GetProductSpecData($id);
|
||
if (empty($info)) {
|
||
$this->error('数据不存在,请联系管理员!');
|
||
exit;
|
||
}
|
||
/*兼容采集没有归属栏目的文档*/
|
||
if (empty($info['channel'])) {
|
||
$channelRow = Db::name('channeltype')->field('id as channel')
|
||
->where('id',$this->channeltype)
|
||
->find();
|
||
$info = array_merge($info, $channelRow);
|
||
}
|
||
/*--end*/
|
||
$typeid = $info['typeid'];
|
||
$assign_data['typeid'] = $typeid;
|
||
|
||
// 栏目信息
|
||
$arctypeInfo = Db::name('arctype')->find($typeid);
|
||
|
||
$info['channel'] = $arctypeInfo['current_channel'];
|
||
if (is_http_url($info['litpic'])) {
|
||
$info['is_remote'] = 1;
|
||
$info['litpic_remote'] = handle_subdir_pic($info['litpic']);
|
||
} else {
|
||
$info['is_remote'] = 0;
|
||
$info['litpic_local'] = handle_subdir_pic($info['litpic']);
|
||
}
|
||
|
||
// SEO描述
|
||
if (!empty($info['seo_description'])) {
|
||
$info['seo_description'] = @msubstr(checkStrHtml($info['seo_description']), 0, config('global.arc_seo_description_length'), false);
|
||
}
|
||
|
||
$assign_data['field'] = $info;
|
||
|
||
// 产品相册
|
||
$proimg_list = model('ProductImg')->getProImg($id);
|
||
foreach ($proimg_list as $key => $val) {
|
||
$proimg_list[$key]['image_url'] = handle_subdir_pic($val['image_url']); // 支持子目录
|
||
}
|
||
$assign_data['proimg_list'] = $proimg_list;
|
||
|
||
/*允许发布文档列表的栏目,文档所在模型以栏目所在模型为主,兼容切换模型之后的数据编辑*/
|
||
$arctype_html = allow_release_arctype($typeid, array($info['channel']));
|
||
$assign_data['arctype_html'] = $arctype_html;
|
||
/*--end*/
|
||
|
||
/*自定义字段*/
|
||
// $addonFieldExtList = model('Field')->getChannelFieldList($info['channel'], 0, $id, $info);
|
||
// $channelfieldBindRow = Db::name('channelfield_bind')->where([
|
||
// 'typeid' => ['IN', [0,$typeid]],
|
||
// ])->column('field_id');
|
||
// if (!empty($channelfieldBindRow)) {
|
||
// foreach ($addonFieldExtList as $key => $val) {
|
||
// if (!in_array($val['id'], $channelfieldBindRow)) {
|
||
// unset($addonFieldExtList[$key]);
|
||
// }
|
||
// }
|
||
// }
|
||
// $assign_data['addonFieldExtList'] = $addonFieldExtList;
|
||
// $assign_data['aid'] = $id;
|
||
/*--end*/
|
||
|
||
/*可控制的主表字段列表*/
|
||
$assign_data['ifcontrolRow'] = Db::name('channelfield')->field('id,name')->where([
|
||
'channel_id' => $this->channeltype,
|
||
'ifmain' => 1,
|
||
'ifeditable' => 1,
|
||
'ifcontrol' => 0,
|
||
'status' => 1,
|
||
])->getAllWithIndex('name');
|
||
|
||
/*虚拟商品内容读取*/
|
||
$assign_data['netdisk'] = Db::name("product_netdisk")->where('aid', $id)->find();
|
||
/*end*/
|
||
|
||
// 阅读权限
|
||
$arcrank_list = get_arcrank_list();
|
||
$assign_data['arcrank_list'] = $arcrank_list;
|
||
|
||
/*模板列表*/
|
||
$archivesLogic = new \app\admin\logic\ArchivesLogic;
|
||
$templateList = $archivesLogic->getTemplateList($this->nid);
|
||
$this->assign('templateList', $templateList);
|
||
/*--end*/
|
||
|
||
/*默认模板文件*/
|
||
$tempview = $info['tempview'];
|
||
empty($tempview) && $tempview = $arctypeInfo['tempview'];
|
||
$this->assign('tempview', $tempview);
|
||
/*--end*/
|
||
|
||
// 商城配置
|
||
$shopConfig = getUsersConfigData('shop');
|
||
$assign_data['shopConfig'] = $shopConfig;
|
||
|
||
// 处理产品价格属性
|
||
$IsSame = '';
|
||
if (empty($shopConfig['shop_type']) || 1 == $shopConfig['shop_type']) {
|
||
if ($shopConfig['shop_type'] == $assign_data['field']['prom_type']) {
|
||
$IsSame = '0'; // 相同
|
||
}elseif ($shopConfig['shop_type']==1 && in_array($assign_data['field']['prom_type'], [2,3])) {
|
||
$IsSame = '0'; // 相同
|
||
}else{
|
||
$IsSame = '1'; // 不相同
|
||
}
|
||
}
|
||
$assign_data['IsSame'] = $IsSame;
|
||
|
||
/*产品参数 - 以前产品含有旧参数,就依旧保持就参数的功能*/
|
||
$is_showcanshu = 1; // 显示
|
||
$is_old_product_attr = 0; // 旧参数不存在
|
||
if (is_language()) {
|
||
$is_old_product_attr = 1;
|
||
$assign_data['canshu'] = $this->ajax_get_attr_input($typeid, $id);
|
||
} else {
|
||
$is_old_product_attr = Db::name("product_attr")->where('aid', $id)->count();
|
||
if (!empty($is_old_product_attr)) {
|
||
$assign_data['canshu'] = $this->ajax_get_attr_input($typeid, $id);
|
||
} else {
|
||
if (empty($shopConfig['shop_open'])) { // 关闭商城
|
||
$is_showcanshu = 0; // 不显示
|
||
}
|
||
|
||
/*商品参数列表*/
|
||
$where = [
|
||
'is_del' => 0,
|
||
'status' => 1
|
||
];
|
||
$assign_data['AttrList'] = Db::name('shop_product_attrlist')->where($where)->order('sort_order asc')->select();
|
||
/*END*/
|
||
|
||
/*商品参数值*/
|
||
$assign_data['canshu'] = '';
|
||
if (!empty($info['attrlist_id'])) {
|
||
$assign_data['canshu'] = $this->ajax_get_shop_attr_input($typeid, $id, $info['attrlist_id']);
|
||
}
|
||
/*--end*/
|
||
}
|
||
}
|
||
$assign_data['is_showcanshu'] = $is_showcanshu;
|
||
$assign_data['is_old_product_attr'] = $is_old_product_attr;
|
||
/*--end*/
|
||
|
||
// URL模式
|
||
$tpcache = config('tpcache');
|
||
$assign_data['seo_pseudo'] = !empty($tpcache['seo_pseudo']) ? $tpcache['seo_pseudo'] : 1;
|
||
|
||
/*文档属性*/
|
||
$assign_data['archives_flags'] = model('ArchivesFlag')->getList();
|
||
|
||
$this->assign($assign_data);
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 删除
|
||
*/
|
||
public function del()
|
||
{
|
||
if (IS_POST) {
|
||
$archivesLogic = new \app\admin\logic\ArchivesLogic;
|
||
$archivesLogic->del();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除商品相册图
|
||
*/
|
||
public function del_proimg()
|
||
{
|
||
if (IS_POST) {
|
||
$filename= input('filename/s');
|
||
$filename= str_replace('../','',$filename);
|
||
$filename= trim($filename,'.');
|
||
if(eyPreventShell($filename) && !empty($filename)){
|
||
$filename_new = trim($filename,'/');
|
||
$filetype = preg_replace('/^(.*)\.(\w+)$/i', '$2', $filename);
|
||
$phpfile = strtolower(strstr($filename,'.php')); //排除PHP文件
|
||
$size = getimagesize($filename_new);
|
||
$fileInfo = explode('/',$size['mime']);
|
||
if((file_exists($filename_new) && $fileInfo[0] != 'image') || $phpfile || !in_array($filetype, explode(',', config('global.image_ext')))){
|
||
exit;
|
||
}
|
||
if (!empty($filename)) {
|
||
M('product_img')->where("image_url = '$filename'")->delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 产品参数
|
||
*/
|
||
public function attribute_index()
|
||
{
|
||
$assign_data = array();
|
||
$condition = array();
|
||
// 获取到所有GET参数
|
||
$get = input('get.');
|
||
$typeid = input('typeid/d', 0);
|
||
|
||
// 应用搜索条件
|
||
foreach (['keywords','typeid'] as $key) {
|
||
if (isset($get[$key]) && $get[$key] !== '') {
|
||
if ($key == 'keywords') {
|
||
$condition['a.attr_name'] = array('LIKE', "%{$get[$key]}%");
|
||
} else if ($key == 'typeid') {
|
||
$typeids = model('Arctype')->getHasChildren($get[$key]);
|
||
$condition['a.typeid'] = array('IN', array_keys($typeids));
|
||
} else {
|
||
$condition['a.'.$key] = array('eq', $get[$key]);
|
||
}
|
||
}
|
||
}
|
||
|
||
$condition['a.is_del'] = 0;
|
||
// 多语言
|
||
$condition['a.lang'] = $this->admin_lang;
|
||
|
||
/**
|
||
* 数据查询,搜索出主键ID的值
|
||
*/
|
||
$count = Db::name('product_attribute')->alias('a')->where($condition)->count();// 查询满足要求的总记录数
|
||
$Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
|
||
$list = Db::name('product_attribute')
|
||
->field("a.attr_id")
|
||
->alias('a')
|
||
->where($condition)
|
||
->order('a.sort_order asc, a.attr_id asc')
|
||
->limit($Page->firstRow.','.$Page->listRows)
|
||
->getAllWithIndex('attr_id');
|
||
|
||
/**
|
||
* 完善数据集信息
|
||
* 在数据量大的情况下,经过优化的搜索逻辑,先搜索出主键ID,再通过ID将其他信息补充完整;
|
||
*/
|
||
if ($list) {
|
||
$attr_ids = array_keys($list);
|
||
$fields = "b.*, a.*";
|
||
$row = Db::name('product_attribute')
|
||
->field($fields)
|
||
->alias('a')
|
||
->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
|
||
->where('a.attr_id', 'in', $attr_ids)
|
||
->getAllWithIndex('attr_id');
|
||
|
||
/*获取多语言关联绑定的值*/
|
||
$row = model('LanguageAttr')->getBindValue($row, 'product_attribute', $this->main_lang); // 多语言
|
||
/*--end*/
|
||
|
||
foreach ($row as $key => $val) {
|
||
$val['fieldname'] = 'attr_'.$val['attr_id'];
|
||
$row[$key] = $val;
|
||
}
|
||
foreach ($list as $key => $val) {
|
||
$list[$key] = $row[$val['attr_id']];
|
||
}
|
||
}
|
||
$show = $Page->show(); // 分页显示输出
|
||
$assign_data['page'] = $show; // 赋值分页输出
|
||
$assign_data['list'] = $list; // 赋值数据集
|
||
$assign_data['pager'] = $Page; // 赋值分页对象
|
||
|
||
/*获取当前模型栏目*/
|
||
$selected = $typeid;
|
||
$arctypeLogic = new ArctypeLogic();
|
||
$map = array(
|
||
'channeltype' => $this->channeltype,
|
||
'is_del' => 0,
|
||
);
|
||
$arctype_max_level = intval(config('global.arctype_max_level'));
|
||
$select_html = $arctypeLogic->arctype_list(0, $selected, true, $arctype_max_level, $map);
|
||
$this->assign('select_html',$select_html);
|
||
/*--end*/
|
||
|
||
// 栏目ID
|
||
$assign_data['typeid'] = $typeid; // 栏目ID
|
||
/*当前栏目信息*/
|
||
$arctype_info = array();
|
||
if ($typeid > 0) {
|
||
$arctype_info = M('arctype')->field('typename')->find($typeid);
|
||
}
|
||
$assign_data['arctype_info'] = $arctype_info;
|
||
/*--end*/
|
||
|
||
/*选项卡*/
|
||
$tab = input('param.tab/d', 3);
|
||
$assign_data['tab'] = $tab;
|
||
/*--end*/
|
||
|
||
$assign_data['attrInputTypeArr'] = $this->attrInputTypeArr; // 表单类型
|
||
|
||
$this->assign($assign_data);
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 新增产品参数
|
||
*/
|
||
public function attribute_add()
|
||
{
|
||
//防止php超时
|
||
function_exists('set_time_limit') && set_time_limit(0);
|
||
|
||
if(IS_AJAX && IS_POST)//ajax提交验证
|
||
{
|
||
$model = model('ProductAttribute');
|
||
|
||
$attr_values = str_replace('_', '', input('attr_values')); // 替换特殊字符
|
||
$attr_values = str_replace('@', '', $attr_values); // 替换特殊字符
|
||
$attr_values = trim($attr_values);
|
||
|
||
$post_data = input('post.');
|
||
$post_data['attr_values'] = $attr_values;
|
||
|
||
$savedata = array(
|
||
'attr_name' => $post_data['attr_name'],
|
||
'typeid' => $post_data['typeid'],
|
||
'attr_input_type' => isset($post_data['attr_input_type']) ? $post_data['attr_input_type'] : '',
|
||
'attr_values' => isset($post_data['attr_values']) ? $post_data['attr_values'] : '',
|
||
'sort_order' => $post_data['sort_order'],
|
||
'lang' => $this->admin_lang,
|
||
'add_time' => getTime(),
|
||
'update_time' => getTime(),
|
||
);
|
||
|
||
// 数据验证
|
||
$validate = \think\Loader::validate('ProductAttribute');
|
||
if(!$validate->batch()->check($savedata))
|
||
{
|
||
$error = $validate->getError();
|
||
$error_msg = array_values($error);
|
||
$return_arr = array(
|
||
'status' => -1,
|
||
'msg' => $error_msg[0],
|
||
'data' => $error,
|
||
);
|
||
respose($return_arr);
|
||
} else {
|
||
$model->data($savedata,true); // 收集数据
|
||
$model->save(); // 写入数据到数据库
|
||
$insertId = $model->getLastInsID();
|
||
|
||
/*同步产品属性ID到多语言的模板变量里*/
|
||
$this->syn_add_language_attribute($insertId);
|
||
/*--end*/
|
||
|
||
$return_arr = array(
|
||
'status' => 1,
|
||
'msg' => '操作成功',
|
||
'data' => array('url'=>url('Product/attribute_index', array('typeid'=>$post_data['typeid']))),
|
||
);
|
||
adminLog('新增产品参数:'.$savedata['attr_name']);
|
||
respose($return_arr);
|
||
}
|
||
}
|
||
|
||
$typeid = input('param.typeid/d', 0);
|
||
$assign_data = array();
|
||
|
||
/*允许发布文档列表的栏目*/
|
||
$arctype_html = allow_release_arctype($typeid, array($this->channeltype));
|
||
$assign_data['arctype_html'] = $arctype_html;
|
||
/*--end*/
|
||
|
||
$this->assign($assign_data);
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 编辑产品参数
|
||
*/
|
||
public function attribute_edit()
|
||
{
|
||
if(IS_AJAX && IS_POST)//ajax提交验证
|
||
{
|
||
$model = model('ProductAttribute');
|
||
|
||
$attr_values = str_replace('_', '', input('attr_values')); // 替换特殊字符
|
||
$attr_values = str_replace('@', '', $attr_values); // 替换特殊字符
|
||
$attr_values = trim($attr_values);
|
||
|
||
$post_data = input('post.');
|
||
$post_data['attr_values'] = $attr_values;
|
||
|
||
$savedata = array(
|
||
'attr_id' => $post_data['attr_id'],
|
||
'attr_name' => $post_data['attr_name'],
|
||
'typeid' => $post_data['typeid'],
|
||
'attr_input_type' => isset($post_data['attr_input_type']) ? $post_data['attr_input_type'] : '',
|
||
'attr_values' => isset($post_data['attr_values']) ? $post_data['attr_values'] : '',
|
||
'sort_order' => $post_data['sort_order'],
|
||
'update_time' => getTime(),
|
||
);
|
||
|
||
// 数据验证
|
||
$validate = \think\Loader::validate('ProductAttribute');
|
||
if(!$validate->batch()->check($savedata))
|
||
{
|
||
$error = $validate->getError();
|
||
$error_msg = array_values($error);
|
||
$return_arr = array(
|
||
'status' => -1,
|
||
'msg' => $error_msg[0],
|
||
'data' => $error,
|
||
);
|
||
respose($return_arr);
|
||
} else {
|
||
$model->data($savedata,true); // 收集数据
|
||
$model->isUpdate(true, [
|
||
'attr_id' => $post_data['attr_id'],
|
||
'lang' => $this->admin_lang,
|
||
])->save(); // 写入数据到数据库
|
||
$return_arr = array(
|
||
'status' => 1,
|
||
'msg' => '操作成功',
|
||
'data' => array('url'=>url('Product/attribute_index', array('typeid'=>$post_data['typeid']))),
|
||
);
|
||
adminLog('编辑产品参数:'.$savedata['attr_name']);
|
||
respose($return_arr);
|
||
}
|
||
}
|
||
|
||
$assign_data = array();
|
||
|
||
$id = input('id/d');
|
||
/*获取多语言关联绑定的值*/
|
||
$new_id = model('LanguageAttr')->getBindValue($id, 'product_attribute'); // 多语言
|
||
!empty($new_id) && $id = $new_id;
|
||
/*--end*/
|
||
$info = M('ProductAttribute')->where([
|
||
'attr_id' => $id,
|
||
'lang' => $this->admin_lang,
|
||
])->find();
|
||
if (empty($info)) {
|
||
$this->error('数据不存在,请联系管理员!');
|
||
exit;
|
||
}
|
||
$assign_data['field'] = $info;
|
||
|
||
/*允许发布文档列表的栏目*/
|
||
$arctype_html = allow_release_arctype($info['typeid'], array($this->channeltype));
|
||
$assign_data['arctype_html'] = $arctype_html;
|
||
/*--end*/
|
||
|
||
$this->assign($assign_data);
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 删除产品参数
|
||
*/
|
||
public function attribute_del()
|
||
{
|
||
$id_arr = input('del_id/a');
|
||
$id_arr = eyIntval($id_arr);
|
||
if(!empty($id_arr)){
|
||
/*多语言*/
|
||
if (is_language()) {
|
||
$attr_name_arr = [];
|
||
foreach ($id_arr as $key => $val) {
|
||
$attr_name_arr[] = 'attr_'.$val;
|
||
}
|
||
$new_id_arr = Db::name('language_attr')->where([
|
||
'attr_name' => ['IN', $attr_name_arr],
|
||
'attr_group' => 'product_attribute',
|
||
])->column('attr_value');
|
||
!empty($new_id_arr) && $id_arr = $new_id_arr;
|
||
}
|
||
/*--end*/
|
||
$r = M('ProductAttribute')->where([
|
||
'attr_id' => ['IN', $id_arr],
|
||
])->update([
|
||
'is_del' => 1,
|
||
'update_time' => getTime(),
|
||
]);
|
||
if($r){
|
||
adminLog('删除产品参数-id:'.implode(',', $id_arr));
|
||
$this->success('删除成功');
|
||
}else{
|
||
$this->error('删除失败');
|
||
}
|
||
}else{
|
||
$this->error('参数有误');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 动态获取产品参数输入框 根据不同的数据返回不同的输入框类型
|
||
*/
|
||
public function ajax_get_attr_input($typeid = '', $aid = '')
|
||
{
|
||
$productLogic = new ProductLogic();
|
||
$str = $productLogic->getAttrInput($aid, $typeid);
|
||
if (empty($str)) {
|
||
$str = '<div style="font-size: 12px;text-align: center;">提示:该主栏目还没有参数值,若有需要先确认提交,再点击【<a href="javascript:void(0);" data-href="'.url('Product/attribute_index', array('typeid'=>$typeid)).'" onclick="openFullframe(this, \'产品参数\', \'100%\', \'100%\');">产品参数</a>】进行更多操作。</div>';
|
||
}
|
||
|
||
if (IS_AJAX) {
|
||
exit($str);
|
||
} else {
|
||
return $str;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 动态获取商品参数输入框 根据不同的数据返回不同的输入框类型
|
||
*/
|
||
public function ajax_get_shop_attr_input($typeid = '', $aid = '', $list_id = '')
|
||
{
|
||
$typeid = intval($typeid);
|
||
$aid = intval($aid);
|
||
$list_id = intval($list_id);
|
||
$productLogic = new ProductLogic();
|
||
$str = $productLogic->getShopAttrInput($aid, $typeid, $list_id);
|
||
if (empty($str)) {
|
||
$str = '<div style="font-size: 12px;text-align: center;">提示:该参数还没有参数值,若有需要请点击【<a href="'.url('Product/attribute_index', array('list_id'=>$list_id)).'">商品参数</a>】进行更多操作。</div>';
|
||
}
|
||
if (IS_AJAX) {
|
||
exit($str);
|
||
} else {
|
||
return $str;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 同步新增产品属性ID到多语言的模板变量里
|
||
*/
|
||
private function syn_add_language_attribute($attr_id)
|
||
{
|
||
/*单语言情况下不执行多语言代码*/
|
||
if (!is_language()) {
|
||
return true;
|
||
}
|
||
/*--end*/
|
||
|
||
$attr_group = 'product_attribute';
|
||
$admin_lang = $this->admin_lang;
|
||
$main_lang = $this->main_lang;
|
||
$languageRow = Db::name('language')->field('mark')->order('id asc')->select();
|
||
if (!empty($languageRow) && $admin_lang == $main_lang) { // 当前语言是主体语言,即语言列表最早新增的语言
|
||
$result = Db::name('product_attribute')->find($attr_id);
|
||
$attr_name = 'attr_'.$attr_id;
|
||
$r = Db::name('language_attribute')->save([
|
||
'attr_title' => $result['attr_name'],
|
||
'attr_name' => $attr_name,
|
||
'attr_group' => $attr_group,
|
||
'add_time' => getTime(),
|
||
'update_time' => getTime(),
|
||
]);
|
||
if (false !== $r) {
|
||
$data = [];
|
||
foreach ($languageRow as $key => $val) {
|
||
/*同步新产品属性到其他语言产品属性列表*/
|
||
if ($val['mark'] != $admin_lang) {
|
||
$addsaveData = $result;
|
||
$addsaveData['lang'] = $val['mark'];
|
||
$newTypeid = Db::name('language_attr')->where([
|
||
'attr_name' => 'tid'.$result['typeid'],
|
||
'attr_group' => 'arctype',
|
||
'lang' => $val['mark'],
|
||
])->getField('attr_value');
|
||
$addsaveData['typeid'] = $newTypeid;
|
||
unset($addsaveData['attr_id']);
|
||
$attr_id = Db::name('product_attribute')->insertGetId($addsaveData);
|
||
}
|
||
/*--end*/
|
||
|
||
/*所有语言绑定在主语言的ID容器里*/
|
||
$data[] = [
|
||
'attr_name' => $attr_name,
|
||
'attr_value' => $attr_id,
|
||
'lang' => $val['mark'],
|
||
'attr_group' => $attr_group,
|
||
'add_time' => getTime(),
|
||
'update_time' => getTime(),
|
||
];
|
||
/*--end*/
|
||
}
|
||
if (!empty($data)) {
|
||
model('LanguageAttr')->saveAll($data);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |