|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
niekas Smarty Rookie
Joined: 30 Jan 2004 Posts: 10
|
Posted: Thu May 06, 2004 3:54 am Post subject: PLUGIN: smarty textblock paginate |
|
|
This is my first smarty plugin that i've written while working on my mini CMS.
its very effective and simple for spliting big article into smaller chunks and creating navigation menu between them :
Code: | <?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: block.paginate.php
* Type: block
* Name: paginate
* Purpose: paginate content
* -------------------------------------------------------------
*/
function smarty_block_paginate($params, $content, &$this)
{
if (is_null($content)) {
return;
}
extract($params);
if (!isset($page_name)) $page_name='page';
if (!isset($split_name)) $split_name='<NEWPAGE>';
if (isset($get_params[$page_name])) $current_page=$get_params[$page_name];
$Pages = explode( "$split_name", $content );
$TotalPages = sizeof( $Pages );
if ($TotalPages== 1)
{
return $content;
}
elseif($TotalPages>1)
{
if (!$current_page) $current_page = 1;
foreach ($get_params as $key => $value)
{
if ($key != "$page_name")
{
$link_params.="$key=$value&";
}
}
$linkage="<br>";
$i=1;
while ($i <= $TotalPages)
{
$linkage.=($i==$current_page)?"[<b>$i</b>]":"<a href='$script?".$link_params.$page_name."=".$i."'>$i</a>";
$i++;
}
return $Pages[$current_page-1].$linkage;
}
else
{
return;
}
}
?> |
Usage:
PHP PART:
$smarty->assign('myarticle','first page contents<NEWPAGE>second page contents <NEWPAGE>ETC');
TEMPLATE:
{paginate script_name="$SCRIPT_NAME" get_params=$smarty.get} $myarticle {/paginate}
* $SCRIPT_NAME & $smarty.get are required in order to create links.
* $split_name is optional parameter: defines the string separator used in this plugin to split article in smaller chunks (default -> "<NEWPAGE>")
*$page_name - optional parameter: how do you want your pages to be called (default -> "page")
If you want to split your article using <LDFJSLDS> instead of <NEWPAGE> and want for pagination to use "row" instead of default "page" - then use it as follows:
{paginate script_name="$SCRIPT_NAME" get_params=$smarty.get split_name="<LDFJSLDS>" page_name="row"}
first page content<LDFJSLDS>second page content <LDFJSLDS> third page content and so on
{/paginate}
i'm using it here:
http://www.freedomlist.com/info.php?pid=15
it will keep GET variables intact
for example if i link to the same article with some extra variables
http://www.freedomlist.com/info.php?pid=15&smarty=is&great=forsure
it will preserve them.
i guess could be improved to give a choice of navigation menus
1) << <> >>
2) (first) next [current] previous (last)
3) numeric (as is now)
4) something else...
feedback appreciated |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|