Как скрыть блок для всей категории с помощью php

Рейтинг: 0Ответов: 3Опубликовано: 09.01.2015

Здравствуйте! Недавно задавала вопрос насчет скрытия блока с помощью кода

<?php if (in_array('otzivi', explode('/', $_SERVER['REQUEST_URI']))) { ?>
    <style>
        #news {display:none;}
        #otzivi {display:none;}
        #podelitsya {display:none;}
    </style>
<?php } ?>

Мне объяснили, что функция explode разбивает урл по разделителю "/" и делает из полученных данных массив, и затем с помощью in_array идет проверка, есть ли в урл otzivi. Теперь мне нужно сделать то же самое для категории новостей, но здесь другой урл вида index.php/novosti?start=4 - очевидно из-за того, что не получается выделить novosti, код не срабатывает. Как правильно выделить novosti из урл, чтобы код сработал? И пожалуйста, если напишете ответ, объясните, что делает та или иная функция, хотелось бы понимать, как работает код. Спасибо.

Ответы

▲ 1

Любой роутинг по url-у строится на regexp-ах, либо абстракцией над ними с использованием плейсхолдеров (небольшое снижение сложности восприятия regex-ов): chriso/klein.php , nikic/FastRoute, laravel route.

Если коротко, то под капотом у них происходит следующее:

preg_match('/^\/index.php\/(?P<category>[\w-]+)/', '/index.php/novosti/?start=4', $matches);
var_dump($matches['category']); // result: novosti

И так на каждое правило.

Кроме того, API данных библиотек предоставляет проверку request-метода (GET, POST, PUT и т.д.) и иных параметров заголовка (к примеру, isAjax()), автоматом строит правила для REST API.

▲ 0

Перестаньте удалять гланды через задний проход!

Если нужно, то просто вешайте на блок display:none через тот же jQuery.

▲ 0
<?php if (strpos($_SERVER['REQUEST_URI'],'novosti')) { ?>
    <style>
        #novosti {display:none;}
    </style>
<?php } ?>

В $_SERVER['REQUEST_URI'] содержит имя скрипта, начиная от корневой директории виртуального хоста, и параметры.

strpos — возвращает позицию первого вхождения подстроки.

То есть если в строке $_SERVER['REQUEST_URI'] есть подстрока novosti, то он скроет блок.