This topic created in 5448 days ago, the information mentioned may be changed or developed.
类别A:
类别B:
类别C:
类别....:
类别H:
每个类别下面有好多条文章....
现在的要求是输出所有类别的文章标题并分页显示(这些都已经完成)
另外一个见鬼的要求是...每个类别的第一篇文章前面需要有类别的名字(这些都可以从数据库获取到)
现在的困境是:
怎么实现第二个要求?
21 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
kojp Jun 13, 2011
给个思路,谢谢.
我的尴尬是...在循环里面....如果每篇文章都要求有类别名称,我就实现了(一开始就是这样的要求,后来要求改这那个见鬼的要求)....
我现在的思路只能是,根据每个分类的文章的篇数来决定神马时候出现分类名称...这样太复杂太难实现太累了都~~~~
对了程序是用PHP的.
|
 |
|
2
kojp Jun 13, 2011
和..SMARTY模板的....
|
 |
|
3
reus Jun 13, 2011
$showed_category = array(); foreach xxxx { if (!in_array($category_name, $showed_category)) { echo $category_name, xxxxxxxxx; $showed_category[] = $category_name; } } 是这个意思么? = =
|
 |
|
4
reus Jun 13, 2011
else { echo xxxxx; }
|
 |
|
5
darasion Jun 13, 2011
楼主颠三倒四的说话,晕了,我都,让我。...
|
 |
|
6
killall Jun 13, 2011
嗯,我承认我也晕了,而且是极晕
|
 |
|
8
reus Jun 13, 2011
就是把输出过的类别都记录下来 如果已经输出过了,就不输出了,否则就输出 这样就可以实现,只在第一个输出了
|
 |
|
9
kojp Jun 13, 2011
你明白了我....我也明白了你....
但是这个条件很难实现呀...!in_array($category_name, $showed_category)
|
 |
|
10
kojp Jun 13, 2011
[QUOTE]就是把输出过的类别都记录下来 如果已经输出过了,就不输出了,否则就输出 这样就可以实现,只在第一个输出了[/QUOTE] 明白..那我先前是误读了你的代码了..呵呵.我试试..这个思路很好~~~~谢谢.
|
 |
|
11
reus Jun 13, 2011
in_array就是个函数……判断一个元素在不在一个数组里面 你不是说类别名字可以从数据库得到么…… 哪里难实现了……
|
 |
|
12
CoX Jun 13, 2011
这要求很正常吧,就是分类显示文章主题吧
|
 |
|
13
kojp Jun 13, 2011
按REUS的方法在PHP里面的确是实现了...谢谢.
现在还得...跟万恶的SMARTY结合起来~~~~~
|
 |
|
14
kojp Jun 13, 2011
@ CoX不正常呀....至少对于我这么菜人来说不正常..呵呵.----------
|
 |
|
15
CoX Jun 13, 2011
最笨的方法,就是多查几次数据库,每个分类查一次数据库。 聪明一点的方法,查询的结果按分类排序,用一个临时变量保存当前分类;判断当前主题分类和临时变量保存数据是否一致,一致就忽略,不一致就输出,并保存新分类到临时变量。
|
 |
|
16
holystrike Jun 13, 2011 via iPhone
完整的需求还需要比较数组下一个元素的分类
|
 |
|
17
reus Jun 13, 2011
据说Twig比smarty好
|
 |
|
18
kojp Jun 13, 2011
好吧...谢谢各位.
折腾一两个小时终于搞定~~~~其中遇到一个数组排序的问题,没弄明白....后来就直接绕行了..估计跟某个函数有关.......帖上代码也许你们看得累.....不好意思
|
 |
|
19
kojp Jun 13, 2011
[code] $showed_category = array(); while($re1r = $db->getarray($re1s)) { $lid = $re1r['lid']; $lsre2s = $db->query("select * from {$prefix}_mag_ls where id='$lid'"); $lsre2r = $db->getarray($lsre2s); $re1r['lname'] = $lsre2r['cn_title']; $re1r['vol']=$vol; if(!in_array($lid,$showed_category)){ //echo $lid; $re1r['dddname']=1848; $showed_category[]=$lid; }else{ //echo 'ccc'; $re1r['dddname']=0; } $mag_list_array[] = smarrayall($re1r); }
[/code]
还是用的reus的思路....其实就是求一个标志位....用SMARTY根据那个标志位为决定显示分类名称还是不显示.
下面是前台页面. [code] <div> <!--{section name=loop loop=$mag_list}--> <!--{if $mag_list[loop].dddname==1848}--><div id="mag_list_l_name">¡ù<b><!--{$mag_list[loop].lname}--></b>¡ù</div><!--{/if}--> <div class="mag_list"> <dt><!--{$mag_list[loop].art_author}--></dt> <dt><!--{$mag_list[loop].art_name}--></dt> <dd><!--{$mag_list[loop].vol}--> <!--{$mag_list[loop].art_page}--></dd> ..................... </div> [/code] [/code]
|
 |
|
20
kojp Jun 13, 2011
谢谢亲们哦~~~~~~
见笑了,基本工不扎实,搞稍微大一点的项目就会累得半死~~~~~看来,还得继续加强基本工的练习~~尤其是逻辑方面的.
|
 |
|
21
CoX Jun 13, 2011
排序就是查询的时候 order by 一下就行了
|