typecho 归档页面太长如何分页呢? #511

Open
ihewro opened this Issue Oct 23, 2016 · 10 comments

Projects

None yet

3 participants

@ihewro
ihewro commented Oct 23, 2016 edited

typecho的归档页面,我写了一个自定义模板archive-time.php 里面用来显示文章条目。 如果文章条目太多如何分页呢?求大神告知

显示文章条目的代码我是这样写的:

 <?php
                    $this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives);
                    $year=0; $i=0; $j=0;
                    while($archives->next()):
                        $year_tmp = date('Y',$archives->created);
                        $y=$year;
                        if ($year != $year_tmp && $year > 0) $output .= '<div></div>';
                        if ($year != $year_tmp) {
                            $year = $year_tmp;
                            $output = '<h2 class="archive-year">'. $year .'</h2>';
                        }
                        $output .= '<li><a class="transition archive-iterm" href="'.$archives->permalink .'"><h3 class="archive-title">'. $archives->title .'</h3><p class="archive-date">'.date('F jS ',$archives->created).'</p></a></li>';
                    endwhile;

                    echo $output;
                ?>
@tutu612
tutu612 commented Oct 23, 2016

那个是在主题当中自定义吧

@ihewro
ihewro commented Oct 23, 2016

@tutu612 我就是写一个主题的。
index.php 官方文档支持直接分页的

我写了一个自定义模板,用来显示归档页面的。是这样写的

 <?php
                    $this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives);
                    $year=0; $i=0; $j=0;
                    while($archives->next()):
                        $year_tmp = date('Y',$archives->created);
                        $y=$year;
                        if ($year != $year_tmp && $year > 0) $output .= '<div></div>';
                        if ($year != $year_tmp) {
                            $year = $year_tmp;
                            $output = '<h2 class="archive-year">'. $year .'</h2>';
                        }
                        $output .= '<li><a class="transition archive-iterm" href="'.$archives->permalink .'"><h3 class="archive-title">'. $archives->title .'</h3><p class="archive-date">'.date('F jS ',$archives->created).'</p></a></li>';
                    endwhile;

                    echo $output;
                ?>

不知道如何分页?

@ihewro
ihewro commented Oct 23, 2016

这里面有一个$archives->next()不知道如何使用?

@tutu612
tutu612 commented Oct 23, 2016 edited

@ihewro ,Sorry,我是小白一个,没法回答你的问题,你的主题Leaf,页面的音乐播放器让我印象深刻。
我刚用上Typecho,也想尝试制作一个主题呢,不知道你是怎么学习这方面知识的,请教一下哈哈

@kokororin

这个没有办法,自己写逻辑吧,有个pageSize参数。

@ihewro
ihewro commented Oct 24, 2016

@tutu612 写主题找一些免费主题,然后参考官方文档不是很难,先写好框架,再把内容往里面填就可以了

@ihewro
ihewro commented Oct 24, 2016

@kokororin 谢谢

@ihewro
ihewro commented Oct 24, 2016

能不能写出具体的一点思路呢?

@kokororin
kokororin commented Oct 24, 2016 edited

看了下Widget_Contents_Post_Recent,只提供了一个pageSize参数,也就是每页显示多少条。但是没有提供页码参数,也就是Typecho_Db里的offset(),所以这方法行不通,除非你修改一下这个文件,添加一个offset参数,或者把这个方法移到你主题的functions.php里,稍微修改下,使用Typecho_Db::get()获得数据库实例,然后按他的逻辑进行查询就可以了,然后在你的自定义模板中调用这个函数,传入pagesize和当前页码,再进行循环输出.

当然如果你不熟悉php的话,直接前端也可以处理的,这个应该更简单。

@ihewro
ihewro commented Oct 24, 2016

@kokororin 恩,我去试试,非常感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment