ThinkCMF踩过的坑之循环嵌套

项目需求,新建一个奖杯表,在用户等级表中,指定奖杯个数,在循环展示用户等级的时候,根据等级设定的奖杯个数从第一个奖杯开始展现奖杯明细

$trophyList=M("trophy")->order("orderno")->select();

在controller里,先把奖杯的数据读取出来,并使用$this->assign("trophyList",$trophyList);将数据assign 到前台。

在前台循环读取数据时,外层循环使用的是<foreach></foreach>标签。代码如下:

<foreach name="lists" item="vo">

<td><if condition="$vo['film_message'] eq '1' "><span class="greenSpan">√</span><else /><span class="redSpan">×</span></if></td>
<td>


<if condition="$vo['trophy_num'] gt 0">

<volist name="trophyList" id="trophyList" offset="0" length="$vo['trophy_num']" empty="沒有獎盃">
<p>{$trophyList['trophy_name']} -- {$trophyList['trophy_code']}分</p>
</volist>

</if>
</td>
<td>{$vo['login_point']}</td>

</foreach>


如上:红色部分是原来的写法,这里出现错误的结果展示如下图:


因为第一条数据和第二条数据写的奖杯个数都是2,所以,第二条的展现数据应该跟第一条是一样的,显然,这个结果时错误的。

我们来分析上面红色部分的代码,

首先,我们可以先在volist标签上面使用<php>print_r($trophyList);</php>将数组数据打印一下看看,如下图:


显然,foreach第二轮循环的时候,volist需要循环的数据已经发生了变化,这时,我们分析下volist代码可以发现name="trophyList" id="trophyList" 在执行第一遍volist的时候,读取出来的数据在执行了offset="0" length="$vo['trophy_num']"之后,

数据显然是被截取了,因为name和id是一样的,所以被截取的数据又重新赋值给了trophyList,所以才导致数据丢失的问题。

将上面的代码做修改之后,把id的属性值改为v1,就成功避免了上面的问题,因为trophyList数据被截取赋值给了v1,原来的数据不会被重新赋值。

所以,正确的写法应该是:

<volist name="trophyList" id="v1" offset="0" length="$vo['trophy_num']" empty="沒有獎盃">
<p>{$v1['trophy_name']} -- {$v1['trophy_code']}分</p>
</volist>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
部署ThinkCMF需要以下步骤: 1. 下载ThinkCMF 从官网或Github下载最新版本的ThinkCMF,并解压到本地。 2. 配置环境 确保本地已经安装PHP、MySQL等环境,并且满足ThinkCMF的要求。可以通过运行phpinfo()函数来查看PHP的配置信息。 3. 创建数据库 在MySQL中创建一个新的数据库,并设置好用户名和密码等信息。 4. 配置数据库连接 打开ThinkCMF根目录下的config/database.php文件,将数据库连接信息填入对应的配置项中。 5. 配置伪静态 如果使用Apache服务器,需要开启mod_rewrite模块,并将根目录下的.htaccess文件重命名为.htaccess(注意去掉前面的“.”);如果使用Nginx服务器,需要在配置文件中添加伪静态规则。 6. 配置域名 将本地测试域名指向ThinkCMF根目录下的public目录。 7. 安装ThinkCMF 在浏览器中访问本地测试域名,进入ThinkCMF安装界面,并按照提示完成安装。 8. 配置站点信息 安装完成后,可以在后台管理界面中设置站点名称、LOGO、SEO等信息。 9. 部署到服务器 将本地的ThinkCMF代码上传到服务器,同步数据库和上传文件,并将配置信息修改为服务器的配置。 10. 配置服务器环境 确保服务器已经安装好PHP、MySQL等环境,并且满足ThinkCMF的要求。 11. 配置服务器域名 将服务器的域名指向ThinkCMF根目录下的public目录。 12. 配置服务器伪静态 根据服务器的具体配置情况,配置正确的伪静态规则。 13. 部署完成 访问服务器域名,如果能够正常访问ThinkCMF站点,则部署完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值