|
|
|
| Доброго времени суток!
Возникла такая проблема:
Делаю сайт с шаблонами Smarty. Всё чудесно но не могу понять одну вещь.
Задача следующая: Используя шаблоны смарти нужно реализовать постраничную навигацию.
Но сама навигация работает не совсем правильно. Работает нормально только в том случае, если на одной странице выводить одну запись.
Дело в том что когда на страницу выводить больше чем одну запись, то на последней странице навигация не выводиться. Без смарти навигация работает чудесно.
И так, есть файлы:
config.php в котором производиться подключение к базе;
view_sect.php код которого ниже:
<?
include("../../config.php");
$smartyA2 = new Smarty;
$smartyA2->register_function("BODY", "getCatlist");
function getCatlist()
{
include("function/cat_list.php");
}
$smartyA2->display('TPL_BL_CAT');
?>
|
и cat_list.php
(не обращайте внимание на то что здесь логика и представление в перемешку, для чего смарти я знаю:))
<?php
include("../../config.php");
if (isset($_GET['id'])) {$id = $_GET['id']; }
if (!isset($id)) {$id = 1;}
/* Проверяем, является ли переменная числом */
if (!preg_match("|^[\d]+$|", $id)) {
$i_uri = 1;
}
$smartyA = new Smarty;
$smartyA->register_function("CAT_ID", "get_CatID");
$smartyA->register_function("TITLE", "get_CatTitle");
$smartyA->register_function("DESCRIPTION", "get_CatDescription");
$smartyA->register_function("KEYWORDS", "get_CatMeta_k");
$smartyA->register_function("TEXT", "get_CatText");
$smartyA->register_function("SECTION", "get_CatSect");
function get_CatID()
{
return $GLOBALS['id'];
}
function get_CatTitle()
{
$title = $myrow['title'];
$smarty = new Smarty;
$title = $smarty->display('cat_title:'.$GLOBALS['id']);
return $title;
}
function get_CatDescription()
{
$meta_d = $myrow['meta_d'];
$smarty = new Smarty;
$meta_d = $smarty->display('cat_meta_d:'.$GLOBALS['id']);
return $meta_d;
}
function get_CatMeta_k()
{
$meta_k = $myrow['meta_k'];
$smarty = new Smarty;
$meta_k = $smarty->display('cat_meta_k:'.$GLOBALS['id']);
return $meta_k;
}
function get_CatText()
{
$text = $myrow['text'];
$smarty = new Smarty;
$text = $smarty->display('cat_text:'.$GLOBALS['id']);
return $text;
}
function get_CatSect()
{
$title = $GLOBALS['sect_title'];
$smarty = new Smarty;
$title = $smarty->display('sect_title:'.$id);
return $title;
}
@$result2 = mysql_query("SELECT * FROM section", $pos_db);
if (@mysql_num_rows($result2) > 0)
{
$myrow2 = mysql_fetch_array($result2);
}
else
{
$not = 1;
}
if(!$result2)
{
unset($not);
return '';
}
if(isset($i_uri))
{
echo $pos_invalid_format_qwery;
}
if(isset($not) && $result2)
{
return '';
}
if($result2 && !isset($not))
{
$GLOBALS['sect_title'] = $myrow2['title'];
}
$result77 = mysql_query("SELECT str FROM options", $pos_db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую сторінку
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM categories WHERE sect='$id'");
if (!$result00)
{
$not = 1;
}
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// Определяем начало сообщений для текущей сторінки
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую сторінку
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
$num2 = $num;
$num4 = ($page * $num) - 1;
// Выбираем $num сообщений начиная с номера $start
/*----------------------------------------------------------------------*/
for($i = $start; $i <= $num4; $i++)
{
@$result = mysql_query("SELECT * FROM categories WHERE sect='$id' LIMIT $i, $num2", $pos_db);
if (@mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}
else
{
$not = 1;
}
if(!$result)
{
unset($not);
return '';
}
if(isset($not) && $result)
{
return '';
}
if($result && !isset($not))
{
$GLOBALS['id'] = $myrow['id'];
$smartyA->display('TPL_BL_CAT_LIST');
}
}
/*--------------------------------------------------------------*/
/* ПОСТРАНИЧНАЯ НАВИГАЦИЯ */
// Проверяем нужны ли стрелки назад
if ($page != 1){ $pervpage = '<a href=view_sect.php?id='.$id.'&page=1>Перша</a> | <a href=view_sect.php?id='.$id.'&page='. ($page - 1) .'>Попередня</a> | '; }
// Проверяем нужны ли стрелки вперед
if ($page != $total){ $nextpage = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 1) .'>Наступна</a> | <a href=view_sect.php?id='.$id.'&page=' .$total. '>Остання</a>'; }
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=view_sect.php?id='.$id.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=view_sect.php?id='.$id.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=view_sect.php?id='.$id.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=view_sect.php?id='.$id.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=view_sect.php?id='.$id.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 5 <= $total) $page5right = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=view_sect.php?id='.$id.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню если страниц больше одной
if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}
/* /// ПОСТРАНИЧНАЯ НАВИГАЦИЯ */
?>
|
Собственно работать надо именно над ним.
Подскажите пожалуйста, кто знает.;) | |
|
|
|
|
|
|
|
для: testreal@i.ua
(13.12.2010 в 16:23)
| | Зачем вам Смарти, если вы практически его не используете? | |
|
|
|
|
|
|
|
для: testreal@i.ua
(13.12.2010 в 16:23)
| | Шаблоны смерти - это костыли. Отбрось их, чтобы научиться ходить самостоятельно | |
|
|
|