新增站点设置配置
|
|
@ -11,6 +11,7 @@
|
|||
namespace app\admin\controller;
|
||||
|
||||
use app\service\ConfigService;
|
||||
use app\service\GoodsService;
|
||||
|
||||
/**
|
||||
* 站点设置
|
||||
|
|
@ -83,13 +84,19 @@ 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)
|
||||
{
|
||||
// 自提点
|
||||
case 'sitetype' :
|
||||
// 地址处理
|
||||
if(!empty($data['common_self_extraction_address']) && !empty($data['common_self_extraction_address']['value']))
|
||||
{
|
||||
|
|
@ -99,6 +106,23 @@ class Site extends Common
|
|||
|
||||
// 加载百度地图api
|
||||
$this->assign('is_load_baidu_map_api', 1);
|
||||
break;
|
||||
|
||||
// 网站设置
|
||||
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}}
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
{{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">×</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 -->
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
{{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 -->
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
{{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">×</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">×</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">×</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">×</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 -->
|
||||
|
|
@ -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}}
|
||||
{{/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,28 +214,17 @@ class GoodsService
|
|||
{
|
||||
foreach($data as &$c)
|
||||
{
|
||||
// 获取二级分类
|
||||
$where['pid'] = $c['id'];
|
||||
$c['items'] = self::GoodsCategoryList($where);
|
||||
if(!empty($c['items']) && $level > 2)
|
||||
$c['items'] = self::GoodsCategoryList(['where'=>$where, 'n'=>$goods_category_count]);
|
||||
}
|
||||
}
|
||||
|
||||
// 楼层关键字从配置中读取
|
||||
$floor_keywords = MyC('home_index_floor_top_right_keywords');
|
||||
if(!empty($floor_keywords))
|
||||
{
|
||||
// 一次性查出所有二级下的三级、再做归类、避免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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$floor_keywords = json_decode($floor_keywords, true);
|
||||
}
|
||||
|
||||
// 根据分类获取楼层商品
|
||||
|
|
@ -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';
|
||||
}
|
||||
|
||||
// 分页计算
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 699 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 330 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 288 KiB |
|
After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 232 KiB |
|
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 199 KiB |
|
Before Width: | Height: | Size: 677 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 190 KiB |
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 370 KiB |
|
|
@ -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,13 +10,10 @@ 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();
|
||||
}
|
||||
}
|
||||
|
||||
// 首次初始化状态
|
||||
this.setData({ is_first: 0 });
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
*/
|
||||
.quick-event-submit {
|
||||
position: fixed;
|
||||
bottom: 60rpx;
|
||||
left: 20rpx;
|
||||
bottom: 50rpx;
|
||||
left: 50rpx;
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 50%;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"enablePullDownRefresh": true,
|
||||
"usingComponents": {
|
||||
"component-quick-nav": "/components/quick-nav/quick-nav"
|
||||
}
|
||||
}
|
||||
|
|
@ -82,3 +82,6 @@
|
|||
<import src="/pages/common/nodata.wxml" />
|
||||
<template is="nodata" data="{{status: data_list_loding_status, msg: data_list_loding_msg}}"></template>
|
||||
</view>
|
||||
|
||||
<!-- 快捷导航 -->
|
||||
<component-quick-nav></component-quick-nav>
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"enablePullDownRefresh": true,
|
||||
"usingComponents": {
|
||||
"component-quick-nav": "/components/quick-nav/quick-nav"
|
||||
}
|
||||
}
|
||||
|
|
@ -75,3 +75,6 @@
|
|||
<import src="/pages/common/nodata.wxml" />
|
||||
<template is="nodata" data="{{status: data_list_loding_status}}"></template>
|
||||
</view>
|
||||
|
||||
<!-- 快捷导航 -->
|
||||
<component-quick-nav></component-quick-nav>
|
||||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||