>{$jz}变量可以输出所有内容
内容页也可以使用{$type}调用栏目所有内容的哦~
~~~
商品标题:{$jz['title']}
当前位置:{$positions}
商品SEO标题:{$jz['seo_title']}
商品关键词:{$jz['keywords']}
商品点击量:{$jz['hits']} 自增操作{fun incrData('product',$jz['id'],'hits')}
商品主图:{$jz['litpic']}
商品价格:{$jz['price']}
商品库存:{$jz['stock_num']}
商品简介:{$jz['description']}
商品内容:{$jz['body']}
商品上传管理员:{fun adminInfo($jz['userid'],'name')}
商品更新时间:{fun date('Y-m-d',$jz['addtime'])}
其他字段内容统一输出:{$jz['字段标识']} 如:{$jz['dianhua']}
#自定义当前位置:【不要求完全掌握,知道可以遍历输出面包屑导航即可】
{loop $position_data as $v}
{php echo '<a href="'.$v['url'].'">'.$v['classname'].'</a>' /}
{/loop}
~~~
## 商品图集
~~~
{php $pictures = explode('||',$jz['pictures']) /}
{foreach $pictures as $v}{if($v!='')}
图片链接:{$v}
{/if}
{/foreach}
~~~
## 商品属性
~~~
{php $product_fields = get_fields_show($jz['tid'],$type['molds']) /}
#也可以直接放进foreach里面,如{foreach get_fields_show($jz['tid'],$type['molds']) as $v}
{foreach $product_fields as $v}
属性名:{$v['fieldname']}
{if($v['fieldtype']==7)}
#单选
输出单选值:{fun get_key_field_select($jz[$v['field']],$type['molds'],$v['field'])}
{else if($v['fieldtype']==8)}
#多选
输出多选值,并用空格分隔:{fun implode(' ',get_key_field_select($jz[$v['field']],$type['molds'],$v['field']))}
{else}
#默认值
输出原值:{$jz[$v['field']]}
{/if}
{/foreach}
~~~
## 点评/星星数
> 五颗星为满分,评分数为总星数/投票数,点了星星并提交评论才算评分成功
~~~
<div class="rating">
#获取当前商品的点评数据
{php $comment = show_comment($jz['tid'],$jz['id']) /}
#判断是否有评论
#获取星星数
{php $star_num = $comment['average'] /}
#判断是否有评论,如果没有则返回false
{if($comment['data'])}
{for $i=1;$i<=$star_num;$i++}
<!--输出满星-->
<img src="assets/img/star.svg">
{/for}
{if(round($star_num)!=$star_num)}
<!--输出半星-->
<img src="assets/img/star-half-empty.svg">
{/if}
{if($star_num<5)}
{for $i=1;$i<=(5-$star_num);$i++}
<!--输出空星-->
<img src="assets/img/star-empty.svg">
{/for}
{/if}
#星星数:{$star_num}
#投票数:{$comment['count']}
{$star_num} - {$comment['count']} 票
{else}
#输出5个空星
<img src="assets/img/star-empty.svg"><img src="assets/img/star-empty.svg"><img src="assets/img/star-empty.svg"><img src="assets/img/star-empty.svg"><img src="assets/img/star-empty.svg">
0 - 0 票
{/if}
</div>
~~~
## 加入购物车
~~~
<button onclick="addcart({$type['id']},{$jz['id']},1)" class="btn btn-primary" type="button"><i class="icon-basket"></i>加入购物车</button>
~~~
## 加入购物车JS
```
function addcart(tid,id,num){
$.ajax({
url:"{fun U('user/addcart')}",//请求的url地址
dataType:"json",//返回格式为json
async:true,//请求是否异步,默认为异步,这也是ajax重要特性
data:{tid:tid,id:id,num:num,ajax:1},//参数值
type:"POST",//请求方式
beforeSend:function(){
//请求前的处理
},
success:function(r){
if(r.code==0){
window.location.href=r.url;
}else{
alert(r.msg);
}
},
complete:function(){
//请求完成的处理
},
error:function(){
//请求出错处理
alert('网络错误');
}
})
}
```
## 相关商品
~~~
当前模块标识[表名]:{$type['molds']}
当前商品ID:{$jz['id']}
{loop table="$type['molds']" notin="id|$jz['id']" limit="3" as="v"}
notin:表示除当前ID外的产品
商品标题:{$v['title']}
商品链接:{$v['url']}
商品SEO标题:{$v['seo_title']}
商品关键词:{$v['keywords']}
商品点击量:{$v['hits']}
商品主图:{$v['litpic']}
商品价格:{$v['price']}
商品库存:{$v['stock_num']}
商品简介:{$v['description']}
商品内容:{$v['body']}
商品上传管理员:{fun adminInfo($v['userid'],'name')}
商品更新时间:{fun date('Y-m-d',$v['addtime'])}
{/loop}
~~~
## 上一个
~~~
#判断是否有上一个
{if($aprev)}
上一个链接:{$aprev['url']}
上一个标题:{$aprev['title']}
{else}
#如果没有上一个,则输出这里的内容
{/if}
~~~
## 下一个
~~~
#判断是否有下一个
{if($anext)}
下一个的链接:{$anext['url']}
下一个的标题:{$anext['title']}
{else}
#如果没有下一个,则输出这里的内容
{/if}
~~~
## 点赞
~~~
#判断是否点赞
{if(checkLikes($type['id'],$jz['id']))}
<span style="color:#f00;cursor:pointer;" onclick="likes({$type['id']},{$jz['id']})" class="icon-like">已点赞</span>
{else}
<span style="color:gray;cursor:pointer;" onclick="likes({$type['id']},{$jz['id']})" class="icon-like">点赞</span>
{/if}
~~~
## 点赞JS
```
function likes(tid,id){
$.ajax({
url:"{fun U('user/likesAction')}",//请求的url地址
dataType:"json",//返回格式为json
async:true,//请求是否异步,默认为异步,这也是ajax重要特性
data:{tid:tid,id:id,ajax:1},//参数值
type:"POST",//请求方式
beforeSend:function(){
//请求前的处理
},
success:function(r){
if(r.code==0){
alert(r.msg);
window.location.reload();
}else{
alert(r.msg);
}
},
complete:function(){
//请求完成的处理
},
error:function(){
//请求出错处理
alert('网络错误');
}
})
}
```
## 收藏
~~~
#判断是否已经收藏
{if(checkCollect($type['id'],$jz['id']))}
<span style="color:#f00;cursor:pointer;" onclick="collect({$type['id']},{$jz['id']})">已收藏</span>
{else}
<span style="color:gray;cursor:pointer;" onclick="collect({$type['id']},{$jz['id']})">收藏</span>
{/if}
~~~
#收藏JS
```
function collect(tid,id){
$.ajax({
url:"{fun U('user/collectAction')}",//请求的url地址
dataType:"json",//返回格式为json
async:true,//请求是否异步,默认为异步,这也是ajax重要特性
data:{tid:tid,id:id,ajax:1},//参数值
type:"POST",//请求方式
beforeSend:function(){
//请求前的处理
},
success:function(r){
if(r.code==0){
alert(r.msg);
window.location.reload();
}else{
alert(r.msg);
}
},
complete:function(){
//请求完成的处理
},
error:function(){
//请求出错处理
alert('网络错误');
}
})
}
```
- 引言
- 条款
- 开始使用
- 模板标签
- 公共配置
- 系统配置
- 自定义配置
- 网站栏目
- 全局栏目属性
- 导航栏相关
- 当前栏目下的直系下级
- 当前栏目下的直系上级
- 栏目详情页
- 栏目列表页
- 栏目分页
- 输出三级及三级以上栏目
- 当前位置面包屑
- 获取当前栏目的顶级栏目
- 直播讲解栏目相关
- 文章详情页
- 基本内容
- 点赞
- 收藏
- 相关文章
- 输出新增字段
- 商品详情页
- 基本内容
- 输出新增字段
- 商品图集
- 点赞
- 收藏
- *点评星星
- 加入购物车
- *评论
- 相关商品
- 自定义字段
- 原样输出
- 单选字段
- 多选字段
- loop标签
- 通用说明
- loop分页
- 案例说明
- like使用
- 怎么判断loop没有数据
- limit使用
- day参数
- table缺省参数
- 单选多选相关
- 单选字段输出
- 多选字段输出
- 特殊输出
- 输出换行
- 替换字符串
- 输出被解析的HTML原句
- 截取字符串
- 内容body去除HTML
- 分割字符输出
- 人性化时间显示
- 搜索功能
- 单模块搜索
- 多模块搜索
- 搜索扩展
- 搜索结果列表页
- 会员模块
- 判断是否登录
- 判断是否评论
- 计算评论数
- 如果判断会员组是否权限
- 如何输出分组信息
- 如何输出所有用户分组
- 如何输出所有会员
- 输出某个会员发布的内容
- 查询一个用户的所有信息
- 输出我的粉丝列表
- 输出我的关注列表
- 获取粉丝数
- 获取关注数
- 判断是否关注
- 关注与取消关注链接
- 判断会员是否购买该商品
- foreach标签
- for标签
- fun标签
- php标签
- 不解析标签
- if..else..标签
- screen筛选标签
- 客户端判断
- 轮播图
- 友情链接
- 自定义图集输出
- Tags标签调用及使用说明
- 网站留言调用
- 自定义单页
- 各种统计
- 各种计数显示数
- 文章归档内容归档
- 系统架构
- 高级功能
- ajax数据交互
- ajax在栏目页的应用
- ajax在screen筛选中的应用
- screen多选筛选
- Message留言表单
- 万能表单
- 多语言支持
- 系统高级配置说明
- 网站动态链接
- 邮件发送
- 自定义路由配置
- 插件开发
- 控制器方法覆盖(cover)[简单]
- 控制器方法钩子(hook)[复杂]
- 制成后台安装插件
- 微信小程序
- 开始起步
- 小程序开发
- API访问接口数据
- 轮播图(幻灯片)
- 访问栏目列表
- 详情页查询
- 栏目详情查询
- 留言接口
- 附录
- 时间
- 富文本编辑器导航
- 伪静态配置
- 二维码生成
- 常见问题
- 静态生成HTML页面失败问题
- 为什么默认模板打开首页很慢,而打开后台却很快?
- 如何判断首页、栏目页、内容页、单页
- 视频教程
- 版本更新
- 宝塔一键部署