首页显示每个栏目的文章然后smarty输出的问题

WormJan 2010-07-19 11:57:57
栏目枚举出来了,查询栏目的文章也正确。smarty输出有2个问题:
1、本来属于1和2栏目里的文章,结果所有栏目里都显示。
2、输出结果只有第1个字符。

整了一上午终于整出内容来了。可是。。。。先上代码:
php的:

$db=new mysql(DB_HOST,DB_USER,DB_PW,DB_NAME,"conn","gbk");
$SQL="select catid,fid,catName,url from gen_category";
$rs=$db->query($SQL);
$rows=mysql_num_rows($rs);
$i=0;
while($row = $db->fetch_array($rs))
{
$arrAll[]=$row;
if ($row[fid]==0)
{
$arr[]=$row;
}

$SQL="select ctitle,ccontent from gen_info where cid=".$arrAll["$i"][0];
echo $SQL;
$i=$i+1;
$rs1=mysql_query($SQL);
while($row1 = mysql_fetch_array($rs1))
{
echo $row1['ctitle']."<br>";
$arrArticle=$row1;
}
$tpl->assign('indexContent',$arrArticle);
}
$tpl->assign('Variable',$arr);
$tpl->display('index.html');


html的:

<div id="main">
<div id="main_left">

</div>
<div id="main_right">
<{section name=lp loop=$Variable }>
<div id="cat">
<div id="catTitle">
<a href="<{$Variable[lp].url}>"><{$Variable[lp].catName}></a>
</div>
<{section name=lp1 loop=$indexContent}>
<{$indexContent[lp1].ctitle}><br>
<{/section}>
</div>
<{/section}>

</div>
</div>


麻烦帮我看一下。多谢了。
...全文
78 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
WormJan 2010-07-19
那个栏目显示正确。栏目标题也好还是个数也好,都正常。
就是在每个栏目下显示这个栏目的文章的时候,出了问题。
我现在的数据库中,就是a栏目有一条数据1,b栏目有一条数据2
但是显示出来却是 数据1和2在每个栏目中都显示了。
我觉得很可能是
$tpl->assign('indexContent',$arrArticle); //显示文章

$tpl->assign('Variable',$arr); //显示栏目
用法不对。但是不知道该怎么修改。

那个数据结构,具体怎么输出呢
回复
PIGer920 2010-07-19
$tpl->assign('indexContent',$arrArticle);这句有问题 不管循环多少次 最终只有一个值 所以你所有的分类文章都是一样的 并且是最后一个分类的文章
你的数据结构应该类似这样
$yourarray1[类别id]=$yourclass
$yourclass->title=类别标题
$yourclass->indexContent=文章内容

回复
WormJan 2010-07-19
图片的地址是
http://dd.a.5d6d.com/userdirs/5/5/hackpro/attachments/month_1007/1007191219a2907cbee041bfc1.jpg
回复
WormJan 2010-07-19
回楼上:
嗯。那个实例化的类我记下了。下次重新实例一个。
我想得到的效果是:
比如我现在有4个栏目a b c d,每个栏目里分别有一篇文章1 2 3 4,也就是说,在数据库里现在a栏目有一篇文章1,b栏目有一篇文章2,c栏目有一篇文章3,d栏目。。。。。。

我想在首页显示出这4个栏目,并且栏目a里显示文章1,栏目b里显示文章2,栏目c里显示文章3.。。。。。。。

就是这个意思。
回复
PIGer920 2010-07-19
[Quote=引用 4 楼 superfans98 的回复:]
$db->query 是用的一个类。
mysql_query 用这个的之前,我用$db->query发现前一个查询被中断了。然后就用了这个。可能我哪里弄错了。然后就没再用那个类。直接用了这个。

不过数据库查询结果都正常。

各位大哥,麻烦帮我改一下代码吧。我实在弄不出来了。
[/Quote]
这中做法不好
$db=new mysql()
在这次db链接的其中还要链接的话可以声明$db2=new mysql()

$tpl->assign('indexContent',$arrArticle);这句话在循环里面 最后你得到的是最后一个值 你是这样的需求吗?

另外你的图看不见
回复
WormJan 2010-07-19

图来了。
回复
WormJan 2010-07-19
在while外赋值也是一样的。一会我上图。
回复
WormJan 2010-07-19

$db->query 是用的一个类。
mysql_query 用这个的之前,我用$db->query发现前一个查询被中断了。然后就用了这个。可能我哪里弄错了。然后就没再用那个类。直接用了这个。

不过数据库查询结果都正常。

各位大哥,麻烦帮我改一下代码吧。我实在弄不出来了。
回复
PIGer920 2010-07-19
你怎么一会$db->query 一会mysql_query的?
回复
床上等您 2010-07-19
逻辑有点问题。

你乍么在 while 循环里 赋值的呢???
最好在 while 外赋值吧。
回复
WormJan 2010-07-19
小弟新手,正式开始学习php才几天的时间。高手见了这代码不要生气。
回复
WormJan 2010-07-19
唉,我还是没能解决。已经整整一天了。
smarty手册关于section这一节也看过了。尝试了其它的几个方法。虽然有一点改观,例如不会把所有文章显示在所有栏目里了,但是还没解决。
不知道哪位可以直接在我代码的基础上修改一下。可以不用嵌套section。
回复
WormJan 2010-07-19
谢谢。我现在测试。
回复
PIGer920 2010-07-19

$db=new mysql(DB_HOST,DB_USER,DB_PW,DB_NAME,"conn","gbk");
$db2=new mysql(DB_HOST,DB_USER,DB_PW,DB_NAME,"conn","gbk");
$SQL="select catid,fid,catName,url from gen_category";
$rs=$db->query($SQL);
$i=0;
$myarray = array();
while($row = $db->fetch_array($rs))
{
$myclass = new stdClass;
if ($row[fid]==0){
$myclass->catName = $row["catName"];//类别title
$myclass->url = $row["url"];//类别url
}else{
continue;
}

$SQL="select ctitle,ccontent from gen_info where cid=".$row["catid"];
$rs1=$db2->query($SQL);
while($row1 = mysql_fetch_array($rs1))
{

$myclass->ccontent = $row1["ccontent"];//内容
}
$myarray[$row["catid"]]=$myclass;
}
$tpl->assign('myarray',$myarray);
$tpl->display('index.html');



/************************/


<div id="main">
<div id="main_left">

</div>
<div id="main_right">

<{foreach from=$myarray item=$myclass}>
<div id="cat">
<div id="catTitle">
<a href="<{$myclass->url}>"><{$myclass->catName}></a>
</div>

<{$myclass->ccontent}><br>

</div>
<{/foreach}>

</div>
</div>



也许错误很多 你将就一下
回复
PIGer920 2010-07-19
上面最后错了 是
$tpl->assign('myarray',$myarray);
$tpl->display('index.html');
回复
PIGer920 2010-07-19

$db=new mysql(DB_HOST,DB_USER,DB_PW,DB_NAME,"conn","gbk");
$db2=new mysql(DB_HOST,DB_USER,DB_PW,DB_NAME,"conn","gbk");
$SQL="select catid,fid,catName,url from gen_category";
$rs=$db->query($SQL);
$i=0;
$myarray = array();
while($row = $db->fetch_array($rs))
{
$myclass = new stdClass;
if ($row[fid]==0){
$myclass->catName = $row["catName"];//类别title
}else{
continue;
}

$SQL="select ctitle,ccontent from gen_info where cid=".$row["catid"];
$rs1=$db2->query($SQL);
while($row1 = mysql_fetch_array($rs1))
{

$myclass->catName = $row1["ccontent"];//内容
}
$myarray[$row["catid"]]=$myclass;
}
$tpl->assign('Variable',$arr);
$tpl->display('index.html');

回复
WormJan 2010-07-19
5555555,帮我搞搞吧。我刚学不几天。网上也找了。
回复
PIGer920 2010-07-19
代码不想写了 花时间 还得测试
就是在循环内每次都实例一个新class,取出你要的值 赋值给class的成员变量,在每次循环的最后 把这个类加到数组里,此数组在循环外声明
大体就是这思路。。。
回复
WormJan 2010-07-19
[Quote=引用 10 楼 piger920 的回复:]

你的数据结构应该类似这样
$yourarray1[类别id]=$yourclass
$yourclass->title=类别标题
$yourclass->indexContent=文章内容
[/Quote]
对,就是这样,显示所有栏目,并且每个栏目下要显示这个栏目的文章。
现在是,无法正常显示栏目下的文章,表现为文章串栏目了,本来属于a栏目的,结果所有栏目都有了。
还有就是,显示出来的文章标题只显示第1个字符。

这代码咋改呢。。
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告