分页(上一页|下一页)与Smarty [英] Pagination (Previous | Next) with Smarty
问题描述
我正在制作俱乐部的目录,例如,我想将每页限制为10个俱乐部,但是我无法将其包围.我已经尝试过SmartyPaginate,但是它不起作用(告诉开发人员,告诉我不要使用它.)
I'm making a catalogue of clubs and I'd like to limit every page to 10 clubs for example, but I can't wrap my head around it. I've tried SmartyPaginate, but it doesn't work (spoke to the developer, told me not to use it).
clubs.php
clubs.php
<?php
include('configs/pdo.inc.php');
include('libs/Smarty.class.php');
// create object
$smarty = new Smarty;
// Clubs ophalen
try {
$query = $oPDO->prepare("SELECT * FROM V_clubs WHERE Zichtbaar = 1 ORDER BY ID ASC LIMIT 10");
$query->execute();
$t = array();
foreach ($query as $row) {
$t[$row['ID']] = $row;
}
$smarty->assign('clubs', $t);
// Categorieen ophalen
$categorie = $oPDO->query("SELECT * FROM t_categorie ORDER BY D_categorie ASC");
$smarty->assign('categorie', $categorie);
// Provincies ophalen
$prov = $oPDO->query("SELECT * FROM t_provincies ORDER BY D_provincie ASC");
$smarty->assign('prov', $prov);
// Clubteller
$xclubs = $oPDO->prepare("SELECT ID from V_clubs");
$xclubs->execute();
} catch (PDOException $e) {
echo '<pre>';
echo 'Regelnummer: ' . $e->getLine() . '<br>';
echo 'Bestand: ' . $e->getFile() . '<br>';
echo 'Foutmelding: ' . $e->getMessage() . '<br>';
echo '</pre>';
}
// display it
$smarty->display('extends:layout.tpl|header.tpl|clubs.tpl|footer.tpl');
?>
clubs.tpl
clubs.tpl
{extends file="layout.tpl"}
{block name=title}Clubs{/block}
{block name=content}
<form name="clubsearch" method="POST" action="{$SCRIPT_NAME}">
<div class="span-6">
<p><label for="categorie">Categorie:</label><br />
<select id="categorie" name="categorie">
<option value="*">Alle disciplines</option>
{foreach $categorie as $c}
<option value="{$c.D_categorie}">{$c.D_categorienaam}</option>
{/foreach}
</select></p>
</div>
<div class="span-4">
<p><label for="provincie" name="provincie">Provincie:</label><br />
<select id="provincie" name="provincie">
<option value="*">Alle provincies</option>
{foreach $prov as $p}
<option value="{$p.D_provincie}">{$p.D_provincienaam}</option>
{/foreach}
</select><p>
</div>
<div class="span-4">
<p><label for="gemeente">Gemeente:</label><br />
<select id="gemeente" name="gemeente">
<option value="*">Alle gemeentes</option>
{foreach $clubs as $c}
<option value="{$c.Gemeente}">{$c.Gemeente}</option>
{/foreach}
</select></p>
</div>
<div class="span-2">
<input type="submit" name="zoekclub" id="zoekclub" value="Zoeken">
</div>
</form>
<hr>
{if isset($smarty.get.id)}
<div class="span-6 colborder">
<table>
<tr>
<td style="font-weight: bold;">Club</td>
</tr>
<tr>
<td>{$clubs[$smarty.get.id].Naam}</td>
</tr>
<tr>
<td style="font-weight: bold;">Categorie</td>
</tr>
<tr>
<td>{$clubs[$smarty.get.id].Categorie}</td>
</tr>
<tr>
<td style="font-weight: bold;">Provincie</td>
</tr>
<tr>
<td>{$clubs[$smarty.get.id].Provincie}</td>
</tr>
<tr>
<td style="font-weight: bold;">Gemeente</td>
</tr>
<tr>
<td>{$clubs[$smarty.get.id].Gemeente}</td>
</tr>
<tr>
<td style="font-weight: bold;">Website</td>
</tr>
<tr>
<td><a href="{$clubs[$smarty.get.id].Contact}" target="_blank">{$clubs[$smarty.get.id].Contact}</a></td>
</tr>
</table>
</div>
<div class="span-8 last">
<table>
<tr>
<td style="font-weight: bold;">Info</td>
</tr>
<tr>
<td>{$clubs[$smarty.get.id].Extra}</td>
</tr>
</table>
</div>
<div class="span-4 first"><p><a onClick="history.go(-1)"><< Terug</a></p></div>
{else}
<table>
<tr>
<th>Club</td>
<th>Categorie</td>
<th>Provincie</td>
<th>Gemeente</td>
</tr>
{foreach $clubs as $c}
<tr>
<td><a href="{$SCRIPT_NAME}?id={$c.ID}"><b>{$c.Naam}</b></a></td>
<td>{$c.Categorie}</td>
<td>{$c.Provincie}</td>
<td>{$c.Gemeente}</td>
</tr>
{/foreach}
</table>
{/if}
{/block}
我想获取下一个和上一个,并且仅显示X条记录.我该怎么办?
I'd like to get Next and Previous and show only X amount of records. How can I go about this ?
推荐答案
在当前TRY语句中,首先应该获得当前页面(假设来自查询字符串)
In your current TRY statement, before all you should get your current page (suppose from the query string)
$page = empty($_GET['page']) ? 1 : (int)$_GET['page'];
,然后定义要从数据库中获取的俱乐部
and then define the clubs to fetch from the DB
$start_from = $page == 1 ? 0 : (($page - 1) * 10 - 1);
$query = $oPDO->prepare("SELECT * FROM V_clubs WHERE Zichtbaar = 1 ORDER BY ID ASC LIMIT ".$start_from.", 10");
基本上,您从第1页的第0条记录中获得10条记录,从第2页的第9条记录中获得10条记录,等等.
Basically you are getting 10 records from 0th record for page 1, 10 records from 9th record for page 2, etc.
page 1 LIMIT 0,10
page 2 LIMIT 9,10
page 3 LIMIT 19,10
and caurse将链接PREV和NEXT放入smarty模板中.提示在第1页中隐藏PREV,在最后一页中隐藏NEXT
and of caurse put links PREV and NEXT in the smarty template. Hint hide PREV in page 1 and hide NEXT in the last page
<a href="your_url.php?page=$page-1">PREV</a>
<a href="your_url.php?page=$page+1">NEXT</a>
这篇关于分页(上一页|下一页)与Smarty的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!