Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите пожалуйста прикрутить пагинацию

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Linne
Отправлено: 28 Апреля, 2017 - 18:32:25
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Здравствуйте, уважаемые товарищи! Улыбка

У меня некоторая проблема. Есть код, который выводит из каталога xml-файлы, точнее, их узлы и мне удалось «методом научного тыка» прикрутить туда постраничный вывод, найденный на просторах интернета. Собственно, вот он:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.             $perPage = 1;
  3.             $dir = 'xml';
  4.             $files = scandir($dir);
  5.             foreach($files as $num => $file) {
  6.                 $full = $dir . DIRECTORY_SEPARATOR . $file;
  7.                 if(is_file($full)) {
  8.                     if (!is_dir($fileDir . $file) && eregi('^article.*\.xml$', $file))
  9.                     $files[$file] = filemtime($full);
  10.                 }
  11.                 unset($files[$num]);
  12.             }
  13.             arsort($files);
  14.             $total = count($files);
  15.             $pages = (int) ceil($total / $perPage);
  16.             if($total > 0) {
  17.                 $page=(isset($_GET['page'])) ? (int)$_GET['page'] : 1;
  18.                 if($page > $pages or $page < 1)
  19.                     exit('Нет такой страницы');
  20.                 $start = ($page - 1) * $perPage;
  21.                 $out = array_slice($files, $start, $perPage);
  22.                 foreach($out as $file => $date){
  23.                     $articleFile = simplexml_load_file($fileDir . $file);
  24.                     $id = htmlentities($articleFile['id']);
  25.                     echo '<div class="section">
  26.                                               <h1>' . $articleFile->headline . '</h1>
  27.                                               <p class="date">' . $articleFile->pubdate . '</p>
  28.                                               <div class="abstract">' . $articleFile->description . '</div>
  29.                                               <a class="more" href="' . $articleFile['id'] . '" title="Читать статью «' . $articleFile->headline . '»">Читать статью</a>
  30.                                           </div>';
  31.                 }
  32.             }
  33.                 else
  34.                 echo '<p>Нет файлов для отображения на этой странице</p>';
  35.             if($pages > 1) {
  36.                 echo '<div>';
  37.                 for($pr = '', $i =1; $i <= $pages; $i++) {
  38.                     echo $pr=(($i == 1 || $i == $pages || abs($i-$page) < 2) ? ($i == $page ? " $i " : ' <a href="' . $_SERVER['SCRIPT_NAME'] . '?page='. $i .'" title="Страница ' . $i . '">' . $i . '</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
  39.                 }
  40.                 echo '</div>';
  41.             }
  42.         ?>


Есть также скрипт, который выводит список xml-файлов, которые относятся к той или иной категории, вот он:
PHP:
скопировать код в буфер обмена
  1. <h1>
  2.         <?PHP
  3.                    $cats = simplexml_load_file($fileDir . 'categories.xml');
  4.                    foreach ($cats->category as $cat) {
  5.                   if ((string)$cat['id'] == $_GET['catid']) {
  6.                      echo 'Категория: ' . $cat['label'];
  7.                   }
  8.                    }
  9.                 ?>
  10.             </h1>
  11.                     <?PHP
  12.                     echo '<ul>';
  13.                         if (isset($_GET['catid'])) {
  14.                             $handle = opendir($fileDir);
  15.                                 while (($file = readdir($handle)) !== FALSE) {
  16.                                     if (is_dir($fileDir . $file)) continue;
  17.                                     if (!eregi('^(article).*\.xml$', $file)) continue;
  18.                                    
  19.                                     $xml = simplexml_load_file($fileDir . $file);
  20.                                     if ((string)$xml->categoryid == $_GET['catid'] &&
  21.                                                 (string)$xml->status == 'live') {
  22.                                         $id = htmlentities($xml['id']);
  23.                                         $label = htmlentities($xml->headline);
  24.                                         echo '<li><a href="' . $id . '">' . $label . '</a></li>';
  25.                                     }
  26.                                 }
  27.                         }
  28.                         echo '</ul>';
  29.                     ?>

По-скольку, список явно будет длинным, то, здесь необходим такой же постраничный вывод, как и в предыдущем скрипте. Как прикрутить пагинатор из того скрипта к этому? В php я весьма слаб, пробовал конечно, но, итог предсказуем. Помогите, друзья! Огорчение
 
 Top
Linne
Отправлено: 29 Апреля, 2017 - 16:39:02
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Товарищи! Ну поможите пожалуйста, это личный, некоммерческий проект, научно-просветительский.
 
 Top
Linne
Отправлено: 04 Мая, 2017 - 19:34:39
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Попробовал сам ещё, но ничего не получается. Выводятся заголовки статей, которые относятся к данной категории, внизу пагинация, но при переходе на другие страницы они — пустые, без заголовков Огорчение
Вот что намутил:
PHP:
скопировать код в буфер обмена
  1. <h1>
  2.                 <?PHP
  3.                                 $cats = simplexml_load_file($fileDir . 'categories.xml');
  4.                                 foreach ($cats->category as $cat) {
  5.                         if ((string)$cat['id'] == $_GET['catid']) {
  6.                                 echo 'Категория: ' . $cat['label'];
  7.                         }
  8.                                 }
  9.                                 ?>
  10.                         </h1>
  11.                                         <?PHP
  12.                                         $perPage = 1;
  13.                         $dir = 'xml';
  14.                         $files = scandir($dir);
  15.                         foreach($files as $num => $file) {
  16.                                 $full = $dir . DIRECTORY_SEPARATOR . $file;
  17.                                 if(is_file($full)) {
  18.                                         if (!is_dir($fileDir . $file) && eregi('^article.*\.xml$', $file))
  19.                                         $files[$file] = filemtime($full);
  20.                                 }
  21.                                 unset($files[$num]);
  22.                         }
  23.                         arsort($files);
  24.                         $total = count($files);
  25.                         $pages = (int) ceil($total / $perPage);
  26.                         if($total > 0) {
  27.                                 $page=(isset($_GET['page'])) ? (int)$_GET['page'] : 1;
  28.                                 if($page > $pages or $page < 1)
  29.                                         exit('Нет такой страницы');
  30.                                 $start = ($page - 1) * $perPage;
  31.                                 $out = array_slice($files, $start, $perPage);
  32.                                 foreach($out as $file => $date){
  33.                                         $articleFile = simplexml_load_file($fileDir . $file);
  34.                                         $id = htmlentities($articleFile['id']);
  35.                
  36.                                         echo '<ul>';
  37.                                                 if (isset($_GET['catid'])) {
  38.                                                         $files = opendir($fileDir);
  39.                                                                 while (($file = readdir($files)) !== FALSE) {
  40.                                                                         if (is_dir($fileDir . $file)) continue;
  41.                                                                         if (!eregi('^(article).*\.xml$', $file)) continue;
  42.                                                                        
  43.                                                                         $xml = simplexml_load_file($fileDir . $file);
  44.                                                                         if ((string)$xml->categoryid == $_GET['catid'] &&
  45.                                                                                                 (string)$xml->status == 'live') {
  46.                                                                                 $id = htmlentities($xml['id']);
  47.                                                                                 $label = htmlentities($xml->headline);
  48.                                                                                 echo '<li><a href="' . $id . '">' . $label . '</a></li>';
  49.                                                                         }
  50.                                                                 }
  51.                                                 }
  52.                                         echo '</ul>';
  53.                                        
  54.                                 }
  55.                         }
  56.                                 else
  57.                                 echo '<p>Нет файлов для отображения на этой странице</p>';
  58.                         if($pages > 1) {
  59.                                 echo '<div>';
  60.                                 for($pr = '', $i =1; $i <= $pages; $i++) {
  61.                                         echo $pr=(($i == 1 || $i == $pages || abs($i-$page) < 2) ? ($i == $page ? " $i " : ' <a href="' . $_SERVER['SCRIPT_NAME'] . '?catid=' . $_GET['catid'] . '?page='. $i .'" title="Страница ' . $i . '">' . $i . '</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
  62.                                 }
  63.                                 echo '</div>';
  64.                         }
  65.                                         ?>

Сам не разберусь… Огорчение
 
 Top
andrewkard
Отправлено: 04 Мая, 2017 - 20:15:13
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Вот простенький пример, вариант реализации может быть и другой, но принцип тот же:

PHP:
скопировать код в буфер обмена
  1.  
  2. $files = array();
  3. $files[] = '111';
  4. $files[] = '222';
  5. $files[] = '333';
  6. $files[] = '444';
  7. $files[] = '555';
  8. $files[] = '666';
  9. $files[] = '777';
  10. $files[] = '888';
  11. $files[] = '999';
  12.  
  13. $page = isset($_GET['p']) ? (int)$_GET['p'] : 0;
  14.  
  15. $chanks = array_chunk($files, 3);
  16.  
  17. if(isset($chanks[$page])){
  18.         print_r($chanks[$page]);
  19. } else {
  20.         echo 'Файлы не найдены';
  21. }
  22.  
  23.  
  24.  
 
 Top
Linne
Отправлено: 04 Мая, 2017 - 20:25:14
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




andrewkard пишет:
Вот простенький пример, вариант реализации может быть и другой, но принцип тот же:

Спасибо, Вам за отклик, но я в php катастрофический нуб, для меня подобный пример, как ребус без отгадки. Я понимаю всё очень размыто, только начал изучать язык и боюсь, мне придётся сильно постараться, чтобы хоть как-то вникнуть. Огорчение

(Отредактировано автором: 04 Мая, 2017 - 20:33:21)

 
 Top
andrewkard
Отправлено: 04 Мая, 2017 - 21:32:10
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




А что тут сложного, есть массив/список, который разбивается на группы - в данном случае по 3 штуки. В зависимости от GET параметра p, выбирается соотв. группа. По умолчанию с индексом 0
Поместите код в файл на веб сервере, например в test.php и откройте

http://localhost/test.php?p=3

поменяйте параметр р, станет яснее
 
 Top
Linne
Отправлено: 04 Мая, 2017 - 22:04:40
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




andrewkard пишет:
А что тут сложного, есть массив/список, который разбивается на группы - в данном случае по 3 штуки. В зависимости от GET параметра p, выбирается соотв. группа. По умолчанию с индексом 0
Поместите код в файл на веб сервере, например в test.php и откройте

http://localhost/test.php?p=3

поменяйте параметр р, станет яснее


Да принцип вроде и понятен, но как реализовать всё это в моём конкретном случае, это большой вопрос.
URL на странице категории выглядят таким образом: category.php?catid=6. Если, с пагинатором, то очевидно, должны выглядеть следующим образом: category.php?catid=6?page=2.
Как совместить первый и второй скрипт, вот это сложный вопрос. То есть, нужно, чтобы категория оставалась скажем, «6», при переходе на другую страницу, менялось только значение «page=»

Вот пример xml-файла:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0"?>
  2. <article id="article20050630164826">
  3.         <authorid>4</authorid>
  4.         <categoryid>6</categoryid>
  5.         <headline>Пустыня Каракум</headline>
  6.         <description><![CDATA[
  7.                 <p>...</p>]]></description>
  8.         <pubdate>...</pubdate>
  9.         <status>live</status>
  10.         <keywords></keywords>
  11.         <body><![CDATA[
  12.                 <p>...</p>]]></body>
  13. </article>
  14.  

Вот такая беда…
 
 Top
andrewkard
Отправлено: 06 Мая, 2017 - 13:09:13
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Linne пишет:
Да принцип вроде и понятен, но как реализовать всё это в моём конкретном случае, это большой вопрос.

Начитаем переписывать код, упрощаем до тех, пока не станет понятно, экспериментируем.
Вся обработки в боке php, в части html никаких расчетов, а только вывод переменных.
Вот пример начала файла:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $categories = simplexml_load_file($fileDir . 'categories.xml');
  4.  
  5. $category = 'Категория: ';
  6.  
  7. $id = isset($_GET['catid']) ? (int)$_GET['catid'] : null;
  8.  
  9. foreach ($categories->category as $_category) {
  10.     if ($_category['id'] == $id) {
  11.         $category .= $_category['label'];
  12.     }
  13. }
  14. ?>
  15. <h1><?=$category?></h1>
  16.  
  17.  
 
 Top
Linne
Отправлено: 24 Августа, 2017 - 21:45:24
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Переписал скрипт. Теперь выводит заданное количество ссылок на статьи, но, при переходе по ссылкам пагинатора вывод страниц таким и остаётся, как будто мы на 1 странице. Уже всё, что мог перепробовал (в преелах своего опыта). Нихера не получается! Не могу сообразить где там косяк.

Вот поделие моё:

PHP:
скопировать код в буфер обмена
  1. $catid = (isset($_GET['catid'])) ? (int)$_GET['catid'] : 1;
  2.                                                                        
  3. $perPage = 2;
  4.                                                                        
  5. $files = scandir($fileDir);    
  6.                        
  7. foreach($files as $num => $file) {
  8.        $full = $fileDir . '/' . $file;
  9.               if(is_file($full)) {
  10.               if (!is_dir($fileDir . $file) && !preg_match('/^article.*\.xml$/i', $file)) continue;
  11.               $files[$file] = filemtime($full);
  12.        }
  13. unset($files[$num]);
  14. }
  15. arsort($files);
  16.                                                                                                        
  17. $total = count($files);
  18. $pages = (int) ceil($total / $perPage);
  19.                                                                        
  20. if($total > 0) {
  21.                                                                                
  22.         $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
  23.                                                                                        
  24.         if($page > $pages or $page < 1)
  25.                 exit('Нет такой страницы');
  26.                                                                                                                
  27.         $start = ($page - 1) * $perPage;
  28.         $out = array_slice($files, $start, $perPage);                                                  
  29.                                                                                                        
  30.         foreach($out as $file => $date) {
  31.                                                                                                                
  32.                 $articleFile = simplexml_load_file($fileDir . $file);
  33.                 $id = htmlentities($articleFile['id']);
  34.                                                                                                                                        
  35.                 if ((string)$articleFile->categoryid == $catid) {                                      
  36.                                                                                                                                                
  37.                         echo '<li><a href="' . $articleFile['id'] . '">' . $articleFile->headline . '</a></li>';
  38.                 }      
  39.                                                                                                                
  40.         }
  41.                                        
  42. }
  43. else {
  44.         echo '<p>Нет файлов для отображения на этой странице</p>';
  45. }
  46.                                                        
  47. if($pages > 1) {
  48.         echo '<div>';
  49.         for($pr = '', $i = 1; $i <= $pages; $i++) {
  50.                echo $pr = (($i == 1 || $i == $pages || abs($i - $page) < 2) ? ($i == $page ? " $i " : ' <a href="?catid=' . $catid . '?page='. $i .'" title="Страница ' . $i . '">' . $i . '</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
  51.         }
  52.         echo '</div>';
  53. }
 
 Top
Sail
Отправлено: 24 Августа, 2017 - 23:57:48
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Linne, со знаками вопроса и амперсанда в формируемых для пагинации ссылках разберитесь... Или воспользуйтесь функцией http_build_query()...
 
 Top
Linne
Отправлено: 29 Августа, 2017 - 22:43:09
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Sail пишет:
Linne, со знаками вопроса и амперсанда в формируемых для пагинации ссылках разберитесь... Или воспользуйтесь функцией http_build_query()...


Да, спасибо, разобрался с выводом ссылок,— действительно, косяк был там, нужно было вместо вопроса установить амперсанд.

Теперь проблема в том, что пагинатор почему-то выводит больше ссылок (1 2 ... 4), чем надо (1 2), просто статей в категории всего три, а вывод по две на страницу.

Закралась мысль, что скрипт считает количество страниц для общего количества статей (файлов), но не учитывает только те, которые относятся к категории. Такая вот петрушка Огорчение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB