За последние 24 часа нас посетили 20477 программистов и 1608 роботов. Сейчас ищут 1085 программистов ...

Выделение ссылки в категории

Тема в разделе "PHP для новичков", создана пользователем olga_0630, 17 фев 2018.

  1. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Да ты тоже хорош, просишь помочь с клиентским приложением и даже идей не предлагаешь не то что примеры кода :)
     
    olga_0630 нравится это.
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
  3. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    @MouseZver ты начни с начала там с именованных и не именованных плейсхолдеров.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    вопрос еще не решен, чтобы переходить на другой.
     
  5. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    это был первый вопрос на который ты по кривому ответил.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    пришел к вердикту, что ты либо косишь под дурочку, либо действительно суешь свой нос туда, где обсираешься. Оказалось что ты 0 в плейсхолдерах. После пошел чушь пороть.
     
  7. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Сергей, здравствуйте.
    Спасибо, что помогли, к сожалению не так много людей, которые могут так делать.
    Я ранее писала, что освоила html, css, немного php и js и на некоторых сайтах я также помогаю, да и при этом сам закрепляешь пройденный материал. Как говориться повторения - мать ученья.

    Надо тему закрывать, а то тут и другие дискуссии начинаются, у меня остался к вам вопрос насчёт ссылок "вперёд" и "назад", которые в моём скрипте были реализованы, а тут скажу честно - знаний не хватает, как сделать, да и чтобы ссылка на страница была не активной на которой находишься. Или сделать также, как в категориях ?

    Сама пробовала, так (весь код не стала размещать, так как не работает):
    PHP:
    1. if ($i<$pag_pages_num) echo '<a href="/articles.php?'.$href.''.($i+1).'">Вперёд</a>';
    2.         if ($i>1) echo '<a href="/articles.php?'.$href.''.($i-1).'">Назад</a>';
    работает, но коряво...

    Сергей, а можно сам блок вывода пагинации вынести таким образом, чтобы он располагался в самом начале страницы. (вы писали, что лучше вынести в конец блока if($art_query), в данный момент так и есть).
    Поясню, у меня из БД вытаскивается название страницы и краткое описание, а далее пагинация и всё остальное, а нужно чтобы пагинация была в самом начале страницы.

    И заранее благодарна, Ольга.
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    а что я могу предложить? Повторяюсь я в андроид не бум бум. Надеюсь ты читать умеешь, внимательней пожалуйста будь.
    Защитник появился, справедливость решил восстановить? Ведь ты не прав, не тебе сообщение было адресовано, так что по будь в сторонке.
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    @olga_0630, $i – это счетчик внутри цикла? Такие ссылки нужно делать за пределами цикла, в остальном логика верная. См. пример в третьем комменте к статье, ссылку на кот. я давал ранее.
    --- Добавлено ---
    Про неактивную текущую смотрите там же. Хотя логика тут такая же примитивная: значение счетчика равно номеру текущей, делаем пассив, иначе активную ссылку.
    --- Добавлено ---
    По идее абсолютно все равно, где размещается код постраничой навигации. Все подготовительные действия вроде запросов к БД и т.п. нужно делать до выполнения соотв. шаблонов.
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    P.S. Смотрю шаблон списка материалов в разных темах. Почти во всех в конце шаблона наблюдаю такое:
    PHP:
    1. <?php include(__DIR__.'/widgets/pagination.php'); ?>
    Перемещаю или дублирую эту строчку в позицию выше списка анонсов, строка навигации появляется (и) там.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Перемещаю в самое начало шаблона (перед заголовком и контентом) – тоже, естественно, все в порядке.
     
  12. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    По-сути, вам нужно разделить обработку данных и вывод информации на экран. То есть, сначала вы генерируете всю нужную информацию (делаете запросы к базе данных, обрабатываете полученную из базы информацию и т.п.). А вот готовую информацию уже выводите на экран.
    По теме:
    Примерно вот так создаёте переменную(массив) с данными пагинации. Поместите этот код сразу после запроса к базе данных:
    PHP:
    1. //пагинация
    2. $pagination = array();
    3.  
    4. for($i=1; $i<=$pag_pages_num; $i++) {
    5.        
    6.         $href = ($current_cat) ? "$current_cat&page_list=$i" : "page_list=$i";
    7.         $pagination[] = array('title' => $i, 'href' => "/articles.php?$href");
    8. }
    9.  
    10. if($current_page > 1) {
    11.     $prev = ($current_cat) ? $current_cat.'&page_list='.($current_page-1) : '&page_list='.($current_page-1);
    12.     array_unshift($pagination, array('title' => 'Назад', 'href' => "/articles.php?$prev"));
    13. }
    14.  
    15. if($current_page < $pag_pages_num) {
    16.     $next = ($current_cat) ? $current_cat.'&page_list='.($current_page+1) : '&page_list='.($current_page+1);
    17.     array_push($pagination, array('title' => 'Вперёд', 'href' => "/articles.php?$next"));
    18. }
    19. //----
    А вывод блока навигации можете поместить в любом месте страницы:
    PHP:
    1. foreach($pagination as $value) {
    2.     echo '<a href="'.$value['href'].'"><div>'.$value['title'].'</div></a>';
    3. }
    --- Добавлено ---
    Хотя всё это, так называемый говнокод :) А по уму для каждой задачи создаются классы, которые обрабатывают входящие данные и возвращают готовый результат. А при нынешнем подходе вам придется каждый раз прописывать генерацию пагинации на каждой странице где она потребуется.
     
  13. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Сергей, здравствуйте.
    Спасибо вам за помощь, ваш вариант работает, но я хотела бы оставить свой вариант пагинации, только не знаю как сделать формирование ссылок для категорий.
    В коде ниже пагинация отлично работает для страницы 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:
    1. <?php // формирование ссылок для пагинации
    2. function col_pages($count, $this, $radius) {
    3. $j=0; $out=""; $td='<td>';
    4. if (($this-$radius)<1) $i=1;
    5.      else $i=$this-$radius;
    6. if ($i==1) $i++;
    7.  
    8. if (($count-($radius*2+1))<$i) $i=$count-($radius*2+1);
    9. if ($i<2) $i=2;
    10.  
    11. if ($this!=1)
    12.   $out.=$td.'<a href="articles.php?log_list=1">1</a></td>';
    13.      else $out.=$td.'1</td>';
    14.  
    15. if ($i>2) $out.=$td.'...</td>';
    16.  
    17. while ((($i<=($this+$radius)) or ($j<($radius*2+1))) and ($i<$count)) {
    18. if ($i!==$this)
    19.  
    20.   $out.=$td.'<a href="articles.php?log_list='.$i.'">'.$i.'</a></td>';
    21.      else $out.=$td.$i.'</td>';
    22. $i++; $j++;
    23. }
    24. if ($i<$count) $out.=$td.'...</td>';
    25. if ($count>1) {
    26.      if ($count!=$this)
    27.      
    28.       $out.=$td.'<a href="articles.php?log_list='.$count.'">'.$count.'</a></td>';
    29.      else $out.=$td.$count.'</td>';
    30. }
    31. return $out;
    32. }
    33.     //Обработчик пагинации
    34. $art_query = mysqli_query($connect,"SELECT * FROM dpn_log");
    35. $count_list=floor((mysqli_num_rows($art_query)-1)/5)+1;
    36.  
    37. if (is_numeric($_GET[log_list]) and $_GET[log_list]>0) {
    38. if ($_GET[log_list]>$count_list) $log_list=$count_list;
    39.     else $log_list=$_GET[log_list];
    40. }
    41. else $log_list=1;
    42. if ($log_list==0) $log_list=1;
    43.    
    44.     //menu
    45. echo '<table>';
    46. echo '<tr>';
    47. echo '<td>';
    48. if ($log_list>1) echo '<a href="articles.php?log_list='.($log_list-1).'">Назад</a>';
    49.     else echo 'Назад';
    50.   echo '</td>';
    51.  
    52. echo col_pages((int)$count_list, (int)$log_list, 3);
    53.  
    54.   echo '<td>';
    55. if ($log_list<$count_list) echo '<a href="articles.php?log_list='.($log_list+1).'">Следующая</a>';
    56.     else echo 'Следующая';
    57.   echo '</td>';
    58. echo '</tr>';
    59. echo '</table>';
    60.  
    61.    
    62.    echo "<div>";
    63. $cat_query = mysqli_query($connect, "SELECT * FROM `dpn_log_categories`"); //список существующих категорий
    64. while($cat = mysqli_fetch_array($cat_query)) {
    65.     $cat_num[] = $cat['id']; //список существующих категорий
    66.     $cat_title[] = $cat['title']; //названия категорий
    67. }
    68. if($_GET['cat']) { //если указан get-параметр 'cat'
    69.   if(!in_array($_GET['cat'], $cat_num) && $_GET['cat'] != 'all') { //если такой категории не существует
    70.        //header('location: /articles.php'); //переадресуем на articles.php
    71.        echo '<p>Категории не существует ! Проверьте адресную строку !</p>';
    72.   }
    73.   else { //если существует
    74.        $cat = ($_GET['cat'] != 'all') ? 'WHERE cat='.$_GET["cat"] : ''; //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы
    75.   }
    76. }
    77.  
    78. $art_query = mysqli_query($connect,"SELECT * FROM dpn_log $cat ORDER BY id desc LIMIT ".($log_list*5-5).",5"); //запрос к базе
    79. for($i=-1; $i<sizeof($cat_num); $i++) { //вывод меню
    80.  
    81.     if($i == -1) {
    82.         $title = 'Все статьи'; //название пункта меню
    83.         $class = (!in_array($_GET['cat'], $cat_num)) ? "active" : "notactive"; // активна после клика из категории
    84.         $href = 'all'; //ссылка
    85.     }
    86.     else {
    87.         $title = ''.$cat_title[$i]; //название пункта меню
    88.         $class = ($_GET['cat'] == $cat_num[$i]) ? "active" : "notactive"; //проверяем активный ли это пункт меню
    89.         $href = $cat_num[$i]; //ссылка
    90.     }
    91.  
    92.     echo '<p><a class="'.$class.'" href="/articles.php?cat='.$href.'">'.$title.'</a></p>'; //вывод пункта меню на страницу
    93. }
    94. if($art_query) { //если есть статьи выводим их на экран
    95.     while ($art =  mysqli_fetch_array($art_query)) {
    96.         $articles[$art['cat']][] = array('title' => $art['title'], 'text' => $art['text'], 'page' => $art['page']);
    97.     }
    98.     if($articles) {
    99.         foreach ($articles as $key => $value) {
    100.                 foreach ($value as $art) {
    101.                     echo'<h3>'.$art['title'].'</h3><div>'.$art['text'].'</div>';
    102.             }
    103.         }
    104.     }
    105.     else {
    106.         echo 'Статей не найдено!';
    107.     }
    108. }
    109. echo "</div>";
    110. ?>
    Сергей, надеюсь вы разобрались, что я пыталась донести.
    Для страниц article.php и articles.php с cat=all пагинация работает, на странице 5 статей, при добавлении 6 появляется 2 страница со ссылками "Назад" и "Следующая", надо по сути, чтобы при попадании на страницу с категорией, например, где cat=2 пагинация была такая же (оформление), но со своими ссылками, если количество страниц в данной категории будет превышать 5, то будет появляться 2, 3 и т.д. страницы.

    В данный момент при попадании на страницу с категорий, пагинация отображается на странице, но ссылки работают для страниц article.php и articles.php с cat=all, а должны быть для категорий.

    Это единственная проблема, которую я, к сожалению, не могу пока решить. Вторая причина у меня на других страницах имеется эта же пагинация + оформление и всё работает и не хотелось делать другую, чтобы не путаться.
    Просьба, не судите строго, но было бы здорово если бы у вас это получилось реализовать.

    Заранее благодарна, Ольга
    --- Добавлено ---
    Перенёс ваше сообщение сюда, так как не люблю отвечать в личку :) Здесь больше народу и могут посоветовать что-то более интересное, нежели я.
    По сути вопроса:
    PHP:
    1. $out.=$td.'<a href="articles.php?log_list=1">1</a></td>';
    Вот здесь у вас формируется ссылка. Как видите параметра cat тут не предусмотрено. Соответственно и ссылки у вас будут нерабочие. В сообщении #46 я вам писал как генерируются ссылки в моём варианте. Посмотрите внимательно:
    Особенно вот эту строчку:
    PHP:
    1. $current_cat = (!in_array($_GET['cat'], $cat_num) && $_GET['cat'] != 'all') ? '' : 'cat='.$_GET['cat']; //текущая категория
    Ну и соотвественно обратите внимание как генерируется непосредственно ссылка:
    PHP:
    1. $href = ($current_cat) ? "$current_cat&page_list=$i" : "page_list=$i";
    Ну соотвественно вместо page_list вы можете указать log_list.
     
  14. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо, буду дальше разбираться, пока не всё ясно...