За последние 24 часа нас посетили 17566 программистов и 1719 роботов. Сейчас ищут 1776 программистов ...

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

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

  1. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Доброе время суток,
    Есть вопрос, требуется выделить активную ссылку в категории,

    1. Код вывода категорий:
    PHP:
    1. <?php
    2. $res_categories = mysqli_query($connect,"SELECT * FROM log_categories");
    3. $num_categories = mysqli_fetch_array($res_categories);
    4.  
    5.  do
    6.    {
    7.    printf ("<p><a class='' href='log.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]);  
    8.    }
    9.    while ($num_categories = mysqli_fetch_array($res_categories));
    10. ?>
    2. Со списком была похожая задача, разобралась. Категорию выделяла таким образом:

    PHP:
    1. do {
    2.     if ($num_comm['cat'] == $num_cat['id'])
    3.    
    4. {
    5. printf ("<option value='%s' selected>%s</option>", $num_cat["id"], $num_cat["title"]);  
    6. }
    7.  
    8. else {printf ("<option value='%s'>%s</option>", $num_cat["id"], $num_cat["title"]);}
    9.     }
    10.     while ($num_cat = mysqli_fetch_array($res_cat));
    А пункте 1 пробовала реализовать, но не получается. Тут нужен другой подход для реализации данного момента.
    В пункте 1 вытаскивается 4 категории, придаю стили, ссылки работают, нужно при переходе, например, на страницу http://site.ru/log.php?cat=2 сделать её активной, в чём собственно и возникла трудность. Пробовала по разному, но получается коряво или не выходит совсем.

    На скрине в данный момент при переходе на любую из ссылок, сейчас так :

    screen.png


    Просьба, кто сталкивался с подобным, помочь в данном вопросе.
    Заранее благодарна, Ольга.
     
  2. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    PHP:
    1. <?php
    2. $res_categories = mysqli_query($connect,"SELECT * FROM log_categories");
    3. $num_categories = mysqli_fetch_array($res_categories);
    4.  
    5. do
    6.    {
    7.    $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive';
    8.    printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]);
    9.    }
    10.    while ($num_categories = mysqli_fetch_array($res_categories));
    11. ?>
     
  3. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо, то что доктор прописал !
     
  4. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Сергей, здравствуйте
    У меня к вам ещё один вопрос.
    В данный момент всё работает, нужно чтобы при клике на ссылку http://site.ru/log.php?cat=1 была переадресация на страницу log.php.

    Сделала так :
    PHP:
    1. do
    2.    {
    3.     if ($_GET['cat'] ==1)
    4.    
    5.     {echo'<script type="text/javascript">function redirect() {location="http://site.ru/log.php";} setTimeout("redirect()", 0);</script>';}
    6.    
    7.    
    8.     $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive';
    9.     printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]);
    10.    }
    11.    while ($num_categories = mysqli_fetch_array($res_categories));
    Работает, но происходит дважды перезагрузка. Что сделала не так и правильно ли ?
    Заранее благодарна, Ольга.
     
  5. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Пробовала переадресацию с http://site.ru/log.php?cat=1 на log.php по другому сделать, но получается с перезагрузкой.
    В сообщении 4 пробовала с помощью js сделать, да и через <meta http-equiv='Refresh'....., хотя через js более правильно, так как переадресация происходит в теле страницы.

    Если у кого-нибудь есть более толковое решение, буду благодарна.
     
  6. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, правильней будет, если при клике на ссылку с http://site.ru/log.php?cat=1 будут выбираться все статьи с остальными категориями, т.е у меня их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи.

    Как сделать, чтобы при клике на ссылку с http://site.ru/log.php?cat=1 показывались на странице все статьи из всех остальных категорий ?
    В принципе для этого и хотела сделать переадресацию на страницу log.php, где имеются все статьи, но в этом случае ссылка будет неактивна...
    --- Добавлено ---
    т.е по сути страница http://site.ru/log.php?cat=1 должна ссылаться на страницу log.php и выводить все статьи
     
  7. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Сергей, здравствуйте. Простите, что докучаю.

    Помогите, разобраться в данном вопросе.
    Как сделать чтобы, при клике на ссылку с http://site.ru/log.php?cat=1 будут выбираться все статьи с остальными категориями, т.е у меня их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи.

    Как сделать, чтобы при клике на ссылку с http://site.ru/log.php?cat=1 показывались на странице все статьи из всех остальных категорий ?
    В принципе для этого и хотела сделать переадресацию на страницу log.php, где имеются все статьи, но в этом случае ссылка будет неактивна..., т.е по сути страница http://site.ru/log.php?cat=1 должна ссылаться на страницу log.php и выводить все статьи.
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @olga_0630
    По моему тебе нужно подключить файл log.php в этот файл где делаешь эту ссылку свою.
    Делать переадресацию через js это есть не очень хорошо. Лучше делать через header()
    Пример:
    PHP:
    1. header('location: /log.php');
     
  9. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо за ответ, так вы предложили, я уже пробовала, но это не совсем что нужно.
    Хотелось бы реализовать момент описанный в сообщении 7, в данный момент код выглядит так:

    PHP:
    1. if (mysqli_num_rows ($res_categories) > 0) {
    2.     $num_categories = mysqli_fetch_array($res_categories);
    3.    
    4.     do
    5.    {
    6.     $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive';
    7.     printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]);
    8.    }
    9.    while ($num_categories = mysqli_fetch_array($res_categories));
    При клике на ссылку с http://site.ru/log.php?cat=1 должны выбираться все статьи с остальными категориями, их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи.

    Спасибо за ответ.
    --- Добавлено ---
    Спасибо за ответ, так вы предложили, я уже пробовала, но это не совсем что нужно.
    Хотелось бы реализовать момент описанный в сообщении 7, в данный момент код выглядит так:

    PHP:
    1. if (mysqli_num_rows ($res_categories) > 0) {
    2.     $num_categories = mysqli_fetch_array($res_categories);
    3.    
    4.     do
    5.    {
    6.     $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive';
    7.     printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]);
    8.    }
    9.    while ($num_categories = mysqli_fetch_array($res_categories));
    При клике на ссылку с http://site.ru/log.php?cat=1 должны выбираться все статьи с остальными категориями, их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи.

    Спасибо за ответ.
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Позже зайду и отвечу, через телефон плохо набирать сообщения, а тем более смотреть на код который вы привели в листинге.
     
  11. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо и заранее благодарна.
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    че?
     
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @olga_0630
    Код если честно просто ужасен, зачем на кнопку вешать $_GET[''] параметр?
    Мне интересно где же маусзверь критик наш велики)
    Покажи 2 файла:
    Файл где эти 4 кнопки и файл куда направляешь.
     
  14. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Переадресация так наверное:
    PHP:
    1. if($_GET['cat'] == 1) {
    2.      header('location: /log.php');
    3. }
    Вывод статей реализовать тоже просто. Покажите, как вы выводите все статьи на странице log.php
     
  15. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Да, надо было объяснить лучше, что требуется.
    Просьба извинить, за неверную подачу информации.

    По порядку...
    1. Имеется страница log.php на которой имеются вывод всех статей из базы, тут всё нормально - статьи выводятся.
    2. Решила разбить статьи на категории и разместить на странице log.php 4 категории, как на скрине ниже :
    screen.png
    Код для вывода категорий:
    PHP:
    1. echo "<div>";  
    2.     $res_categories = mysqli_query($connect,"SELECT * FROM log_categories");
    3.     // без проверки
    4.     $num_categories = mysqli_fetch_array($res_categories);
    5.    
    6.     do
    7.     {
    8.     printf ("<p style='display: inline-block;'><a class='' href='article.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]);  
    9.     }
    10.     while ($num_categories = mysqli_fetch_array($res_categories));
    11.    
    12.     }
    13.     else {echo "<p>Нет записей !</p>"; exit;}
    14.     echo "</div>";
    3. Далее создала article.php, как видно из пункта 2 и код вывода категорий изменила, так как требуется, чтобы ссылка была активной
    Пользователь находясь на странице log.php после клика на ссылку с http://site.ru/article.php?cat=3 попадает на страницу article.php с cat=3 и ссылка становится активной, чтобы пользователь знал, где находится.

    Сам код:
    PHP:
    1. echo "<div>";  
    2.     $res_categories = mysqli_query($connect,"SELECT * FROM log_categories");
    3.     // без проверки
    4.     $num_categories = mysqli_fetch_array($res_categories);
    5.    
    6.     do
    7.     {
    8.     $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive';
    9.     printf ("<p><a class='%s'  href='article.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]);  
    10.     }
    11.     while ($num_categories = mysqli_fetch_array($res_categories));
    12.    
    13.     }
    14.     else {echo "<p>Нет записей !</p>"; exit;}
    15.     echo "</div>";
    Классу active придаю с помощью css необходимые стили и активная категория сейчас как на скрине :

    screen 2.png

    4. Находясь на странице, например, http://site.ru/article.php?cat=4 я не могу вернуться обратно на страницу log.php, так как у меня с помощью css активной странице Блог (log.php) придается стиль и странице не активна, что логично (зачем на страницу кликать, если ты на ней и так находишься), но сейчас появились категории и при переходе на страницу с категорией, вернуться назад не могу.

    В принципе могу удалить на странице article.php class='current'
    Код (Text):
    1. <li id="lesson" class="current"><a href="lesson.php" title="Видеоуроки"></a></li>
    и ссылка "Блог" будет активна в меню, но тогда пользователь не будет "видеть", где он находится.
    В принципе мелочь, но иногда сама находясь на каком-нибудь сайте смотрю в каком разделе я нахожусь.

    Вот и пришла идея, как из http://site.ru/article.php?cat=1 сделать ссылку на страницу log.php и при переходе, чтобы эта ссылка на странице log.php была активной и переименовать её из "Уровень 1" в "Все статьи", т.е пользователь при клике на эту ссылку должен попадать на страницу log.php, ссылка при этом должна быть активной и все статьи появляться, как в случае, когда на страницу log.php попадаешь с главного меню. Если с главного меню попадать на страницу log.php, ссылка http://site.ru/article.php?cat=1 должна быть также активной.


    Запрос всех статей на страницу log.php :
    PHP:
    1. $res = mysqli_query($connect,"SELECT * FROM log WHERE cat='$cat' ORDER BY id desc LIMIT ");
    Код вывода всех статей не привожу, используется функция mysqli_fetch_array для вывода статей.

    Надеюсь более и менее изъяснилась и вы поняли, что требуется.
    Спасибо за ответ и просьба извинить, что непонятно, так как в php я пока слабовата.
    Заранее благодарна, Ольга

     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @olga_0630
    Ох и пришлось много прочитать, вы хотите все да и сразу. Особенно мне не нравится ваш do while.
     
  17. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Честно говоря, 4 пункт как-то не очень понял :)

    Зачем вам два файла log и article?

    Сделайте один файл article. Примерно так:

    PHP:
    1. <?php
    2. $categories = ['all','1','2','3','4']; //список существующих категорий
    3.  
    4. if($_GET['cat']) { //если указан get-параметр 'cat'
    5.     if(!in_array($_GET['cat'], $categories)) { //если такой категории не существует
    6.          header('location: /articles.php'); //переадресуем на articles.php
    7.     }
    8.     else { //если существует
    9.         $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : ''; //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы
    10.         $articles = mysqli_query($connect,"SELECT * FROM log $cat ORDER BY id desc LIMIT "); //запрос к базе
    11.     }
    12. }
    13.  
    14. foreach($categories as $value) { //вывод меню
    15.  
    16.     $title = ($value != 'all') ? "Категория $value" : "Все статьи"; //название пункта меню
    17.     $class = ($value == $_GET['cat']) ? "active" : "notactive"; //проверяем активный ли это пункт меню
    18.    
    19.     echo '<a class="'.$class.'" href="/articles.php?cat='.$value.'">'.$title.'</a>'; //выводим пункт меню на страницу
    20. }
    21.  
    22. if($articles) { //если есть статьи выводим их на экран
    23.     while ($row =  mysqli_fetch_array($articles)) {
    24.         //вывод статей
    25.     }
    26. }
    27. ?>
     
    _ne_scaju_ нравится это.
  18. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, Сергей.
    Код ваш проверила, пока не работает..., пытаюсь пока сама этот код прикрутить, но пока выдаются ошибки...
    В строчке:
    Код (Text):
    1. $categories = ['all','1','2','3','4'];
    Выдается ошибка :
    Код (Text):
    1. Parse error: syntax error, unexpected '['
    Далее в строчке:
    Код (Text):
    1. $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : '';
    также выдаётся сообщение:
    Код (Text):
    1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
    Продолжаю разбираться, если вы сразу увидели ошибку будьте добры дайте знать.
    Спасибо заранее.
     
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    У вас версия php ниже 7.1 стоит так что будет ошибка по любому, для вас наверное будет работать так:
    PHP:
    1. $categories = array('all','1','2','3','4');
    Попробуйте сделать так:
    PHP:
    1. $cat = ($_GET['cat'] != 'all') ? "WHERE cat=".(int)$_GET['cat'] : '';
     
  20. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, пока не совсем получается, спасибо за ответ, у меня php 5.5, код не срабатывал.
    1. Категории выводятся, правда пока не могу к ним стили применить, хотя класс active имеется.
    2. Сейчас по клику по любой категории, выводятся сразу все статьи, а не конкретные

    Код выглядит так :
    PHP:
    1. $categories = array('all','1','2','3','4'); //список существующих категорий
    2. if($_GET['cat']) { //если указан get-параметр 'cat'
    3.     if(!in_array($_GET['cat'], $categories)) { //если такой категории не существует
    4.          header('location: /log.php');
    5.     }
    6.     else { //если существует
    7.         $cat = ($_GET['cat'] != 'all') ? "WHERE cat=".(int)$_GET['cat'] : '';
    8. //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы
    9.         $articles = mysqli_query($connect,"SELECT * FROM log $cat ORDER BY id desc");
    10.     }
    11. }
    12. foreach($categories as $value) { //вывод меню
    13.     $title = ($value != 'all') ? "Категория $value" : "Все статьи"; //название пункта меню
    14.     $class = ($value == $_GET['cat']) ? "active" : "notactive"; //проверяем активный ли это пункт меню
    15.  
    16.     echo '<a class="'.$class.'" href="/log.php?cat='.$value.'">'.$title.'</a>'; //выводим пункт меню на страницу
    17. }
    18. if($articles) { //если есть статьи выводим их на экран
    19.     while ($row =  mysqli_fetch_array($articles)) {
    20.         //вывод статей
    21.        
    22.     }
    23. }
    Вывод статей делаю так :
    PHP:
    1. $res = mysqli_query($connect,"SELECT * FROM log WHERE page='index' ORDER BY id desc");
    2. $number = mysqli_num_rows($res);
    3.  
    4. for ($n=1; $n<=$number; $n++) {
    5.     $comments=mysqli_fetch_array($res);
    6.     // Оформление и вывод
    7.     echo '<h3>'.$comments['title'].'</h3>';
    8.     echo '<div>'.$comments['article'].'</div>';
    9. }
    т.е список категорий выводится на странице log.php, но при клике на любую из категорий выводятся все статьи, да и со стилями пока не всё в порядке.
    Что напутала, где сделала ошибку ?
    Спасибо за ответ.
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @olga_0630
    Попробуйте без (int) ту строку сделать.
    А какие у вас ошибки выводятся?
    И наконец то у вас нет этого do while.
     
  22. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, в 1 коде :

    PHP:
    1. <?php
    2. $res_categories = mysqli_query($connect,"SELECT * FROM log_categories");
    3. $num_categories = mysqli_fetch_array($res_categories);
    4.  
    5.  
    6. if (mysqli_num_rows ($res_categories) > 0) {
    7.     $num_categories = mysqli_fetch_array($res_categories);
    8.    
    9.     do
    10.     {
    11.     printf ("<p style='display: inline-block;'><a href='log.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]);  
    12.     }
    13.     while ($num_categories = mysqli_fetch_array($res_categories));
    14.    
    15.     } // в переменную $num_comm помещается массив title,meta_d,meta_k,message
    16. else {echo "<p>В базе нет записей !</p>"; exit;}
    17.  
    18. // вывод статей
    19. $res = mysqli_query($connect,"SELECT * FROM log WHERE page='index' ORDER BY id desc");
    20. $number = mysqli_num_rows($res);
    21.  
    22. for ($n=1; $n<=$number; $n++) {
    23.     $comments=mysqli_fetch_array($res);
    24.     // Оформление и вывод
    25.     echo '<h3>'.$comments['title'].'</h3>';
    26.     echo '<div>'.$comments['article'].'</div>';
    27. }
    28. ?>
    Всё нормально, статьи выводятся, категории тоже, при клике на конкретную категорию выводятся конкретные статьи.
    Проблема только была в том, что нужно было сделать 1 ссылку в категории, чтобы она извлекала все статьи из базы, но здесь есть цикл do while...

    Проверила код, убрала (int) - ничего не изменилось.Ошибок нет, ссылки становятся активной после клика, но извлекаются все статьи...
     
  23. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Сергей, здравствуйте.
    Если у вас будет время, будьте добры, гляньте сообщение 20 и 22 в данной теме (вы помогали с кодом).
    Не работает, точнее категории выводятся, но при клике на любую категорию выводятся все статьи, в 1 коде в сообщении 22 такой проблемы не было, где проблема пока не пойму...

    Заранее благодарна, Ольга.
     
  24. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Скорее всего потому, что не работает условие:
    PHP:
    1. $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : '';
    Покажите структуру таблицы, в которой у вас хранятся статьи.
    --- Добавлено ---
    P.S.: И перейдите лучше на PHP 7.
     
    _ne_scaju_ нравится это.
  25. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, сделала скриншот таблицы :

    db.png
    --- Добавлено ---
    И скриншот таблицы категорий :
    db_cat.png