* Date: 2018-4-3
*/
namespace app\admin\logic;
use think\Db;
use think\Model;
/**
* 产品逻辑定义
* Class CatsLogic
* @package admin\Logic
*/
class ProductLogic extends Model
{
/**
* 动态获取产品参数输入框 根据不同的数据返回不同的输入框类型
* @param int $aid 产品id
* @param int $typeid 产品栏目id
*/
public function getAttrInput($aid, $typeid)
{
header("Content-type: text/html; charset=utf-8");
$aid = intval($aid);
$typeid = intval($typeid);
$productAttribute = model('ProductAttribute');
$attributeList = $productAttribute->where(['typeid'=>$typeid, 'is_del'=>0])->order('sort_order asc, attr_id asc')->select();
$str = '';
foreach($attributeList as $key => $val)
{
$attr_id = $val['attr_id'];
$curAttrVal = $this->getProductAttrVal(NULL,$aid, $attr_id);
//促使他 循环
if(empty($curAttrVal))
$curAttrVal[] = array('product_attr_id' =>'','aid' => '','attr_id' => '','attr_value' => '');
foreach($curAttrVal as $k =>$v)
{
$str .= "
";
$addDelAttr = ''; // 加减符号
$str .= "";
// 单行文本框
if($val['attr_input_type'] == 0)
{
$str .= " ";
}
// 下拉列表框(一行代表一个可选值)
if($val['attr_input_type'] == 1)
{
$str .= " ";
}
// 多行文本框
if($val['attr_input_type'] == 2)
{
$str .= " ";
}
// 富文本编辑器
if($val['attr_input_type'] == 3)
{
$str .= " ";
$url = url('Ueditor/index', array('savepath'=>'allimg'));
$str .= <<
UE.getEditor("attr_{$attr_id}",{
serverUrl :"{$url}",
zIndex: 999,
initialFrameWidth: "100%", //初化宽度
initialFrameHeight: 300, //初化高度
focus: false, //初始化时,是否让编辑器获得焦点true或false
maximumWords: 99999,
removeFormatAttributes: 'class,style,lang,width,height,align,hspace,valign',//允许的最大字符数 'fullscreen',
pasteplain:false, //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
autoHeightEnabled: false,
toolbars: ueditor_toolbars
});
EOF;
}
$str .= "
";
}
}
return $str;
}
/**
* 动态获取产品参数输入框 根据不同的数据返回不同的输入框类型
* @param int $aid 产品id
* @param int $typeid 产品栏目id
*/
public function getShopAttrInput($aid, $typeid, $list_id)
{
header("Content-type: text/html; charset=utf-8");
$aid = intval($aid);
$typeid = intval($typeid);
$list_id = intval($list_id);
$where = [
'is_del' => 0
];
if (!empty($list_id)) {
$where['list_id'] = $list_id;
$where['status'] = 1;
}
$attributeList = Db::name('ShopProductAttribute')->where($where)->order('sort_order asc, attr_id asc')->select();
$str = '';
foreach($attributeList as $key => $val) {
$attr_id = $val['attr_id'];
$curAttrVal = $this->getShopProductAttrVal(NULL, $aid, $attr_id);
//促使他 循环
if(empty($curAttrVal)) $curAttrVal[] = array('product_attr_id'=>'', 'aid'=>'', 'attr_id'=>'', 'attr_value'=>'');
foreach($curAttrVal as $k =>$v) {
$str .= "";
$addDelAttr = ''; // 加减符号
$str .= "";
$str .= "";
// 单行文本框
if($val['attr_input_type'] == 0) {
$str .= "- 删除
";
}
// 下拉列表框(一行代表一个可选值)
if($val['attr_input_type'] == 1) {
//
$str .= "- 删除
";
}
// 多行文本框
if($val['attr_input_type'] == 2) {
$str .= " ";
}
// 富文本编辑器
if($val['attr_input_type'] == 3) {
$str .= " ";
$url = url('Ueditor/index', array('savepath'=>'allimg'));
$str .= <<
UE.getEditor("attr_{$attr_id}",{
serverUrl :"{$url}",
zIndex: 999,
initialFrameWidth: "100%", //初化宽度
initialFrameHeight: 300, //初化高度
focus: false, //初始化时,是否让编辑器获得焦点true或false
maximumWords: 99999,
removeFormatAttributes: 'class,style,lang,width,height,align,hspace,valign',//允许的最大字符数 'fullscreen',
pasteplain:false, //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
autoHeightEnabled: false,
toolbars: ueditor_toolbars
});
EOF;
}
$str .= "
";
}
}
return $str;
}
/**
* 获取 product_attr 表中指定 aid 指定 attr_id 或者 指定 product_attr_id 的值 可是字符串 可是数组
* @param int $product_attr_id product_attr表id
* @param int $aid 产品id
* @param int $attr_id 产品参数id
* @return array 返回数组
*/
public function getProductAttrVal($product_attr_id = 0 ,$aid = 0, $attr_id = 0)
{
$product_attr_id = intval($product_attr_id);
$aid = intval($aid);
$attr_id = intval($attr_id);
$productAttr = Db::name('ProductAttr');
if($product_attr_id > 0)
return $productAttr->where(['product_attr_id'=>$product_attr_id])->select();
if($aid > 0 && $attr_id > 0)
return $productAttr->where(['aid'=>$aid,'attr_id'=>$attr_id])->select();
}
/**
* 获取 shop_product_attr 表中指定 aid 指定 attr_id 或者 指定 product_attr_id 的值 可是字符串 可是数组
* @param int $product_attr_id product_attr表id
* @param int $aid 产品id
* @param int $attr_id 产品参数id
* @return array 返回数组
*/
public function getShopProductAttrVal($product_attr_id = 0 ,$aid = 0, $attr_id = 0)
{
$product_attr_id = intval($product_attr_id);
$aid = intval($aid);
$attr_id = intval($attr_id);
$ShopProductAttr = Db::name('ShopProductAttr');
if($product_attr_id > 0) {
return $ShopProductAttr->where(['product_attr_id'=>$product_attr_id])->order('sort_order asc')->select();
}
if($aid > 0 && $attr_id > 0) {
return $ShopProductAttr->where(['aid'=>$aid,'attr_id'=>$attr_id])->order('sort_order asc')->select();
}
}
/**
* 给指定产品添加属性 或修改属性 更新到 product_attr
* @param int $aid 产品id
* @param int $typeid 产品栏目id
*/
public function saveProductAttr($aid, $typeid, $postData = [])
{
$aid = intval($aid);
$typeid = intval($typeid);
$productAttr = Db::name('ProductAttr');
// 属性类型被更改了 就先删除以前的属性类型 或者没有属性 则删除
if($typeid == 0)
{
$productAttr->where('aid = '.$aid)->delete();
return;
}
$productAttrList = $productAttr->where('aid = '.$aid)->select();
$old_product_attr = array(); // 数据库中的的属性 以 attr_id _ 和值的 组合为键名
foreach($productAttrList as $k => $v)
{
$old_product_attr[$v['attr_id'].'_'.$v['attr_value']] = $v;
}
// post 提交的属性 以 attr_id _ 和值的 组合为键名
$post = input("post.");
if (!isset($post['title'])) {
$post = $postData;
}
foreach($post as $k => $v)
{
$attr_id = str_replace('attr_','',$k);
if(!strstr($k, 'attr_'))
continue;
foreach ($v as $k2 => $v2)
{
//$v2 = str_replace('_', '', $v2); // 替换特殊字符
//$v2 = str_replace('@', '', $v2); // 替换特殊字符
$v2 = trim($v2);
if(empty($v2))
continue;
$tmp_key = $attr_id."_".$v2;
if(!array_key_exists($tmp_key , $old_product_attr)) // 数据库中不存在 说明要做删除操作
{
$adddata = array(
'aid' => $aid,
'attr_id' => $attr_id,
'attr_value' => $v2,
'add_time' => getTime(),
'update_time' => getTime(),
);
$productAttr->add($adddata);
}
unset($old_product_attr[$tmp_key]);
}
}
// 没有被 unset($old_product_attr[$tmp_key]); 掉是 说明 数据库中存在 表单中没有提交过来则要删除操作
foreach($old_product_attr as $k => $v)
{
$productAttr->where('product_attr_id = '.$v['product_attr_id'])->delete(); //
}
}
/**
* 给指定产品添加属性 或修改属性 更新到 shop_product_attr
* @param int $aid 产品id
* @param int $typeid 产品栏目id
*/
public function saveShopProductAttr($aid, $typeid, $postData = [])
{
$aid = intval($aid);
$typeid = intval($typeid);
$ShopProductAttr = Db::name('ShopProductAttr');
// 属性类型被更改了 就先删除以前的属性类型 或者没有属性 则删除
if($typeid == 0) {
$ShopProductAttr->where('aid = '.$aid)->delete();
return false;
}
$productAttrList = $ShopProductAttr->where('aid = '.$aid)->select();
$old_product_attr = array(); // 数据库中的的属性 以 attr_id _ 和值的 组合为键名
foreach($productAttrList as $k => $v) {
$old_product_attr[$v['attr_id'].'_'.$v['attr_value'].'_'.$v['sort_order']] = $v;
}
// post 提交的属性 以 attr_id _ 和值的 组合为键名
$post = input("post.");
if (!isset($post['title'])) {
$post = $postData;
}
$sort_order = $post['new_attr_sort_order'];
foreach($post as $k => $v) {
$attr_id = str_replace('shop_attr_', '', $k);
if(!strstr($k, 'shop_attr_')) continue;
foreach ($v as $k2 => $v2) {
$v2 = trim($v2);
if(empty($v2)) continue;
$tmp_key = $attr_id . "_" . $v2 . "_" . $sort_order[$attr_id];
if(!array_key_exists($tmp_key, $old_product_attr)) {
// 数据库中不存在 说明要做删除操作
$adddata = array(
'aid' => $aid,
'attr_id' => $attr_id,
'attr_value' => $v2,
'sort_order' => $sort_order[$attr_id],
'add_time' => getTime(),
'update_time' => getTime(),
);
$ShopProductAttr->add($adddata);
}
unset($old_product_attr[$tmp_key]);
}
}
// 没有被 unset($old_product_attr[$tmp_key]); 掉是 说明 数据库中存在 表单中没有提交过来则要删除操作
foreach($old_product_attr as $k => $v) {
$ShopProductAttr->where('product_attr_id = '.$v['product_attr_id'])->delete();
}
}
}