Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
纵之格
ShopXO
提交
c3e284f6
ShopXO
项目概览
纵之格
/
ShopXO
通知
394
Star
16
Fork
11
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c3e284f6
编写于
3月 26, 2019
作者:
D
devil_gong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
应用优化,新增营销应用
上级
fc137da5
变更
27
展开全部
隐藏空白更改
内联
并排
Showing
27 changed file
with
575 addition
and
141 deletion
+575
-141
application/index/controller/Goods.php
application/index/controller/Goods.php
+46
-0
application/index/view/default/goods/index.html
application/index/view/default/goods/index.html
+82
-8
application/plugins/answers/Admin.php
application/plugins/answers/Admin.php
+3
-1
application/plugins/answers/Hook.php
application/plugins/answers/Hook.php
+1
-1
application/plugins/answers/Index.php
application/plugins/answers/Index.php
+3
-3
application/plugins/answers/Service.php
application/plugins/answers/Service.php
+2
-1
application/plugins/freightfee/Hook.php
application/plugins/freightfee/Hook.php
+1
-1
application/plugins/newuserreduction/Admin.php
application/plugins/newuserreduction/Admin.php
+85
-0
application/plugins/newuserreduction/Hook.php
application/plugins/newuserreduction/Hook.php
+153
-0
application/plugins/newuserreduction/config.json
application/plugins/newuserreduction/config.json
+28
-0
application/plugins/touristbuy/Hook.php
application/plugins/touristbuy/Hook.php
+1
-1
application/plugins/usernotloginhidegoodsprice/Hook.php
application/plugins/usernotloginhidegoodsprice/Hook.php
+2
-2
application/plugins/view/answers/admin/sliderinfo.html
application/plugins/view/answers/admin/sliderinfo.html
+1
-1
application/plugins/view/answers/index/index.html
application/plugins/view/answers/index/index.html
+1
-1
application/plugins/view/newuserreduction/admin/index.html
application/plugins/view/newuserreduction/admin/index.html
+64
-0
application/plugins/view/newuserreduction/admin/saveinfo.html
...ication/plugins/view/newuserreduction/admin/saveinfo.html
+50
-0
application/plugins/view/usernotloginhidegoodsprice/admin/index.html
.../plugins/view/usernotloginhidegoodsprice/admin/index.html
+1
-1
application/plugins/view/usernotloginhidegoodsprice/admin/saveinfo.html
...ugins/view/usernotloginhidegoodsprice/admin/saveinfo.html
+3
-3
application/service/BuyService.php
application/service/BuyService.php
+1
-0
application/service/GoodsService.php
application/service/GoodsService.php
+4
-0
application/tags.php
application/tags.php
+1
-0
config/shopxo.php
config/shopxo.php
+1
-1
config/shopxo.sql
config/shopxo.sql
+26
-110
public/static/admin/default/css/pluginsadmin.css
public/static/admin/default/css/pluginsadmin.css
+0
-1
public/static/index/default/css/goods.css
public/static/index/default/css/goods.css
+4
-5
public/static/plugins/css/newuserreduction/admin.css
public/static/plugins/css/newuserreduction/admin.css
+11
-0
public/static/upload/images/plugins_newuserreduction/2019/03/25/1553483752670109.jpg
.../plugins_newuserreduction/2019/03/25/1553483752670109.jpg
+0
-0
未找到文件。
application/index/controller/Goods.php
浏览文件 @
c3e284f6
...
...
@@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace
app\index\controller
;
use
think\facade\Hook
;
use
app\service\GoodsService
;
use
app\service\SeoService
;
...
...
@@ -69,6 +70,51 @@ class Goods extends Common
// 商品收藏总数
$ret
[
'data'
][
0
][
'favor_count'
]
=
GoodsService
::
GoodsFavorTotal
([
'goods_id'
=>
$id
]);
// 商品页面基础信息顶部钩子
$this
->
assign
(
'plugins_view_goods_detail_base_top_data'
,
Hook
::
listen
(
'plugins_view_goods_detail_base_top'
,
[
'hook_name'
=>
'plugins_view_goods_detail_base_top'
,
'is_backend'
=>
false
,
'goods_id'
=>
$id
,
'goods'
=>
&
$ret
[
'data'
][
0
],
]));
// 商品页面基础信息面板底部钩子
$this
->
assign
(
'plugins_view_goods_detail_panel_bottom_data'
,
Hook
::
listen
(
'plugins_view_goods_detail_panel_bottom'
,
[
'hook_name'
=>
'plugins_view_goods_detail_panel_bottom'
,
'is_backend'
=>
false
,
'goods_id'
=>
$id
,
'goods'
=>
&
$ret
[
'data'
][
0
],
]));
// 商品页面tabs顶部钩子
$this
->
assign
(
'plugins_view_goods_detail_tabs_top_data'
,
Hook
::
listen
(
'plugins_view_goods_detail_tabs_top'
,
[
'hook_name'
=>
'plugins_view_goods_detail_tabs_top'
,
'is_backend'
=>
false
,
'goods_id'
=>
$id
,
'goods'
=>
&
$ret
[
'data'
][
0
],
]));
// 商品页面tabs顶部钩子
$this
->
assign
(
'plugins_view_goods_detail_tabs_bottom_data'
,
Hook
::
listen
(
'plugins_view_goods_detail_tabs_bottom'
,
[
'hook_name'
=>
'plugins_view_goods_detail_tabs_bottom'
,
'is_backend'
=>
false
,
'goods_id'
=>
$id
,
'goods'
=>
&
$ret
[
'data'
][
0
],
]));
// 商品页面左侧顶部钩子
$this
->
assign
(
'plugins_view_goods_detail_left_top_data'
,
Hook
::
listen
(
'plugins_view_goods_detail_left_top'
,
[
'hook_name'
=>
'plugins_view_goods_detail_left_top'
,
'is_backend'
=>
false
,
'goods_id'
=>
$id
,
'goods'
=>
&
$ret
[
'data'
][
0
],
]));
// 商品数据
$this
->
assign
(
'goods'
,
$ret
[
'data'
][
0
]);
...
...
application/index/view/default/goods/index.html
浏览文件 @
c3e284f6
...
...
@@ -80,18 +80,32 @@
<h1
class=
"detail-title"
{{
if
!
empty
($
goods.title_color
)}}
style=
"color:{{$goods.title_color}};"
{{/
if
}}
>
{{$goods.title}}
</h1>
</div>
<div
class=
"tb-detail-list"
>
<!--价格-->
<!-- 商品页面基础信息顶部钩子 -->
{{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_goods_detail_base_top
</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_base_top_data) and is_array($plugins_view_goods_detail_base_top_data)}}
{{foreach $plugins_view_goods_detail_base_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 基础面板 -->
<div
class=
"tb-detail-price"
>
{{if isset($goods['original_price']) and $goods['original_price'] gt 0}}
{{if isset($goods['original_price']) and $goods['original_price'] gt 0
and !empty($goods['show_field_original_price_text'])
}}
<div
class=
"items price iteminfo_price"
>
<dt>
原价
</dt>
<dt>
{{$goods.show_field_original_price_text|raw}}
</dt>
<dd>
<b
class=
"sys_item_mktprice"
>
¥ {{$goods.original_price}}
</b>
</dd>
</div>
{{/if}}
<div
class=
"items price iteminfo_mktprice"
>
<dt>
销售价
</dt>
<dt>
{{if empty($goods['show_field_price_text'])}}销售价{{else /}}{{$goods.show_field_price_text|raw}}{{/if}}
</dt>
<dd>
<em>
¥
</em>
<b
class=
"sys_item_price"
data-original-price=
"{{$goods.price}}"
>
{{$goods.price}}
</b>
...
...
@@ -101,17 +115,31 @@
<i
class=
"am-icon-qrcode am-icon-sm"
></i>
<img
class=
"qrcode-images am-img-thumbnail"
src=
"{{$qrcode_url}}"
/>
</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_goods_detail_panel_bottom
</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_panel_bottom_data) and is_array($plugins_view_goods_detail_panel_bottom_data)}}
{{foreach $plugins_view_goods_detail_panel_bottom_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
</div>
<!--销量-->
<ul
class=
"tm-ind-panel"
>
<li
class=
"tm-ind-item
tm-ind-sellCount canClick
"
>
<li
class=
"tm-ind-item"
>
<div
class=
"tm-indcon"
><span
class=
"tm-label"
>
累计销量
</span><span
class=
"tm-count"
>
{{$goods.sales_count}}
</span></div>
</li>
<li
class=
"tm-ind-item
tm-ind-sumCount canClick
"
>
<li
class=
"tm-ind-item"
>
<div
class=
"tm-indcon"
><span
class=
"tm-label"
>
浏览次数
</span><span
class=
"tm-count"
>
{{$goods.access_count}}
</span></div>
</li>
<li
class=
"tm-ind-item
tm-ind-reviewCount canClick tm-line3
"
>
<li
class=
"tm-ind-item"
>
<div
class=
"tm-indcon"
><span
class=
"tm-label"
>
累计评价
</span><span
class=
"tm-count"
>
{{$goods.comments_count}}
</span></div>
</li>
</ul>
...
...
@@ -237,9 +265,24 @@
</div>
</div>
<!--
详情/推荐商品
-->
<!--
左侧
-->
<div
class=
"introduce am-container"
>
<div
class=
"browse"
>
<!-- 商品页面左侧顶部钩子 -->
{{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_goods_detail_left_top
</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_left_top_data) and is_array($plugins_view_goods_detail_left_top_data)}}
{{foreach $plugins_view_goods_detail_left_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 详情/推荐商品-->
<div
class=
"mc"
>
<ul>
<div
class=
"mt"
>
...
...
@@ -263,7 +306,24 @@
</ul>
</div>
</div>
<!-- 右侧内容 -->
<div
class=
"introduce-main"
>
<!-- 商品页面tabs顶部钩子 -->
{{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_goods_detail_tabs_top
</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_tabs_top_data) and is_array($plugins_view_goods_detail_tabs_top_data)}}
{{foreach $plugins_view_goods_detail_tabs_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- tab -->
<div
class=
"am-tabs"
data-am-tabs
>
<ul
class=
"am-avg-sm-2 am-tabs-nav am-nav am-nav-tabs"
data-am-sticky=
"{animation: 'slide-top'}"
>
<li
class=
"am-active"
>
...
...
@@ -329,6 +389,20 @@
</div>
</div>
</div>
<!-- 商品页面tabs底部钩子 -->
{{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_goods_detail_tabs_bottom
</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_tabs_bottom_data) and is_array($plugins_view_goods_detail_tabs_bottom_data)}}
{{foreach $plugins_view_goods_detail_tabs_bottom_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
</div>
</div>
</div>
...
...
application/plugins/answers/Admin.php
浏览文件 @
c3e284f6
...
...
@@ -133,14 +133,16 @@ class Admin extends Controller
public
function
sliderinfo
(
$params
=
[])
{
// 数据
$data
=
[];
if
(
!
empty
(
$params
[
'id'
]))
{
$data_params
=
array
(
'where'
=>
[
'id'
=>
intval
(
$params
[
'id'
])],
);
$ret
=
Service
::
SlideList
(
$data_params
);
$
this
->
assign
(
'data'
,
empty
(
$ret
[
'data'
][
0
])
?
[]
:
$ret
[
'data'
][
0
])
;
$
data
=
empty
(
$ret
[
'data'
][
0
])
?
[]
:
$ret
[
'data'
][
0
]
;
}
$this
->
assign
(
'data'
,
$data
);
return
$this
->
fetch
(
'../../../plugins/view/answers/admin/sliderinfo'
);
}
...
...
application/plugins/answers/Hook.php
浏览文件 @
c3e284f6
...
...
@@ -37,7 +37,7 @@ class Hook extends Controller
if
(
is_array
(
$params
[
'header'
]))
{
// 获取应用数据
$ret
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
]);
$ret
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
,
'images_bottom'
]);
if
(
$ret
[
'code'
]
==
0
&&
!
empty
(
$ret
[
'data'
][
'application_name'
]))
{
$nav
=
[
...
...
application/plugins/answers/Index.php
浏览文件 @
c3e284f6
...
...
@@ -39,7 +39,7 @@ class Index extends Controller
public
function
index
(
$params
=
[])
{
// 基础数据
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
]);
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
,
'images_bottom'
]);
$this
->
assign
(
'plugins_answers_data'
,
isset
(
$base
[
'data'
])
?
$base
[
'data'
]
:
[]);
// 幻灯片
...
...
@@ -93,7 +93,7 @@ class Index extends Controller
public
function
detail
(
$params
=
[])
{
// 基础数据
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
]);
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
,
'images_bottom'
]);
$this
->
assign
(
'plugins_answers_data'
,
isset
(
$base
[
'data'
])
?
$base
[
'data'
]
:
[]);
// 商品数据
...
...
@@ -148,7 +148,7 @@ class Index extends Controller
return
redirect
(
PluginsHomeUrl
(
'answers'
,
'index'
,
'search'
,
[
'answers_keywords'
=>
$answers_keywords
]));
}
else
{
// 基础数据
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
]);
$base
=
PluginsService
::
PluginsData
(
'answers'
,
[
'images'
,
'images_bottom'
]);
$this
->
assign
(
'plugins_answers_data'
,
isset
(
$base
[
'data'
])
?
$base
[
'data'
]
:
[]);
// 商品数据
...
...
application/plugins/answers/Service.php
浏览文件 @
c3e284f6
...
...
@@ -87,6 +87,7 @@ class Service
[
'checked_type'
=>
'fun'
,
'key_name'
=>
'url'
,
'is_checked'
=>
1
,
'checked_data'
=>
'CheckUrl'
,
'error_msg'
=>
'url格式有误'
,
],
...
...
@@ -240,7 +241,7 @@ class Service
$field
=
'g.id,g.title'
;
// 获取数据
return
GoodsService
::
CategoryGoodsList
([
'where'
=>
$where
,
'm'
=>
0
,
'n'
=>
100
,
'field'
=>
$field
]);
return
GoodsService
::
CategoryGoodsList
([
'where'
=>
$where
,
'm'
=>
0
,
'n'
=>
100
,
'field'
=>
$field
,
'is_admin_access'
=>
1
]);
}
/**
...
...
application/plugins/freightfee/Hook.php
浏览文件 @
c3e284f6
...
...
@@ -111,7 +111,7 @@ class Hook
$params
[
'data'
][
'extension_data'
][]
=
[
'name'
=>
$show_name
,
'price'
=>
$price
,
'type'
=>
0
,
'type'
=>
1
,
'tips'
=>
'+¥'
.
$price
.
'元'
,
];
...
...
application/plugins/newuserreduction/Admin.php
0 → 100644
浏览文件 @
c3e284f6
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace
app\plugins\newuserreduction
;
use
think\Controller
;
use
app\service\PluginsService
;
/**
* 新用户立减 - 后台管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class
Admin
extends
Controller
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public
function
index
(
$params
=
[])
{
$ret
=
PluginsService
::
PluginsData
(
'newuserreduction'
);
if
(
$ret
[
'code'
]
==
0
)
{
$this
->
assign
(
'data'
,
$ret
[
'data'
]);
return
$this
->
fetch
(
'../../../plugins/view/newuserreduction/admin/index'
);
}
else
{
return
$ret
[
'msg'
];
}
}
/**
* 编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public
function
saveinfo
(
$params
=
[])
{
$ret
=
PluginsService
::
PluginsData
(
'newuserreduction'
);
if
(
$ret
[
'code'
]
==
0
)
{
// 是否
$is_whether_list
=
[
0
=>
array
(
'id'
=>
0
,
'name'
=>
'否'
,
'checked'
=>
true
),
1
=>
array
(
'id'
=>
1
,
'name'
=>
'是'
),
];
$this
->
assign
(
'is_whether_list'
,
$is_whether_list
);
$this
->
assign
(
'data'
,
$ret
[
'data'
]);
return
$this
->
fetch
(
'../../../plugins/view/newuserreduction/admin/saveinfo'
);
}
else
{
return
$ret
[
'msg'
];
}
}
/**
* 数据保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public
function
save
(
$params
=
[])
{
return
PluginsService
::
PluginsDataSave
([
'plugins'
=>
'newuserreduction'
,
'data'
=>
$params
]);
}
}
?>
\ No newline at end of file
application/plugins/newuserreduction/Hook.php
0 → 100644
浏览文件 @
c3e284f6
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace
app\plugins\newuserreduction
;
use
think\Db
;
use
app\service\PluginsService
;
/**
* 新用户立减 - 钩子入口
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class
Hook
{
/**
* 应用响应入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-09T14:25:44+0800
* @param [array] $params [输入参数]
*/
public
function
run
(
$params
=
[])
{
if
(
!
empty
(
$params
[
'hook_name'
]))
{
switch
(
$params
[
'hook_name'
])
{
// 立减计算
case
'plugins_service_buy_handle'
:
$ret
=
$this
->
ReductionCalculate
(
$params
);
break
;
default
:
$ret
=
''
;
}
return
$ret
;
}
}
/**
* 立减计算
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-21
* @desc description
* @param [array] $params [输入参数]
*/
public
function
ReductionCalculate
(
$params
=
[])
{
$ret
=
PluginsService
::
PluginsData
(
'newuserreduction'
);
if
(
$ret
[
'code'
]
==
0
)
{
// 是否设置需满金额
if
(
isset
(
$ret
[
'data'
][
'full_amount'
])
&&
$ret
[
'data'
][
'full_amount'
]
>
0
&&
$params
[
'data'
][
'base'
][
'total_price'
]
<
$ret
[
'data'
][
'full_amount'
])
{
return
DataReturn
(
'无需处理'
,
0
);
}
// 默认金额
$price
=
isset
(
$ret
[
'data'
][
'price'
])
?
(
float
)
$ret
[
'data'
][
'price'
]
:
0
;
$unit
=
'元'
;
$price_show
=
$price
;
if
(
$price
>
0
&&
$this
->
IsNewUser
(
$params
))
{
// 是否随机
if
(
isset
(
$ret
[
'data'
][
'is_random'
])
&&
$ret
[
'data'
][
'is_random'
]
==
1
)
{
// 随机金额需要提交步骤生效
if
(
!
isset
(
$params
[
'params'
][
'is_order_submit'
])
||
$params
[
'params'
][
'is_order_submit'
]
!=
1
)
{
$price
=
0
;
$price_show
=
'随机减'
;
$unit
=
''
;
}
else
{
$price
=
$this
->
RandomFloat
(
0
,
$price
);
$price_show
=
$price
;
}
}
// 扩展展示数据
$show_name
=
empty
(
$ret
[
'data'
][
'show_name'
])
?
'新用户立减'
:
$ret
[
'data'
][
'show_name'
];
$params
[
'data'
][
'extension_data'
][]
=
[
'name'
=>
$show_name
,
'price'
=>
$price
,
'type'
=>
0
,
'tips'
=>
'-¥'
.
$price_show
.
$unit
,
];
// 金额
$params
[
'data'
][
'base'
][
'increase_price'
]
-=
$price
;
$params
[
'data'
][
'base'
][
'actual_price'
]
-=
$price
;
}
return
DataReturn
(
'无需处理'
,
0
);
}
else
{
return
$ret
[
'msg'
];
}
}
/**
* 是否满足新用户条件
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-25
* @desc description
* @param [array] $params [输入参数]
*/
private
function
IsNewUser
(
$params
=
[])
{
// 用户信息是否存在
if
(
empty
(
$params
[
'params'
][
'user'
]))
{
return
false
;
}
// 获取用户订单
// 订单状态(0待确认, 1已确认/待支付, 2已支付/待发货, 3已发货/待收货, 4已完成, 5已取消, 6已关闭)
$where
=
[
[
'user_id'
,
'='
,
intval
(
$params
[
'params'
][
'user'
][
'id'
])],
[
'status'
,
'<='
,
4
],
];
$temp
=
Db
::
name
(
'Order'
)
->
where
(
$where
)
->
count
();
return
empty
(
$temp
);
}
/**
* 生成随机金额
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-25
* @desc description
* @param [int] $min [最小值]
* @param [int] $max [最大值]
*/
private
function
RandomFloat
(
$min
=
0
,
$max
=
10
)
{
return
sprintf
(
"%.2f"
,
$min
+
mt_rand
()
/
mt_getrandmax
()
*
(
$max
-
$min
));
}
}
?>
\ No newline at end of file
application/plugins/newuserreduction/config.json
0 → 100644
浏览文件 @
c3e284f6
{
"base"
:{
"plugins"
:
"newuserreduction"
,
"name"
:
"新用户立减"
,
"logo"
:
"
\/
static
\/
upload
\/
images
\/
plugins_newuserreduction
\/
2019
\/
03
\/
25
\/
1553483752670109.jpg"
,
"author"
:
"Devil"
,
"author_url"
:
"https:
\/\/
shopxo.net
\/
"
,
"version"
:
"1.0.0"
,
"desc"
:
"新用户立减优惠"
,
"apply_terminal"
:[
"pc"
,
"h5"
,
"app"
,
"alipay"
,
"weixin"
,
"baidu"
],
"apply_version"
:[
"1.4.0"
],
"is_home"
:
false
},
"hook"
:{
"plugins_service_buy_handle"
:[
"app
\\
plugins
\\
newuserreduction
\\
Hook"
]
}
}
\ No newline at end of file
application/plugins/touristbuy/Hook.php
浏览文件 @
c3e284f6
...
...
@@ -168,7 +168,7 @@ class Hook extends Controller
// 获取应用数据
$ret
=
PluginsService
::
PluginsData
(
'touristbuy'
);
$login_name
=
empty
(
$ret
[
'data'
][
'login_name'
])
?
'游客登录'
:
$ret
[
'data'
][
'login_name'
];
return
'<a href="'
.
PluginsHomeUrl
(
'touristbuy'
,
'index'
,
'login'
,
[
'is_parent'
=>
$is_parent
])
.
'" class="am-btn am-btn-warning am-btn-xs am-radius plugins-touristbuy-login-info-btn">'
.
$
ret
[
'data'
][
'login_name'
]
.
'</a>'
;
return
'<a href="'
.
PluginsHomeUrl
(
'touristbuy'
,
'index'
,
'login'
,
[
'is_parent'
=>
$is_parent
])
.
'" class="am-btn am-btn-warning am-btn-xs am-radius plugins-touristbuy-login-info-btn">'
.
$
login_name
.
'</a>'
;
}
return
''
;
}
...
...
application/plugins/usernotloginhidegoodsprice/Hook.php
浏览文件 @
c3e284f6
...
...
@@ -90,11 +90,11 @@ class Hook extends Controller
$original_price_placeholder
=
isset
(
$ret
[
'data'
][
'original_price_placeholder'
])
?
$ret
[
'data'
][
'original_price_placeholder'
]
:
''
;
// 销售价
$price_placeholder
=
isset
(
$ret
[
'data'
][
'price_placeholder'
])
?
$ret
[
'data'
][
'price_placeholder'
]
:
''
;
$price_placeholder
=
empty
(
$ret
[
'data'
][
'price_placeholder'
])
?
'登录可见'
:
$ret
[
'data'
][
'price_placeholder'
]
;
switch
(
$params
[
'hook_name'
])
{
// 商品数据处理
前
// 商品数据处理
后
case
'plugins_service_goods_handle_end'
:
// 商品原价
if
(
isset
(
$params
[
'goods'
][
'original_price'
]))
...
...
application/plugins/view/answers/admin/sliderinfo.html
浏览文件 @
c3e284f6
...
...
@@ -24,7 +24,7 @@
<div
class=
"am-form-group"
>
<label>
url地址
<span
class=
"am-form-group-label-tips"
>
带http://或https://
</span></label>
<input
type=
"url"
placeholder=
"url地址"
name=
"url"
data-validation-message=
"url格式有误"
class=
"am-radius"
{{
if
!
empty
($
data
)}}
value=
"{{$data.url}}"
{{/
if
}}
required
/>
<input
type=
"url"
placeholder=
"url地址"
name=
"url"
data-validation-message=
"url格式有误"
class=
"am-radius"
{{
if
!
empty
($
data
)}}
value=
"{{$data.url}}"
{{/
if
}}
/>
</div>
<div
class=
"am-form-group am-form-file"
>
...
...
application/plugins/view/answers/index/index.html
浏览文件 @
c3e284f6
...
...
@@ -22,7 +22,7 @@
<ul
class=
"am-slides"
>
{{foreach $plugins_answers_slider as $k=>$v}}
<li>
<a
href=
"{{
$v.url
}}"
target=
"_blank"
>
<a
href=
"{{
if empty($v['url'])}}javascript:;{{else /}}{{$v.url}}{{/if
}}"
target=
"_blank"
>
<img
src=
"{{$v.images_url}}"
alt=
"{{$v.name}}"
>
<div
class=
"am-slider-desc"
>
<div
class=
"am-slider-counter"
>
...
...
application/plugins/view/newuserreduction/admin/index.html
0 → 100644
浏览文件 @
c3e284f6
{{include file="public/header" /}}
<!-- right content start -->
<div
class=
"content-right"
>
<div
class=
"content"
>
<legend>
<span
class=
"fs-16"
>
新用户立减
</span>
<a
href=
"{{:MyUrl('admin/pluginsadmin/index')}}"
class=
"fr fs-14 m-t-5 am-icon-mail-reply"
>
返回
</a>
</legend>
<div
class=
"newuserreduction-content"
>
<div
class=
"items"
>
<label>
展示名称
</label>
<div>
{{if empty($data['show_name'])}}
新用户立减
{{else /}}
{{$data.show_name}}
{{/if}}
</div>
</div>
<div
class=
"items"
>
<label>
需满金额
</label>
<div>
{{if empty($data['full_amount'])}}
不限
{{else /}}
{{$data.full_amount}}
{{/if}}
</div>
</div>
<div
class=
"items"
>
<label>
立减金额
</label>
<div>
{{if empty($data['price'])}}
未设置
{{else /}}
{{$data.price}}
{{/if}}
</div>
</div>
<div
class=
"items"
>
<label>
是否随机
</label>
<div>
{{if isset($data['is_random']) and $data['is_random'] eq 1}}
是
{{else /}}
否
{{/if}}
</div>
</div>
<a
href=
"{{:PluginsAdminUrl('newuserreduction', 'admin', 'saveinfo')}}"
class=
"am-btn am-btn-secondary am-radius btn-loading-example am-btn-sm am-btn-block edit-submit"
>
编辑
</a>
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
\ No newline at end of file
application/plugins/view/newuserreduction/admin/saveinfo.html
0 → 100644
浏览文件 @
c3e284f6
{{include file="public/header" /}}
<!-- right content start -->
<div
class=
"content-right"
>
<div
class=
"content"
>
<!-- form start -->
<form
class=
"am-form form-validation view-save"
action=
"{{:PluginsAdminUrl('newuserreduction', 'admin', 'save')}}"
method=
"POST"
request-type=
"ajax-url"
request-value=
"{{:PluginsAdminUrl('newuserreduction', 'admin', 'index')}}"
enctype=
"multipart/form-data"
>
<legend>
<span
class=
"fs-16"
>
新用户立减
</span>
<a
href=
"{{:PluginsAdminUrl('newuserreduction', 'admin', 'index')}}"
class=
"fr fs-14 m-t-5 am-icon-mail-reply"
>
返回
</a>
</legend>
<div
class=
"am-form-group"
>
<label>
展示名称
<span
class=
"am-form-group-label-tips"
>
默认 新用户立减
</span></label>
<input
type=
"text"
name=
"show_name"
placeholder=
"展示名称"
maxlength=
"16"
data-validation-message=
"展示名称格式最多 16 个字符"
class=
"am-radius"
value=
"{{if !empty($data['show_name'])}}{{$data.show_name}}{{else /}}新用户立减{{/if}}"
/>
</div>
<div
class=
"am-form-group"
>
<label>
需满金额
<span
class=
"am-form-group-label-tips"
>
订单金额大于等于该金额 空则不限
</span></label>
<input
type=
"number"
name=
"full_amount"
placeholder=
"需满金额"
min=
"0.00"
step=
"0.01"
data-validation-message=
"请填写有效的需满金额"
class=
"am-radius"
value=
"{{if isset($data['full_amount']) and $data['full_amount'] gt 0}}{{$data.full_amount}}{{/if}}"
/>
</div>
<div
class=
"am-form-group"
>
<label>
立减金额
<span
class=
"am-form-group-label-tips"
>
开启随机则0~当前设置的金额随机取值
</span></label>
<input
type=
"number"
name=
"price"
placeholder=
"立减金额"
min=
"0.00"
step=
"0.01"
data-validation-message=
"请填写有效的立减金额"
class=
"am-radius"
value=
"{{if isset($data['price']) and $data['price'] gt 0}}{{$data.price}}{{/if}}"
/>
</div>
<div
class=
"am-form-group"
>
<label>
是否随机
<span
class=
"am-form-group-label-tips"
>
0~立减金额之间
</span></label>
<div>
{{foreach $is_whether_list as $v}}
<label
class=
"am-radio-inline m-r-10"
>
<input
type=
"radio"
name=
"is_random"
value=
"{{$v.id}}"
{{
if
isset
($
data
['
is_random
'])
and
$
data
['
is_random
']
eq
$
v
['
id
']}}
checked=
"checked"
{{
else
/}}{{
if
!
isset
($
data
['
is_random
'])
and
isset
($
v
['
checked
'])
and
$
v
['
checked
']
eq
true
}}
checked=
"checked"
{{/
if
}}{{/
if
}}
data-am-ucheck
/>
{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<div
class=
"am-form-group business-form-block am-form-group-refreshing"
>
<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
application/plugins/view/usernotloginhidegoodsprice/admin/index.html
浏览文件 @
c3e284f6
...
...
@@ -25,7 +25,7 @@
{{if !empty($data['price_placeholder'])}}
{{$data.price_placeholder}}
{{else /}}
<span
class=
"empty-text"
>
未填写
</span>
<span
class=
"empty-text"
>
登录可见
</span>
{{/if}}
</div>
</div>
...
...
application/plugins/view/usernotloginhidegoodsprice/admin/saveinfo.html
浏览文件 @
c3e284f6
...
...
@@ -21,12 +21,12 @@
<div
class=
"am-form-group"
>
<label>
原价占位符
</label>
<input
type=
"text"
name=
"original_price_placeholder"
placeholder=
"原价占位符"
maxlength=
"16"
data-validation-message=
"原价占位符最多16个字符"
class=
"am-radius"
value=
"{{if !empty($data)}}{{$data.original_price_placeholder}}{{/if}}"
/>
<input
type=
"text"
name=
"original_price_placeholder"
placeholder=
"原价占位符"
maxlength=
"16"
data-validation-message=
"原价占位符最多16个字符"
class=
"am-radius"
value=
"{{if !empty($data
['original_price_placeholder']
)}}{{$data.original_price_placeholder}}{{/if}}"
/>
</div>
<div
class=
"am-form-group"
>
<label>
销售价占位符
</label>
<input
type=
"text"
name=
"price_placeholder"
placeholder=
"销售价占位符"
maxlength=
"16"
data-validation-message=
"销售价占位符最多16个字符"
class=
"am-radius"
value=
"{{if !empty($data)}}{{$data.price_placeholder}}{{/if}}"
/>
<label>
销售价占位符
<
span
class=
"am-form-group-label-tips"
>
默认 登录可见
</span><
/label>
<input
type=
"text"
name=
"price_placeholder"
placeholder=
"销售价占位符"
maxlength=
"16"
data-validation-message=
"销售价占位符最多16个字符"
class=
"am-radius"
value=
"{{if !empty($data
['price_placeholder']
)}}{{$data.price_placeholder}}{{/if}}"
/>
</div>
<div
class=
"am-form-group am-form-group-refreshing"
>
...
...
application/service/BuyService.php
浏览文件 @
c3e284f6
...
...
@@ -708,6 +708,7 @@ class BuyService
}
// 清单商品
$params
[
'is_order_submit'
]
=
1
;
$buy
=
self
::
BuyTypeGoodsList
(
$params
);
if
(
!
isset
(
$buy
[
'code'
])
||
$buy
[
'code'
]
!=
0
)
{
...
...
application/service/GoodsService.php
浏览文件 @
c3e284f6
...
...
@@ -365,6 +365,10 @@ class GoodsService
$v
[
'content_app'
]
=
self
::
GoodsContentApp
([
'goods_id'
=>
$v
[
'id'
]]);
}
// 展示字段
$v
[
'show_field_original_price_text'
]
=
'原价'
;
$v
[
'show_field_price_text'
]
=
'销售价'
;
// 商品处理前钩子
$hook_name
=
'plugins_service_goods_handle_end'
;
$ret
=
Hook
::
listen
(
$hook_name
,
[
...
...
application/tags.php
浏览文件 @
c3e284f6
...
...
@@ -115,6 +115,7 @@ return array (
'plugins_service_buy_handle'
=>
array
(
0
=>
'app\\plugins\\freightfee\\Hook'
,
1
=>
'app\\plugins\\newuserreduction\\Hook'
,
),
);
?>
\ No newline at end of file
config/shopxo.php
浏览文件 @
c3e284f6
...
...
@@ -15,7 +15,7 @@
return
[
// 开发模式
'is_develop'
=>
tru
e
,
'is_develop'
=>
fals
e
,
// 默认编码
'default_charset'
=>
'utf-8'
,
...
...
config/shopxo.sql
浏览文件 @
c3e284f6
此差异已折叠。
点击以展开。
public/static/admin/default/css/pluginsadmin.css
浏览文件 @
c3e284f6
...
...
@@ -73,7 +73,6 @@
}
.content
ul
.am-gallery-bordered
li
.submit-state
{
height
:
28px
;
line-height
:
28px
;
border-radius
:
2px
;
font-size
:
12px
;
}
...
...
public/static/index/default/css/goods.css
浏览文件 @
c3e284f6
...
...
@@ -156,7 +156,7 @@ ul.am-tabs-nav.am-nav.am-nav-tabs {background: #F5F5F5;}
.iteminfo_parameter
a
:hover
{
text-decoration
:
none
;
color
:
initial
;}
.tm-indcon
.tm-label
,
.tb-detail-price
dt
{
display
:
inline
;
width
:
60px
;
white-space
:
nowrap
;
text-align
:
right
;
color
:
#888
;}
.tb-detail-price
.items
{
display
:
inline-block
;
}
.tb-detail-price
.items
:not
(
:
last-child
)
{
margin-righ
t
:
10px
;
}
.tb-detail-price
.items
:not
(
:
first-child
)
{
margin-lef
t
:
10px
;
}
/* 二维码 */
.goods-qrcode
{
position
:
absolute
;
bottom
:
5px
;
right
:
10px
;
cursor
:
pointer
;
color
:
#666
;
width
:
150px
;
text-align
:
right
;}
...
...
@@ -329,7 +329,6 @@ li.am-comment{ width:100%}
.iteminfo_mktprice
{
padding-top
:
10px
;}
.iteminfo_parameter
{
padding-left
:
50px
;}
.tb-detail-hd
,
.tb-detail-price
{
text-align
:
left
;}
.tb-detail-price
.items
{
margin-left
:
0px
;}
.tb-detail-hd
h1
{
font-size
:
16px
;}
.match
{
margin
:
0px
auto
;
max-width
:
1000px
;
padding-top
:
20px
;
background
:
#fff
;}
...
...
@@ -375,13 +374,13 @@ li.am-comment{ width:100%}
/*价格*/
.tb-detail-hd
h1
{
font-size
:
18px
;}
.tb-detail-price
{
height
:
75px
;
padding
-top
:
10px
;
}
.tb-detail-price
{
height
:
75px
;
padding
:
10px
;
}
/*.tb-detail-price{background: #F7F7F7 url(data:image/png;base64,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); }*/
.tb-detail-price
{
background
:
#fcf1e3
url(../images/goods_meta_bg.png)
;
background-size
:
cover
;
-moz-background-size
:
cover
;
background-repeat
:
no-repeat
;
}
.tb-detail-price
.items
{
display
:
block
;
margin
:
0px
10px
;}
.tb-detail-price
.items
{
display
:
block
;
margin
-left
:
0
!important
;}
.tb-detail-price
.items
dt
{
width
:
70px
;
float
:
left
;
text-align
:
left
;}
.sys_item_price
{
font-size
:
24px
;
font-weight
:
bold
;
line-height
:
16px
;}
.sys_item_mktprice
{
font-size
:
14px
;}
.sys_item_mktprice
{
font-size
:
14px
;}
/*规格*/
...
...
public/static/plugins/css/newuserreduction/admin.css
0 → 100755
浏览文件 @
c3e284f6
/**
* 首页
*/
.newuserreduction-content
.items
{
margin
:
10px
0
20px
0
;
border-bottom
:
1px
dashed
#f1f1f1
;
padding-bottom
:
20px
;
}
.newuserreduction-content
.edit-submit
{
margin-bottom
:
20px
;
}
\ No newline at end of file
public/static/upload/images/plugins_newuserreduction/2019/03/25/1553483752670109.jpg
0 → 100644
浏览文件 @
c3e284f6
3.5 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录