Да ты тоже хорош, просишь помочь с клиентским приложением и даже идей не предлагаешь не то что примеры кода
пришел к вердикту, что ты либо косишь под дурочку, либо действительно суешь свой нос туда, где обсираешься. Оказалось что ты 0 в плейсхолдерах. После пошел чушь пороть.
Сергей, здравствуйте. Спасибо, что помогли, к сожалению не так много людей, которые могут так делать. Я ранее писала, что освоила html, css, немного php и js и на некоторых сайтах я также помогаю, да и при этом сам закрепляешь пройденный материал. Как говориться повторения - мать ученья. Надо тему закрывать, а то тут и другие дискуссии начинаются, у меня остался к вам вопрос насчёт ссылок "вперёд" и "назад", которые в моём скрипте были реализованы, а тут скажу честно - знаний не хватает, как сделать, да и чтобы ссылка на страница была не активной на которой находишься. Или сделать также, как в категориях ? Сама пробовала, так (весь код не стала размещать, так как не работает): PHP: if ($i<$pag_pages_num) echo '<a href="/articles.php?'.$href.''.($i+1).'">Вперёд</a>'; if ($i>1) echo '<a href="/articles.php?'.$href.''.($i-1).'">Назад</a>'; работает, но коряво... Сергей, а можно сам блок вывода пагинации вынести таким образом, чтобы он располагался в самом начале страницы. (вы писали, что лучше вынести в конец блока if($art_query), в данный момент так и есть). Поясню, у меня из БД вытаскивается название страницы и краткое описание, а далее пагинация и всё остальное, а нужно чтобы пагинация была в самом начале страницы. И заранее благодарна, Ольга.
а что я могу предложить? Повторяюсь я в андроид не бум бум. Надеюсь ты читать умеешь, внимательней пожалуйста будь. Защитник появился, справедливость решил восстановить? Ведь ты не прав, не тебе сообщение было адресовано, так что по будь в сторонке.
@olga_0630, $i – это счетчик внутри цикла? Такие ссылки нужно делать за пределами цикла, в остальном логика верная. См. пример в третьем комменте к статье, ссылку на кот. я давал ранее. --- Добавлено --- Про неактивную текущую смотрите там же. Хотя логика тут такая же примитивная: значение счетчика равно номеру текущей, делаем пассив, иначе активную ссылку. --- Добавлено --- По идее абсолютно все равно, где размещается код постраничой навигации. Все подготовительные действия вроде запросов к БД и т.п. нужно делать до выполнения соотв. шаблонов.
P.S. Смотрю шаблон списка материалов в разных темах. Почти во всех в конце шаблона наблюдаю такое: PHP: <?php include(__DIR__.'/widgets/pagination.php'); ?> Перемещаю или дублирую эту строчку в позицию выше списка анонсов, строка навигации появляется (и) там.
По-сути, вам нужно разделить обработку данных и вывод информации на экран. То есть, сначала вы генерируете всю нужную информацию (делаете запросы к базе данных, обрабатываете полученную из базы информацию и т.п.). А вот готовую информацию уже выводите на экран. По теме: Примерно вот так создаёте переменную(массив) с данными пагинации. Поместите этот код сразу после запроса к базе данных: PHP: //пагинация $pagination = array(); for($i=1; $i<=$pag_pages_num; $i++) { $href = ($current_cat) ? "$current_cat&page_list=$i" : "page_list=$i"; $pagination[] = array('title' => $i, 'href' => "/articles.php?$href"); } if($current_page > 1) { $prev = ($current_cat) ? $current_cat.'&page_list='.($current_page-1) : '&page_list='.($current_page-1); array_unshift($pagination, array('title' => 'Назад', 'href' => "/articles.php?$prev")); } if($current_page < $pag_pages_num) { $next = ($current_cat) ? $current_cat.'&page_list='.($current_page+1) : '&page_list='.($current_page+1); array_push($pagination, array('title' => 'Вперёд', 'href' => "/articles.php?$next")); } //---- А вывод блока навигации можете поместить в любом месте страницы: PHP: foreach($pagination as $value) { echo '<a href="'.$value['href'].'"><div>'.$value['title'].'</div></a>'; } --- Добавлено --- Хотя всё это, так называемый говнокод А по уму для каждой задачи создаются классы, которые обрабатывают входящие данные и возвращают готовый результат. А при нынешнем подходе вам придется каждый раз прописывать генерацию пагинации на каждой странице где она потребуется.
Сергей, здравствуйте. Спасибо вам за помощь, ваш вариант работает, но я хотела бы оставить свой вариант пагинации, только не знаю как сделать формирование ссылок для категорий. В коде ниже пагинация отлично работает для страницы articles.php и для страницы http://site.ru/articles.php?cat=all, так как они равны. В коде формирование таким образом - articles.php?log_list=1 ...2...3 и т.д. У меня в данный момент 5 статей на странице, 6 уже будет на странице articles.php?log_list=2. На страницах с категориями, где например, 1 или 2 статьи также хотела, чтобы эта пагинация работала, у меня она в данный момент на страницах отображается и при наведении курсора машины - articles.php?log_list=2, хотя должна быть ссылка типа http://site.ru/articles.php?cat=1 со страницей, например, page_list=2. Максимальное количество статей на странице с категориями пусть остаётся также как и для страницы articles.php - 5 Весь код: PHP: PHP: <?php // формирование ссылок для пагинации function col_pages($count, $this, $radius) { $j=0; $out=""; $td='<td>'; if (($this-$radius)<1) $i=1; else $i=$this-$radius; if ($i==1) $i++; if (($count-($radius*2+1))<$i) $i=$count-($radius*2+1); if ($i<2) $i=2; if ($this!=1) $out.=$td.'<a href="articles.php?log_list=1">1</a></td>'; else $out.=$td.'1</td>'; if ($i>2) $out.=$td.'...</td>'; while ((($i<=($this+$radius)) or ($j<($radius*2+1))) and ($i<$count)) { if ($i!==$this) $out.=$td.'<a href="articles.php?log_list='.$i.'">'.$i.'</a></td>'; else $out.=$td.$i.'</td>'; $i++; $j++; } if ($i<$count) $out.=$td.'...</td>'; if ($count>1) { if ($count!=$this) $out.=$td.'<a href="articles.php?log_list='.$count.'">'.$count.'</a></td>'; else $out.=$td.$count.'</td>'; } return $out; } //Обработчик пагинации $art_query = mysqli_query($connect,"SELECT * FROM dpn_log"); $count_list=floor((mysqli_num_rows($art_query)-1)/5)+1; if (is_numeric($_GET[log_list]) and $_GET[log_list]>0) { if ($_GET[log_list]>$count_list) $log_list=$count_list; else $log_list=$_GET[log_list]; } else $log_list=1; if ($log_list==0) $log_list=1; //menu echo '<table>'; echo '<tr>'; echo '<td>'; if ($log_list>1) echo '<a href="articles.php?log_list='.($log_list-1).'">Назад</a>'; else echo 'Назад'; echo '</td>'; echo col_pages((int)$count_list, (int)$log_list, 3); echo '<td>'; if ($log_list<$count_list) echo '<a href="articles.php?log_list='.($log_list+1).'">Следующая</a>'; else echo 'Следующая'; echo '</td>'; echo '</tr>'; echo '</table>'; echo "<div>"; $cat_query = mysqli_query($connect, "SELECT * FROM `dpn_log_categories`"); //список существующих категорий while($cat = mysqli_fetch_array($cat_query)) { $cat_num[] = $cat['id']; //список существующих категорий $cat_title[] = $cat['title']; //названия категорий } if($_GET['cat']) { //если указан get-параметр 'cat' if(!in_array($_GET['cat'], $cat_num) && $_GET['cat'] != 'all') { //если такой категории не существует //header('location: /articles.php'); //переадресуем на articles.php echo '<p>Категории не существует ! Проверьте адресную строку !</p>'; } else { //если существует $cat = ($_GET['cat'] != 'all') ? 'WHERE cat='.$_GET["cat"] : ''; //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы } } $art_query = mysqli_query($connect,"SELECT * FROM dpn_log $cat ORDER BY id desc LIMIT ".($log_list*5-5).",5"); //запрос к базе for($i=-1; $i<sizeof($cat_num); $i++) { //вывод меню if($i == -1) { $title = 'Все статьи'; //название пункта меню $class = (!in_array($_GET['cat'], $cat_num)) ? "active" : "notactive"; // активна после клика из категории $href = 'all'; //ссылка } else { $title = ''.$cat_title[$i]; //название пункта меню $class = ($_GET['cat'] == $cat_num[$i]) ? "active" : "notactive"; //проверяем активный ли это пункт меню $href = $cat_num[$i]; //ссылка } echo '<p><a class="'.$class.'" href="/articles.php?cat='.$href.'">'.$title.'</a></p>'; //вывод пункта меню на страницу } if($art_query) { //если есть статьи выводим их на экран while ($art = mysqli_fetch_array($art_query)) { $articles[$art['cat']][] = array('title' => $art['title'], 'text' => $art['text'], 'page' => $art['page']); } if($articles) { foreach ($articles as $key => $value) { foreach ($value as $art) { echo'<h3>'.$art['title'].'</h3><div>'.$art['text'].'</div>'; } } } else { echo 'Статей не найдено!'; } } echo "</div>"; ?> Сергей, надеюсь вы разобрались, что я пыталась донести. Для страниц article.php и articles.php с cat=all пагинация работает, на странице 5 статей, при добавлении 6 появляется 2 страница со ссылками "Назад" и "Следующая", надо по сути, чтобы при попадании на страницу с категорией, например, где cat=2 пагинация была такая же (оформление), но со своими ссылками, если количество страниц в данной категории будет превышать 5, то будет появляться 2, 3 и т.д. страницы. В данный момент при попадании на страницу с категорий, пагинация отображается на странице, но ссылки работают для страниц article.php и articles.php с cat=all, а должны быть для категорий. Это единственная проблема, которую я, к сожалению, не могу пока решить. Вторая причина у меня на других страницах имеется эта же пагинация + оформление и всё работает и не хотелось делать другую, чтобы не путаться. Просьба, не судите строго, но было бы здорово если бы у вас это получилось реализовать. Заранее благодарна, Ольга --- Добавлено --- Перенёс ваше сообщение сюда, так как не люблю отвечать в личку Здесь больше народу и могут посоветовать что-то более интересное, нежели я. По сути вопроса: PHP: $out.=$td.'<a href="articles.php?log_list=1">1</a></td>'; Вот здесь у вас формируется ссылка. Как видите параметра cat тут не предусмотрено. Соответственно и ссылки у вас будут нерабочие. В сообщении #46 я вам писал как генерируются ссылки в моём варианте. Посмотрите внимательно: Особенно вот эту строчку: PHP: $current_cat = (!in_array($_GET['cat'], $cat_num) && $_GET['cat'] != 'all') ? '' : 'cat='.$_GET['cat']; //текущая категория Ну и соотвественно обратите внимание как генерируется непосредственно ссылка: PHP: $href = ($current_cat) ? "$current_cat&page_list=$i" : "page_list=$i"; Ну соотвественно вместо page_list вы можете указать log_list.