2013-12-16 11 views
0

Я пытаюсь добавить простую разбивку на страницы в галерею изображений, но я дошел до точки, где я не получаю никаких сообщений об ошибках, и она все еще не работает. Я не знаю, где искать ошибку. Мой код:php gallery gallery pagination

<?php 
include 'core/init.php'; 
ini_set('display_errors', 'On'); // aan of uit 
error_reporting(E_ALL); 
?> 
<body> 
<div id="wrap"> 
<div id="header"> 
<h1>Rob Cnossen</h1> 
</div> 
<div id="titel"> 
<?php 
if (isset($_GET['album_id'])) { 
$album_id = $_GET['album_id']; 
$album_data = $albums->album_data($album_id, 'name', 'description'); 

echo '<h2>', $album_data['name'], '</h2>'; 

$albums = $albums->get_albums(); 
$images = $images->get_images($album_id); 
} 
?> 
</div> 
<div id="sidebarleft"> 
<?php 
if (empty($images)) { 
echo 'Er zijn geen foto\'s in dit album'; 
} else { 
foreach ($albums as $album) { 
foreach ($images as $image) { 
    ?><div id="fotoos"><?php 
     if ($image["album"] === $album["id"]) 
echo'<a href="view_album.php?album_id=', $album["id"],'&image_id=uploads/', $image["album"], '/', $image["img_name"],'"><img src="uploads/thumbs/', $image["album"], '/', $image["img_name"],'" title="" /></a><div id="kruisje"><a href="delete_image.php?image_id=', $image["id"],'">_|</div></a>'; 
       ?></div><?php     
}   
} 
} 
?> 
<div id="pagination"> 
<?php 
$count_query = $db->prepare('SELECT * FROM images where album_id= ?'); 
$count_query->bindValue(1, $album_id); 
try{ 
$count_query->execute(); 
}catch (PDOException $e){ 
die($e->getMessage()); 
} 
$count = $count_query->fetchColumn(); 

if(isset($_GET['page'])){ 
$page = preg_replace("#[^0-9]#,",$_GET['page']); 
}else{ 
$page = 1; 
} 
$limit = 2; 
$lastPage = ceil($count/$limit); 

if($page<1){ 
$page = 1; 
}elseif($page>$lastPage){ 
$page = $lastPage; 
} 
$offset = ($page-1)*$limit; 
$query = $db->prepare('SELECT image_id FROM images WHERE album_id= ? ORDER BY image_id DESC 
LIMIT ?,?'); 
$query->bindValue(1, $album_id); 
$query->bindParam(2, $offset, PDO::PARAM_INT); 
$query->bindParam(3, $limit, PDO::PARAM_INT); 

try{ 
$query->execute(); 
}catch (PDOException $e){ 
die($e->getMessage()); 
} 

if($lastPage !=1){ 

if($page != $lastPage){ 
$next = $page + 1; 
$pagination='<a href="'. $_SERVER['REQUEST_URI'] .'?page='.$next.'">Volgende</a>'; 
} 
if($page != $lastPage){ 
$prev = $page - 1; 
$pagination.='<a href="'. $_SERVER['REQUEST_URI'] .'?page='.$prev.'">Vorige</a>'; 
} 
} 
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {     
    echo $row['image_id'];//This echoes out two image id's, at the moment that is number 75 and 73 
} 

echo $pagination; 
?> 
</div> 
</div> 
</div> 
</body> 

Функция get_image;

public function get_images($album_id) { 
$images = array(); 

$count_query = $this->db->prepare("SELECT `image_id`, `image_name`, `album_id`, `timestamp`, `ext` FROM `images` WHERE `album_id`=? ORDER BY `timestamp` DESC"); 

$count_query->bindValue(1, $album_id); 

try{ 
$count_query->execute(); 

while ($images_row = $count_query->fetch(PDO::FETCH_ASSOC)) {  
    $images[] = array(
    'id' => $images_row['image_id'], 
    'img_name' => $images_row['image_name'], 
    'album' => $images_row['album_id'], 
    'timestamp' => $images_row['timestamp'], 
    'ext' => $images_row['ext'] 
    ); 
} 
return $images; 
}catch(PDOException $e){ 
die($e->getMessage()); 
} 
} 

Я думаю, что есть что-то неправильное в переменной $ постраничной, но я не знаю, what.I получил семь изображений в этом альбоме и $ предел стоит на 2, до сих пор все семь изображений показывает вверх. И если я нажимаю ссылку для разбивки на страницы, url показывает мне, что я нажал ссылку ссылки на страницы, но это все. Если я нажимаю, например, время vife на следующей или предыдущей ссылке, url может показать это; http://www.robcnossen.nl/view_album.php?album_id=8?page=2?page=2?page=0?page=2?page=0

Сайт http://www.robcnossen.nl/view_album.php?album_id=8

Я надеюсь, что вы можете увидеть, что вызывает проблему. 0 ...

+0

Нет ничего особенного в отношении разбиения на страницы изображений - это точно так же, как и с любыми другими типами данных. Ans есть много обучающих руководств по .NET. –

+0

В этой строке '$ images = $ images-> get_images ($ album_id);', Где вы создали объект '$ images'? – JazyK

+0

Это включено через core/init.php. Я редактирую вопрос, где теперь можно увидеть код функции get_image. – Robske

ответ

0

Если бы я был вами, я бы либо загрузил рабочее решение из сети и адаптировал его к вашей конкретной ситуации, либо реорганизовал все это, принимая во внимание некоторые SoC (Разделение проблем).

  • Отдельные ваши проблемы, выйти из логики из презентации
  • Отделить нумерация страниц логики от остальные. Разбивка должна только знать, самый большие 4 вещи, чтобы показать его связь
    1. целевого URL: ссылкам нужна гомогенная схема URL-адреса, только в urlpageNum изменятся
    2. сколько ссылок должны показать (вероятно массив pageNum с, содержащих переменную часть)
    3. [необязательный] текущий ID просмотра, вероятно, чтобы размыть страницу
    4. [необязательный] логика first/last, а за prev/next
  • Помогите себе очистить свой код, а также инкапсулировать некоторые функции. Например:

    function html_a($href, $content) { 
        return '<a href="'.$href.'">'.$content.'</a>'; 
    } 
    function pag_href($url, $id) { 
        return sprintf($url,$id);// url: host/target.php?pageNum=%s&someOtherstuff... 
    } 
    // usage inside loop 
    echo html_a(pag_href($url,$id),$pageNum); 
    // if you do this right, your pagination code can become reusable 
    
  • использовать некоторые функции mysql в ваших интересах. Вы можете ограничить количество результатов с LIMIT установите первый элемент страницы с OFFSET, и до сих пор получить общее количество числа строк с SQL_CALC_FOUND_ROWS

    // This way is clearer for me 
    $q = 'SELECT SQL_CALC_FOUND_ROWS image_id FROM images WHERE album_id=? ORDER BY image_id DESC LIMIT ? OFFSET ?' 
    // after executing your query you may now use pdo's foundRows 
    $totalNumEntries = $pdo->foundRows(); 
    // get number of pages with pageSize 
    $totalNumPages = (int)ceil($totalNumEntries/$yourPageSize); 
    

в целом, пытаются практиковать некоторые инкапсуляция/разделение задач, сделать некоторое планирование вперед, и вы не будете иметь дело с кодом, который даже не нужно отлаживать

Я сожалею, это не поможет с существующим кодом

+0

Спасибо за ваш ответ. Я всегда стараюсь учиться на этом. Он выглядит просто и полезно ... – Robske