Помощь в использовании theme_pager()

Главные вкладки

Аватар пользователя Detonator Detonator 16 сентября 2010 в 22:47

Добрые друпалеры, помогите неучу разобраться. Имеется модуль picasa и имеется такая вот такой вот стандартный шаблон модуля вывода содержимого альбомов:

<?php if ($teaser): ?>
<table>
  <tr>
    <td>
      <div align=center><?php print $thumbnail?></div>
      <?php if ($slideshow): ?>
        <div><small><?php print $slideshow?></small></div>
      <?php endif; ?>
        <div style="font-weight: bold; text-align: left;">Фотографий: <?php print $gphoto['numphotos']; ?></div>
    </td>
  </tr>
</table>
<?php endif;?>

<?php if ($page): ?>
    <?php if ($slideshow): ?>
      <div><?php print $slideshow?></div>
    <?php endif; ?>
    <?php foreach($photos as $photo) {
      print 
$photo;
       }
?>
<?php 
endif;?>

Таким образом видно, что вывод фотографий осуществляется "печатью" всего содержимого массива $photos
а их там бывает и 100 и 200 и 400 и больше штук и понятно что все это выводится на одной странице и это просто ужасно. Как сделать пагинацию например на 50 элементов на странице? Пытался читать про функцию theme_pager но что-то так ничего и не получилось...видимо читал не там. Кто-нибудь может кстати как что и куда вставить, чтобы заработала пагинация?

Комментарии

Аватар пользователя vgoodvin vgoodvin 16 сентября 2010 в 23:20
$count = 200; // Вот эту цифру надо вычислить. Это общее число элементов для пагинации. 200 это как пример.
$limit = 50;  // Поставить количество элементов на страницу по вкусу

global $pager_page_array, $pager_total, $pager_total_items;
$page = isset($_GET['page']) ? $_GET['page'] : '';
               
// Convert comma-separated $page to an array, used by other functions.
$pager_page_array = explode(',', $page);
       
// We calculate the total of pages as ceil(items / limit).
$pager_total_items[0] = $count;
$pager_total[0] = ceil($pager_total_items[0] / $limit);
$pager_page_array[0] = max(0, min((int)$pager_page_array[0], ((int)$pager_total[0]) - 1));
                               
$photos = array_slice($photos, $pager_page_array[0] * $limit, $limit);

// Выводим массив $photos
....

print theme('pager');

Вот как-то так можно. Я не проверял, просто выдернул из готового кода. Вам придется доработать. Изначально код был взят из http://api.drupal.ru/api/function/pager_query/6. Если кто-то подскажет более аккуратный метод, я с удовольствием взгляну.

Аватар пользователя Detonator Detonator 16 сентября 2010 в 23:30

That`s great, it works! Спасибо большое. Даже менять ничего не пришлось.
Если и правда имеются более элегантные решения был бы тоже не прочь взглянуть ради интереса.

Аватар пользователя Detonator Detonator 17 сентября 2010 в 0:24

Поправочка: в первой строчке вместо <?php$count = 200;?> или иного другого числа должно быть <?php$count = count($photos);?>. Т.е. мы переменной count задаем кол-во фотографий в альбоме, чтобы дальше правильно расчитывалось кол-во страниц. Если задать значение любым числом, например 200, то на странице где 56 фотографий вместо как и должно быть 2 страниц будет 7 из них 5 пустых.