提交 ca254b06 编写于 作者: D devil

新增站点设置配置

上级 c61c7aae
......@@ -11,6 +11,7 @@
namespace app\admin\controller;
use app\service\ConfigService;
use app\service\GoodsService;
/**
* 站点设置
......@@ -83,22 +84,45 @@ class Site extends Common
// 扣除库存规则
$this->assign('common_deduction_inventory_rules_list', lang('common_deduction_inventory_rules_list'));
// 首页商品排序规则
$this->assign('home_floor_goods_order_by_type_list', lang('home_floor_goods_order_by_type_list'));
$this->assign('home_floor_goods_order_by_rule_list', lang('home_floor_goods_order_by_rule_list'));
// 配置信息
$data = ConfigService::ConfigList();
$this->assign('data', $data);
// 自提点
if($nav_type == 'sitetype')
// 数据处理
switch($nav_type)
{
// 地址处理
if(!empty($data['common_self_extraction_address']) && !empty($data['common_self_extraction_address']['value']))
{
$address = ConfigService::SiteTypeExtractionAddressList($data['common_self_extraction_address']['value']);
$this->assign('sitetype_address_list', $address['data']);
}
// 自提点
case 'sitetype' :
// 地址处理
if(!empty($data['common_self_extraction_address']) && !empty($data['common_self_extraction_address']['value']))
{
$address = ConfigService::SiteTypeExtractionAddressList($data['common_self_extraction_address']['value']);
$this->assign('sitetype_address_list', $address['data']);
}
// 加载百度地图api
$this->assign('is_load_baidu_map_api', 1);
break;
// 加载百度地图api
$this->assign('is_load_baidu_map_api', 1);
// 网站设置
case 'siteset' :
// 获取商品一级分类
$where = ['pid'=>0, 'is_home_recommended'=>1, 'is_enable'=>1];
$category = GoodsService::GoodsCategoryList(['where'=>$where]);
if(!empty($category))
{
$floor_keywords = (empty($data['home_index_floor_top_right_keywords']) || empty($data['home_index_floor_top_right_keywords']['value'])) ? [] : json_decode($data['home_index_floor_top_right_keywords']['value'], true);
foreach($category as &$c)
{
$c['config_keywords'] = isset($floor_keywords[$c['id']]) ? $floor_keywords[$c['id']] : '';
}
}
$this->assign('goods_category_list', $category);
break;
}
// 编辑器文件存放地址
......@@ -172,6 +196,11 @@ class Site extends Common
$params['common_self_extraction_address'] = json_encode($address, JSON_UNESCAPED_UNICODE);
}
break;
// 网站设置
case 'siteset' :
$params['home_index_floor_top_right_keywords'] = empty($params['home_index_floor_top_right_keywords']) ? '' : json_encode($params['home_index_floor_top_right_keywords'], JSON_UNESCAPED_UNICODE);
break;
}
// 开始处理空值
......
......@@ -34,7 +34,7 @@
<!-- 随机背景图片 -->
{{if MyC('admin_login_info_bg_images_rand') eq 1}}
<div class="bg-slides">
{{for start="1" end="11"}}
{{for start="1" end="15"}}
{{if file_exists(ROOT.'public/static/admin/default/images/login/'.$i.'.jpg')}}
<div class="bg-slides-item" style="background-image:url('{{$attachment_host}}/static/admin/default/images/login/{{$i}}.jpg');{{if $i neq 1}}display:none;{{/if}}"></div>
{{/if}}
......
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'goods'])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.common_is_goods_detail_show_photo.name}}<span class="am-form-group-label-tips">{{$data.common_is_goods_detail_show_photo.describe}}</span></label>
<select name="{{$data.common_is_goods_detail_show_photo.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_goods_detail_show_photo.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_goods_detail_show_photo']['value']) and $data['common_is_goods_detail_show_photo']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_show_goods_category_level.name}}<span class="am-form-group-label-tips">{{$data.common_show_goods_category_level.describe}}</span></label>
<div class="am-input-group am-input-group-sm">
<input type="number" min="1" max="3" name="{{$data.common_show_goods_category_level.only_tag}}" placeholder="{{$data.common_show_goods_category_level.name}}" data-validation-message="{{$data.common_show_goods_category_level.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_show_goods_category_level.value}}"{{/if}} />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="button"></button>
</span>
</div>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>1. 默认展示3级,最低1级、最高3级</p>
<p>2. 层级不一样、前端分类页样式也会不一样</p>
</div>
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
\ No newline at end of file
......@@ -2,6 +2,9 @@
<li {{if $nav_type eq 'base'}}class="am-active"{{/if}} data-type="base">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'base'])}}">基础配置</a>
</li>
<li {{if $nav_type eq 'siteset'}}class="am-active"{{/if}} data-type="siteset">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}">网站设置</a>
</li>
<li {{if $nav_type eq 'beian'}}class="am-active"{{/if}} data-type="beian">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'beian'])}}">备案信息</a>
</li>
......@@ -26,12 +29,6 @@
<li {{if $nav_type eq 'orderaftersale'}}class="am-active"{{/if}} data-type="orderaftersale">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'orderaftersale'])}}">订单售后</a>
</li>
<li {{if $nav_type eq 'search'}}class="am-active"{{/if}} data-type="search">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'search'])}}">搜索</a>
</li>
<li {{if $nav_type eq 'goods'}}class="am-active"{{/if}} data-type="goods">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'goods'])}}">商品</a>
</li>
<li {{if $nav_type eq 'extends'}}class="am-active"{{/if}} data-type="extends">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'extends'])}}">扩展项</a>
</li>
......
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'search'])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.home_search_keywords_type.name}}</label>
<select name="{{$data.home_search_keywords_type.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_search_keywords_type.error_tips}}">
{{foreach $common_search_keywords_type_list as $v}}
<option value="{{$v.value}}" {{if isset($data['home_search_keywords_type']['value']) and $data['home_search_keywords_type']['value'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.home_search_keywords.name}}<span class="am-form-group-label-tips">{{$data.home_search_keywords.describe}}</span></label>
<input type="text" name="{{$data.home_search_keywords.only_tag}}" placeholder="{{$data.home_search_keywords.describe}}" data-validation-message="{{$data.home_search_keywords.error_tips}}" class="am-radius" data-am-tagsinput {{if !empty($data)}}value="{{$data.home_search_keywords.value}}"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
\ No newline at end of file
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<!-- 首页 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">首页</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
<label>{{$data.home_index_floor_goods_max_count.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_goods_max_count.describe}}</span></label>
<div class="am-input-group am-input-group-sm">
<input type="number" min="0" name="{{$data.home_index_floor_goods_max_count.only_tag}}" placeholder="{{$data.home_index_floor_goods_max_count.name}}" data-validation-message="{{$data.home_index_floor_goods_max_count.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_index_floor_goods_max_count.value}}"{{/if}} />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="button"></button>
</span>
</div>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>1. 配置每个楼层最多展示多少个商品</p>
<p>2. 不建议将数量修改的太大、会导致PC端左侧空白区域太大</p>
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_left_goods_category_max_count.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_left_goods_category_max_count.describe}}</span></label>
<div class="am-input-group am-input-group-sm">
<input type="number" min="0" name="{{$data.home_index_floor_left_goods_category_max_count.only_tag}}" placeholder="{{$data.home_index_floor_left_goods_category_max_count.name}}" data-validation-message="{{$data.home_index_floor_left_goods_category_max_count.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_index_floor_left_goods_category_max_count.value}}"{{/if}} />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="button"></button>
</span>
</div>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>1. 配置每个楼层左侧最多展示多少个二级商品分类</p>
<p>2. 不建议将数量修改的太大、如高度超出楼层容器会比较拥挤</p>
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_top_right_keywords.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_top_right_keywords.describe}}</span></label>
{{if !empty($goods_category_list)}}
<ul class="am-list am-list-static am-list-border">
{{foreach $goods_category_list as $category}}
<li>
<p class="am-text-truncate am-margin-bottom-xs">
<span>{{$category.name}}</span>
<span class="am-margin-left-sm form.am-form am-form-group-label-tips">{{$category.vice_name}}</span>
</p>
<input type="text" name="{{$data.home_index_floor_top_right_keywords.only_tag}}[{{$category['id']}}]" placeholder="{{$category.name}}{{$data.home_index_floor_top_right_keywords.describe}}" data-validation-message="{{$data.home_index_floor_top_right_keywords.error_tips}}" class="am-radius" value="{{$category.config_keywords}}" data-am-tagsinput />
</li>
{{/foreach}}
</ul>
{{else /}}
<div class="am-text-center am-margin-top-lg">
<i class="am-icon-warning"></i>
<span>暂无数据,请先到 / 商品管理->商品分类、一级分类设置首页推荐</span>
</div>
{{/if}}
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_goods_order_by_type.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_goods_order_by_type.describe}}</span></label>
<select name="{{$data.home_index_floor_goods_order_by_type.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_index_floor_goods_order_by_type.error_tips}}">
{{foreach $home_floor_goods_order_by_type_list as $k=>$v}}
<option value="{{$k}}" {{if isset($data['home_index_floor_goods_order_by_type']['value']) and $data['home_index_floor_goods_order_by_type']['value'] eq $k}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>综合为:热度->销量->最新 进行 降序(desc)排序</p>
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_goods_order_by_rule.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_goods_order_by_rule.describe}}</span></label>
<select name="{{$data.home_index_floor_goods_order_by_rule.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_index_floor_goods_order_by_rule.error_tips}}">
{{foreach $home_floor_goods_order_by_rule_list as $k=>$v}}
<option value="{{$k}}" {{if isset($data['home_index_floor_goods_order_by_rule']['value']) and $data['home_index_floor_goods_order_by_rule']['value'] eq $k}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
</div>
</div>
<!-- 商品 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">商品</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
<label>{{$data.common_is_goods_detail_show_photo.name}}<span class="am-form-group-label-tips">{{$data.common_is_goods_detail_show_photo.describe}}</span></label>
<select name="{{$data.common_is_goods_detail_show_photo.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_goods_detail_show_photo.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_goods_detail_show_photo']['value']) and $data['common_is_goods_detail_show_photo']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_show_goods_category_level.name}}<span class="am-form-group-label-tips">{{$data.common_show_goods_category_level.describe}}</span></label>
<div class="am-input-group am-input-group-sm">
<input type="number" min="1" max="3" name="{{$data.common_show_goods_category_level.only_tag}}" placeholder="{{$data.common_show_goods_category_level.name}}" data-validation-message="{{$data.common_show_goods_category_level.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_show_goods_category_level.value}}"{{/if}} />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="button"></button>
</span>
</div>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>1. 默认展示3级,最低1级、最高3级</p>
<p>2. 层级不一样、前端分类页样式也会不一样</p>
</div>
</div>
</div>
</div>
<!-- 搜索 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">搜索</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
<label>{{$data.home_search_keywords_type.name}}</label>
<select name="{{$data.home_search_keywords_type.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_search_keywords_type.error_tips}}">
{{foreach $common_search_keywords_type_list as $v}}
<option value="{{$v.value}}" {{if isset($data['home_search_keywords_type']['value']) and $data['home_search_keywords_type']['value'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.home_search_keywords.name}}<span class="am-form-group-label-tips">{{$data.home_search_keywords.describe}}</span></label>
<input type="text" name="{{$data.home_search_keywords.only_tag}}" placeholder="{{$data.home_search_keywords.describe}}" data-validation-message="{{$data.home_search_keywords.error_tips}}" class="am-radius" data-am-tagsinput {{if !empty($data)}}value="{{$data.home_search_keywords.value}}"{{/if}} />
</div>
</div>
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
\ No newline at end of file
......@@ -83,7 +83,7 @@
<h3 class="am-panel-title">自提点</h3>
</div>
<div class="am-panel-bd">
<ul class="am-list am-list-static am-list-border am-list-striped am-form-group am-btn-sm am-margin-bottom-0 am-padding-bottom-0 address-list">
<ul class="am-list am-list-static am-list-border am-list-striped am-form-group am-btn-sm am-form-group-refreshing am-margin-bottom-0 am-padding-bottom-0 address-list">
{{if !empty($sitetype_address_list) and is_array($sitetype_address_list)}}
{{foreach $sitetype_address_list as $address}}
<li>
......
......@@ -139,21 +139,37 @@
<!-- 楼层 -->
{{if !empty($goods_floor_list)}}
{{foreach $goods_floor_list as $key=>$floor}}
<!-- 首页楼层顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_home_floor_top_{{$key+1}}</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_home_floor_top_'.($key+1);
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>false, 'floor_id'=>$key+1, 'floor'=>$floor]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
<!-- 楼层数据 -->
<div id="floor{{$key+1}}">
<div class="am-container">
<div class="items-nav-title" {{if !empty($floor['bg_color'])}}style="border-bottom: 2px solid {{$floor.bg_color}};"{{/if}}>
<p class="floor-title">{{$floor.name}}</p>
<p class="floor-desc">{{$floor.vice_name}}</p>
<div class="today-brands ">
{{if !empty($floor['items'])}}
{{foreach $floor.items as $key=>$category}}
{{if !empty($category['items'])}}
{{foreach $category.items as $keys=>$categorys}}
{{if $key lt 6 and $keys eq 0}}
<a href="{{:MyUrl('index/search/index', ['category_id'=>$categorys['id']])}}" target="_blank">{{$categorys.name}}</a>
{{/if}}
{{/foreach}}
{{/if}}
{{if !empty($floor['config_keywords'])}}
{{foreach $floor.config_keywords as $wd}}
<a href="{{:MyUrl('index/search/index', ['wd'=>StrToAscii($wd)])}}" target="_blank">{{$wd}}</a>
{{/foreach}}
{{/if}}
</div>
......@@ -189,9 +205,7 @@
<div class="word">
{{if !empty($floor['items'])}}
{{foreach $floor.items as $category_key=>$category}}
{{if $category_key lt 6}}
<a href="{{:MyUrl('index/search/index', ['category_id'=>$category['id']])}}" class="outer" target="_blank">{{:mb_substr($category['name'], 0, 4, 'utf-8')}}</a>
{{/if}}
<a href="{{:MyUrl('index/search/index', ['category_id'=>$category['id']])}}" class="outer" target="_blank">{{:mb_substr($category['name'], 0, 4, 'utf-8')}}</a>
{{/foreach}}
{{/if}}
</div>
......@@ -329,6 +343,27 @@
{{/php}}
</div>
</div>
<!-- 首页楼层底部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_home_floor_bottom_{{$key+1}}</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_home_floor_bottom_'.($key+1);
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>false, 'floor_id'=>$key+1, 'floor'=>$floor]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
{{/foreach}}
{{/if}}
</div>
......
......@@ -317,6 +317,22 @@ return array(
2 => array('value' => 2, 'name' => '基础'),
),
// 首页商品关联排序类型
'home_floor_goods_order_by_type_list' => array(
0 => array('value' => 'g.access_count,g.sales_count,g.id', 'name' => '综合', 'checked' => true),
1 => array('value' => 'g.sales_count', 'name' => '销量'),
2 => array('value' => 'g.access_count', 'name' => '热度'),
3 => array('value' => 'g.min_price', 'name' => '价格'),
4 => array('value' => 'g.id', 'name' => '最新'),
),
// 首页商品关联排序规则
'home_floor_goods_order_by_rule_list' => array(
0 => array('value' => 'desc', 'name' => '降序(desc)', 'checked' => true),
1 => array('value' => 'asc', 'name' => '升序(asc)'),
),
// 色彩值
'common_color_list' => array(
......
......@@ -33,6 +33,7 @@ class ConfigService
'home_site_close_reason',
'common_agreement_userregister',
'common_self_extraction_address',
'home_index_floor_top_right_keywords',
];
// 附件字段列表
......
......@@ -85,18 +85,18 @@ class GoodsService
{
// 获取分类
$where = empty($params['where']) ? ['pid'=>0, 'is_enable'=>1] : $params['where'];
$data = self::GoodsCategoryList($where);
$data = self::GoodsCategoryList(['where'=>$where]);
if(!empty($data))
{
foreach($data as &$v)
{
$where['pid'] = $v['id'];
$v['items'] = self::GoodsCategoryList($where);
$v['items'] = self::GoodsCategoryList(['where'=>$where]);
if(!empty($v['items']))
{
// 一次性查出所有二级下的三级、再做归类、避免sql连接超多
$where['pid'] = array_column($v['items'], 'id');
$itemss = self::GoodsCategoryList($where);
$itemss = self::GoodsCategoryList(['where'=>$where]);
if(!empty($itemss))
{
foreach($v['items'] as &$vs)
......@@ -123,13 +123,20 @@ class GoodsService
* @version 1.0.0
* @date 2018-08-29
* @desc description
* @param [array] $where [条件]
* @param [array] $params [输入参数]
*/
public static function GoodsCategoryList($where = [])
public static function GoodsCategoryList($params = [])
{
// 条件、附加必须启用状态
$where = empty($params['where']) ? [] : $params['where'];
$where['is_enable'] = 1;
// 数量、默认0,0则全部
$m = isset($params['m']) ? intval($params['m']) : 0;
$n = isset($params['n']) ? intval($params['n']) : 0;
$field = 'id,pid,icon,name,vice_name,describe,bg_color,big_images,sort,is_home_recommended,seo_title,seo_keywords,seo_desc';
$data = Db::name('GoodsCategory')->field($field)->where($where)->order('sort asc')->select();
$data = Db::name('GoodsCategory')->field($field)->where($where)->order('sort asc')->limit($m, $n)->select();
return self::GoodsCategoryDataDealWith($data);
}
......@@ -177,7 +184,20 @@ class GoodsService
public static function HomeFloorList($params = [])
{
// 商品数量
$goods_count = 8;
$goods_count = MyC('home_index_floor_goods_max_count', 8, true);
$goods_category_count = MyC('home_index_floor_left_goods_category_max_count', 6, true);
// 排序配置
$floor_order_by_type_list = lang('home_floor_goods_order_by_type_list');
$floor_order_by_rule_list = lang('home_floor_goods_order_by_rule_list');
$floor_order_by_type = MyC('home_index_floor_goods_order_by_type', 0, true);
$floor_order_by_rule = MyC('home_index_floor_goods_order_by_rule', 0, true);
// 排序字段名称
$order_by_field = array_key_exists($floor_order_by_type, $floor_order_by_type_list) ? $floor_order_by_type_list[$floor_order_by_type]['value'] : $floor_order_by_type_list[0]['value'];
// 排序规则
$order_by_rule = array_key_exists($floor_order_by_rule, $floor_order_by_rule_list) ? $floor_order_by_rule_list[$floor_order_by_rule]['value'] : $floor_order_by_rule_list[0]['value'];
// 排序
$order_by = implode(' '.$order_by_rule.', ', explode(',', $order_by_field)).' '.$order_by_rule;
// 缓存
$key = config('shopxo.cache_goods_floor_list_key');
......@@ -186,7 +206,7 @@ class GoodsService
{
// 商品大分类
$where = ['pid'=>0, 'is_home_recommended'=>1, 'is_enable'=>1];
$data = self::GoodsCategoryList($where);
$data = self::GoodsCategoryList(['where'=>$where]);
if(!empty($data))
{
$level = MyC('common_show_goods_category_level', 3, true);
......@@ -194,30 +214,19 @@ class GoodsService
{
foreach($data as &$c)
{
// 获取二级分类
$where['pid'] = $c['id'];
$c['items'] = self::GoodsCategoryList($where);
if(!empty($c['items']) && $level > 2)
{
// 一次性查出所有二级下的三级、再做归类、避免sql连接超多
$where['pid'] = array_column($c['items'], 'id');
$itemss = self::GoodsCategoryList($where);
if(!empty($itemss))
{
foreach($c['items'] as &$cv)
{
foreach($itemss as $cvv)
{
if($cv['id'] == $cvv['pid'])
{
$cv['items'][] = $cvv;
}
}
}
}
}
$c['items'] = self::GoodsCategoryList(['where'=>$where, 'n'=>$goods_category_count]);
}
}
// 楼层关键字从配置中读取
$floor_keywords = MyC('home_index_floor_top_right_keywords');
if(!empty($floor_keywords))
{
$floor_keywords = json_decode($floor_keywords, true);
}
// 根据分类获取楼层商品
foreach($data as &$v)
{
......@@ -230,8 +239,11 @@ class GoodsService
'g.is_home_recommended' => 1,
'g.is_shelves' => 1,
];
$v['goods_ids'] = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where)->group('g.id')->order('g.id desc')->limit($goods_count)->column('g.id');
$v['goods_ids'] = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where)->group('g.id')->order($order_by)->limit($goods_count)->column('g.id');
$v['goods'] = [];
// 楼层关键字
$v['config_keywords'] = empty($floor_keywords[$v['id']]) ? [] : explode(',', $floor_keywords[$v['id']]);
}
}
......@@ -239,15 +251,18 @@ class GoodsService
cache($key, $data, 60);
}
// 商品读取、商品不缓存、商品价格会根据用户等级可能会不一样
// 商品读取、商品信息需要实时读取
if(!empty($data) && is_array($data))
{
// 去除分类关键字前缀
$order_by = str_replace('g.', '', $order_by);
// 根据分类获取楼层商品
foreach($data as &$v)
{
if(!empty($v['goods_ids']) && is_array($v['goods_ids']))
{
$res = self::GoodsList(['where'=>['id'=>$v['goods_ids'], 'is_home_recommended'=>1, 'is_shelves'=>1], 'm'=>0, 'n'=>$goods_count, 'field'=>'*']);
$res = self::GoodsList(['where'=>['id'=>$v['goods_ids'], 'is_home_recommended'=>1, 'is_shelves'=>1], 'm'=>0, 'n'=>$goods_count, 'field'=>'*', 'order_by'=>$order_by]);
$v['goods'] = $res['data'];
}
}
......
......@@ -33,7 +33,7 @@ class SearchService
*/
public static function GoodsCategoryList($params = [])
{
return GoodsService::GoodsCategoryList(['pid'=>$params['category_id']]);
return GoodsService::GoodsCategoryList(['where'=>['pid'=>$params['category_id']]]);
}
/**
......@@ -130,7 +130,7 @@ class SearchService
{
$order_by = 'g.'.$params['order_by_field'].' '.$params['order_by_type'];
} else {
$order_by = 'g.access_count desc, g.sales_count desc, g.add_time desc';
$order_by = 'g.access_count desc, g.sales_count desc, g.id desc';
}
// 分页计算
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -36,6 +36,7 @@ form.am-form .am-form-group-refreshing, .plug-file-upload-view { border-bottom:
* 插件
*/
.chosen-container { width: 100% !important; }
.am-tagsinput { display: block; padding: 2px 5px; border-radius: 2px; }
.chosen-choices, .chosen-single { border-radius: 2px; }
.chosen-choices li.search-field input[type="text"] { height: 28px !important; }
.chosen-choices li.search-field input[type="text"]:hover,
......@@ -47,8 +48,6 @@ form.am-form .am-form-group-refreshing, .plug-file-upload-view { border-bottom:
.chosen-container-multi .chosen-choices li.search-field { padding-left: 3px; }
.chosen-container-single .chosen-single { color: #444 !important; }
.chosen-container-single .chosen-default { color: #999 !important; }
.am-tagsinput { display: block; }
.am-tagsinput { padding: 2px 5px; }
.chosen-disabled .chosen-choices, .chosen-disabled .chosen-single { background-color: #ccc; }
.chosen-disabled .search-choice { background: #d6d6d6 !important; }
......
......@@ -969,7 +969,7 @@ legend a.am-fr {
background: #d2354c;
color: #fff;
position: fixed;
left: 10px;
left: 20px;
bottom:70px;
z-index: 1020;
-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
......
......@@ -35,7 +35,7 @@
<view class="word" style="background-color:{{floor.bg_color || '#eaeaea'}}">
<view a:if="{{floor.items.length > 0}}">
<block a:for="{{floor.items}}" a:for-index="icx" a:for-item="icv">
<navigator a:if="{{icx < 6}}" class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
<navigator class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
{{icv.name}}
</navigator>
</block>
......
......@@ -35,7 +35,7 @@
<view class="word" style="background-color:{{floor.bg_color || '#eaeaea'}}">
<view s-if="floor.items.length > 0">
<block s-for="icv, icx in floor.items" s-key="ck">
<navigator s-if="icx < 6" class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
<navigator class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
{{icv.name}}
</navigator>
</block>
......
......@@ -35,7 +35,7 @@
<view class="word" style="background-color:{{floor.bg_color || '#eaeaea'}}">
<view qq:if="{{floor.items.length > 0}}">
<block qq:for="{{floor.items}}" qq:key="ck" qq:for-index="icx" qq:for-item="icv">
<navigator qq:if="{{icx < 6}}" class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
<navigator class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
{{icv.name}}
</navigator>
</block>
......
......@@ -38,7 +38,7 @@
<view class="word" style="background-color:{{floor.bg_color || '#eaeaea'}}">
<view tt:if="{{floor.items.length > 0}}">
<block tt:for="{{floor.items}}" tt:key="ck" tt:for-index="icx" tt:for-item="icv">
<navigator tt:if="{{icx < 6}}" class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
<navigator class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
{{icv.name}}
</navigator>
</block>
......
......@@ -10,12 +10,9 @@ Component({
show: function() {
this.init_config();
// 非首次进入则校验数据,无数据则重新初始化配置接口
// 非首次进入则重新初始化配置接口
if(this.data.is_first == 0) {
var data = app.get_config('quick_nav') || [];
if(data.length <= 0) {
app.init_config();
}
app.init_config();
}
// 首次初始化状态
......
......@@ -3,8 +3,8 @@
*/
.quick-event-submit {
position: fixed;
bottom: 60rpx;
left: 20rpx;
bottom: 50rpx;
left: 50rpx;
width: 100rpx;
height: 100rpx;
border-radius: 50%;
......
{
"enablePullDownRefresh": true,
"usingComponents": {
"component-quick-nav": "/components/quick-nav/quick-nav"
}
}
\ No newline at end of file
......@@ -81,4 +81,7 @@
<view wx:if="{{data_list.length == 0 && data_list_loding_status != 0}}">
<import src="/pages/common/nodata.wxml" />
<template is="nodata" data="{{status: data_list_loding_status, msg: data_list_loding_msg}}"></template>
</view>
\ No newline at end of file
</view>
<!-- 快捷导航 -->
<component-quick-nav></component-quick-nav>
\ No newline at end of file
{
"enablePullDownRefresh": true,
"usingComponents": {
"component-quick-nav": "/components/quick-nav/quick-nav"
}
}
\ No newline at end of file
......@@ -74,4 +74,7 @@
<view wx:if="{{data_list.length == 0 && data_list_loding_status != 0}}">
<import src="/pages/common/nodata.wxml" />
<template is="nodata" data="{{status: data_list_loding_status}}"></template>
</view>
\ No newline at end of file
</view>
<!-- 快捷导航 -->
<component-quick-nav></component-quick-nav>
\ No newline at end of file
......@@ -35,7 +35,7 @@
<view class="word" style="background-color:{{floor.bg_color || '#eaeaea'}}">
<view wx:if="{{floor.items.length > 0}}">
<block wx:for="{{floor.items}}" wx:key="ck" wx:for-index="icx" wx:for-item="icv">
<navigator wx:if="{{icx < 6}}" class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
<navigator class="word-icon" url="/pages/goods-search/goods-search?category_id={{icv.id}}" hover-class="none">
{{icv.name}}
</navigator>
</block>
......
......@@ -5,6 +5,7 @@
"backgroundColorBottom": "#f5f5f5",
"backgroundTextStyle": "light",
"usingComponents": {
"component-quick-nav": "/components/quick-nav/quick-nav",
"component-badge": "/components/badge/badge"
}
}
\ No newline at end of file
......@@ -78,5 +78,8 @@
<template is="online_service"></template>
</view>
<!-- 快捷导航 -->
<component-quick-nav></component-quick-nav>
<import src="/pages/common/copyright.wxml" />
<template is="copyright"></template>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册