Поддержка Проблемы и решения Не работает метод GET

  • Решено sergafon

    (@sergafon)


    Добрый день!

    есть следующий код

    <div id="all_information">
    
    <form action="" method="GET">
    <p><label>Сортировка по заголовку</label>
    <input type="radio" name="order" value="DESC"> по убыванию
    <input type="radio" name="order" value="ASC"> по возрастанию
    </p>
    <p><input type="submit" value="Получить записи"></p>
    </form>
    <?php
    $args = array( 'post_type' => 'page', 'post_parent__in' => array( 26, 28 ), 'orderby' => 'title' );
    /* Условие страницы */
    if (is_page('snyat')) {
    $pages = query_posts ( $args );
    }
    ?>
    
    <?php foreach ($pages as $page): ?>
    <article id="information">
    <a>ID ); ?>">
    <h4><?php echo $page->post_title; ?></h4>
    <?php echo get_the_post_thumbnail( $page->ID, 'thumbnail'); ?></a>
    <p><?php echo $page->post_excerpt; ?></p>
    <a>ID ); ?>">Подробнее</a>
    </article>
    <?php endforeach; ?>
    </div>
    </div>

    Метод GET нормально передает параметр в массив, увидел через print_r.
    Только толку от того что он их передает никакого, сортировка не изменяется.

    Причем днем сортировка работала, с работы ушел, пришел домой стал тестировать страницу сортировка уже перестала работать.

    Что за чудеса в решете.

    Если в массив сразу добавить параметры сортировки то страницы сортируются нормально.

    Не понимаю почему при передаче параметров сортировка не работает? Подскажите в чем может быть проблема?

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Модератор Yuri

    (@yube)

    1. Пользуйтесь кнопкой [code] или берите код в обратные апострофы. Ну совершенно же невозможно читать.

    2. Где используется $_GET['order']?

    Впредь буду по нормально оформлять посты)

    $_GET[‘order’] используется для сортировки дочерних страниц выводимых циклом

    <?php foreach ($pages as $page): ?>
    <article id="information">
    <a>ID ); ?>">
    <h4><?php echo $page->post_title; ?></h4>
    <?php echo get_the_post_thumbnail( $page->ID, 'thumbnail'); ?></a>
    <p><?php echo $page->post_excerpt; ?></p>
    <a>ID ); ?>">Подробнее</a>
    </article>
    <?php endforeach; ?>

    или я неправильно понял вопрос?

    Модератор Yuri

    (@yube)

    Вот я вижу условия выборки:

    $args = array( 'post_type' => 'page', 'post_parent__in' => array( 26, 28 ), 'orderby' => 'title' );

    Где в коде используется $_GET['order']?

    Не понимаю чего не хватает в коде(

    Пробовал выводить по клику

    <a style="color: #000;" href="?order=DESC"><img src="/img/ico/up-z-a.png"></a>
    <a style="color: #000;" href="?order=ASC"><img src="/img/ico/down-a-z.png"></a>
    if ($_GET[order] == DESC) {
    $args[orderby] = title;
    $args[order] = DESC;
    }
    if ($_GET[order] == ASC) {
    $args[orderby] = title;
    $args[order] = ASC;
    }

    Таким способом работало, потом перестало, хотя в коде я ничего не менял

    Модератор Yuri

    (@yube)

    Вот $args[‘order’] = ‘DESC’ или $args[‘order’] = ‘ASC’ и не хватает.

    Строковые литералы всегда берите в кавычки.

    Сделал так все равно не работает

    <?php
    $args = array( 'post_type' => 'page', 'post_parent__in' => array( 26, 28 ), 'orderby' => 'title' );
    /* Условие страницы */
    if (is_page('snyat')) {
    $pages = query_posts ( $args );
    }
    /* Сортировка */
    if ($_GET['order'] == 'DESC') {
    $args['order'] = 'DESC';
    }
    if ($_GET['order'] == 'ASC') {
    $args['order'] = 'ASC';
    }
    print_r($args);
    ?>
    Модератор Yuri

    (@yube)

    $pages = query_posts ( $args );
    }
    /* Сортировка */

    Сначала выборка, потом сортировка? Не, так не пойдет. Сначала надо все аргументы определить, а уж потом делать выборку.

    $args = array(
        'post_type' => 'page',
        'post_parent__in' => array( 26, 28 ),
        'orderby' => 'title',
        'order' => $_GET['order']
    );
    $pages = query_posts ( $args );

    все заработало! большое спасибо!
    Оказалось, что неправильно задавал переменные в массиве!
    а именно ‘order’ => $_GET[‘order’]

    Модератор Yuri

    (@yube)

    Да нет, не неправильно, а не в том месте )) Ваш «длинный» вариант тоже должен работать, если его поставить до выборки get_posts(). Заодно он позволяет избежать использования некорректного значения. Его можно упростить

    $args = array( 'post_type' => 'page', 'post_parent__in' => array( 26, 28 ), 'orderby' => 'title' );
    if ($_GET['order'] == 'DESC') $args['order'] = 'DESC';
    else $args['order'] = 'ASC';
    $pages = query_posts ( $args );

    точно работает)
    Теперь я понял в чем был косяк)
    Спасибо огромнейшее за помощь)

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Не работает метод GET» закрыта для новых ответов.