目录
回复讨论(解决方案)
首页 后端开发 php教程 SMARTY 二次循环的请教

SMARTY 二次循环的请教

Jun 23, 2016 pm 01:52 PM
smarty 二次 循环

//所有版块@$row_fid = "SELECT * FROM `forum_forum` ORDER BY `displayorder` ASC";$stmt = $pdo->prepare($row_fid);$stmt->execute();$row_forum = $stmt->fetchAll(PDO::FETCH_ASSOC);	//主题分类	foreach ($row_forum as $key => $value) {		$fid = $value["fid"];		@$sql = "SELECT `typeid`,`name` FROM `forum_topic_type` WHERE `fid` = $fid";		$stmt = $pdo->prepare($sql);		$stmt->execute();		$row_type = $stmt->fetchAll(PDO::FETCH_ASSOC);	}		print_r($row_type);$smarty -> assign("all_forum",$row_forum);
登录后复制

代码是给各位看现在的逻辑 但没成功

学会SMARTY时间不长

有两张表
forum_forum 是讨论版块ID 主要是`name`, `fid`
forum_topic_type 是讨论版块的主题分类ID 主要是`typeid`, `name`, `fid`

本来
我是先把
forum_forum 列出所有版块,然后加到smarty的assign

成功在前台的所有版块列表中,显示出来

但想在版块名称的下方,把此讨论版块的旗下所有「主题分类」都循环出来,

但发现,这些东西(这张表forum_forum )已在前台循环了, 我无法取得fid 来循环 相关的主题分类,因为循环结果的ID已经在模板中才能取得

所以想了想...在smarty的assign之前,试试foreach一下有什么结果,

然后试试看能不能合并成同一个组数再assign,发觉有点不行

所以想请教一下各位前辈


己想过的解决方法

1. 合并多表查询,但是主题分类也不只一个...所以就放弃这方法

2. 做个smarty 插件,已试了,但是也是卡住了不能前进

其实SMARTY这卖二次循环问题已困扰很久,但好像不能再逃避,虚心请教,希望彻底了解这类问题

求指教!


回复讨论(解决方案)

另外也补充问个问题

我用SMARTY自己做 modifier.xxx.php 这类插件时,平时是常想顺利的

但为什么一用到数据库就完全不行?

我是用PDO的

因为没把$pdo这类句柄传入? 但是这种插件是由 模板直接调用,我根本就不能加入$pdo

我也试过加插件的function 内引入数据库文件,但也是表示数据库操作有误

请问有什么解决方案吗? 还是插件这部分根本不能操作数据库???

哪一步没成功?$row_type没值吗?

1.通过模板处理:类表 关联 子类表 得出结果集,在进行smarty的assign,模板循环2次 。
2.通过程序查询结果集处理:返回结果集,在程序组装成为字符串,直接assign传到模板。

//所有版块@$row_fid = "SELECT * FROM `forum_forum` ORDER BY `displayorder` ASC";$stmt = $pdo->prepare($row_fid);$stmt->execute();$row_forum = $stmt->fetchAll(PDO::FETCH_ASSOC);     //主题分类    foreach ($row_forum as $key => $value) {        $fid = $value["fid"];        @$sql = "SELECT `typeid`,`name` FROM `forum_topic_type` WHERE `fid` = $fid";        $stmt = $pdo->prepare($sql);        $stmt->execute();        $row_forum[$key]['list'] = $stmt->fetchAll(PDO::FETCH_ASSOC);    }        print_r($row_forum);$smarty -> assign("all_forum",$row_forum);
登录后复制


大哥,谢谢你
就这意思
太感谢了,学到了

果然是逻辑问题
以后看来能解决大部分的二次循环问题了

谢谢
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

FET币多久会迎来二次暴涨?预测最多上涨到多少? FET币多久会迎来二次暴涨?预测最多上涨到多少? Apr 14, 2024 am 09:16 AM

作为AI人工智能领域的龙头币种,FET币因其可观的投资回报率而备受关注,FET币是不仅是Fetch.ai平台使用定量的可分割代币,也是该平台智能合约和预言机的重要组成部分。随着牛市市场的的到来,FET币的价格持续攀升,但对于这样市场趋势投资者依旧不满足,想了解FET币多久会迎来二次暴涨?更想知道币圈分析师对FET币预测最多上涨到多少?根据圈内分析师预测来看,第二次暴涨在2025年,最高涨到8.15美元。接下来小编为大家详细说说。FET币多久会迎来二次暴涨?根据圈内分析师预测来看,FET币第二次暴

lambda表达式跳出循环 lambda表达式跳出循环 Feb 20, 2024 am 08:47 AM

lambda表达式跳出循环,需要具体代码示例在编程中,循环结构是经常使用的一种重要语法。然而,在特定的情况下,我们可能希望在循环体内满足某个条件时,跳出整个循环,而不是仅仅终止当前的循环迭代。在这个时候,lambda表达式的特性可以帮助我们实现跳出循环的目标。lambda表达式是一种匿名函数的声明方式,它可以在内部定义简单的函数逻辑。它与普通的函数声明不同,

Go语言中的循环和递归的比较研究 Go语言中的循环和递归的比较研究 Jun 01, 2023 am 09:23 AM

注:本文以Go语言的角度来比较研究循环和递归。在编写程序时,经常会遇到需要对一系列数据或操作进行重复处理的情况。为了实现这一点,我们需要使用循环或递归。循环和递归都是常用的处理方式,但在实际应用中,它们各有优缺点,因此在选择使用哪种方法时需要考虑实际情况。本文将对Go语言中的循环和递归进行比较研究。一、循环循环是一种重复执行某段代码的机制。Go语言中主要有三

PHP返回数组所有值,组成一个数组 PHP返回数组所有值,组成一个数组 Mar 21, 2024 am 09:06 AM

这篇文章将为大家详细讲解有关PHP返回数组所有值,组成一个数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用array_values()函数array_values()函数返回一个数组中所有值的数组。它不会保留原始数组的键。$array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values将是["bar","qux"]使用循环可以使用循环手动获取数组的所有值并将其添加到一个新

Java函数中递归调用有哪些替代方案? Java函数中递归调用有哪些替代方案? May 05, 2024 am 10:42 AM

用迭代替代Java函数中的递归调用在Java中,递归是一个强大的工具,用于解决各种问题。但是,在某些情况下,使用迭代可能是一个更好的选择,因为它更有效且不易出现堆栈溢出。以下是迭代的优点:效率更高,因为它不需要为每个递归调用创建新的栈帧。不容易发生堆栈溢出,因为堆栈空间使用受限制。替代递归调用的迭代方法:Java中有几种方法可以将递归函数转换为迭代函数。1.使用栈使用栈是将递归函数转换为迭代函数最简单的方法。栈是一种后入先出(LIFO)数据结构,类似于函数调用栈。publicintfa

Java Iterator 与 Iterable:迈入编写优雅代码的行列 Java Iterator 与 Iterable:迈入编写优雅代码的行列 Feb 19, 2024 pm 02:54 PM

Iterator接口Iterator接口是一个用于遍历集合的接口。它提供了几个方法,包括hasNext()、next()和remove()。hasNext()方法返回一个布尔值,指示集合中是否还有下一个元素。next()方法返回集合中的下一个元素,并将其从集合中删除。remove()方法从集合中删除当前元素。以下代码示例演示了如何使用Iterator接口来遍历集合:Listnames=Arrays.asList("John","Mary","Bob");Iterator

python中使用矢量化替换循环 python中使用矢量化替换循环 Apr 14, 2023 pm 07:07 PM

所有编程语言都离不开循环。因此,默认情况下,只要有重复操作,我们就会开始执行循环。但是当我们处理大量迭代(数百万/十亿行)时,使用循环是一种犯罪。您可能会被困几个小时,后来才意识到它行不通。这就是在python中实现矢量化变得非常关键的地方。什么是矢量化?矢量化是在数据集上实现(NumPy)数组操作的技术。在后台,它将操作一次性应用于数组或系列的所有元素(不同于一次操作一行的“for”循环)。接下来我们使用一些用例来演示什么是矢量化。求数字之和##使用循环importtimestart

如何处理PHP循环嵌套错误并生成相应的报错信息 如何处理PHP循环嵌套错误并生成相应的报错信息 Aug 07, 2023 pm 01:33 PM

如何处理PHP循环嵌套错误并生成相应的报错信息在开发中,我们经常会用到循环语句来处理重复的任务,比如遍历数组、处理数据库查询结果等。然而,在使用循环嵌套的过程中,有时候会遇到错误,如无限循环或者嵌套层数过多,这种问题会导致服务器性能下降甚至崩溃。为了更好地处理这类错误,并生成相应的报错信息,本文将介绍一些常见的处理方式,并给出相应的代码示例。一、使用计数器来

See all articles