Для более продвинутых сайтов, построенных на приложении Страницы, вы можете изменить отображение дополнительного HTML или PHP блока в зависимости от просматриваемой пользователем страницы. Например, если у вас есть пользовательское меню, вы можете выделить его активный пункт.
Мы можем реализовать это путём проверки параметров, передаваемых в URL адресе. Хоть вы и получаете страницу по дружественному URL адресу, например такому http://<site.ru>/категория/страница, на самом деле передаётся стандартный адрес, например как http://<site.ru>/index.php?app=cms&module=pages&controller=page&path=/категория/страница. Обратите внимание, что в параметрах адреса мы можем определить на какую страницу ведёт эта ссылка. Когда мы получаем доступ к объекту \IPS\Request::i(), мы можем реализовать такую конструкцию:
{{if strpos( \IPS\Request::i()->path, 'section/page' ) !== FALSE}} <!-- Мы знаем, что пользователь находится на странице /категория/страница --> {{elseif strpos( \IPS\Request::i()->path, 'othersection/otherpage' ) !== FALSE}} <!-- Мы знаем, что пользователь находится на странице /другая_категория/другая_страница --> {{endif}}
Обратите внимание, что для достоверности мы используем PHP функцию strpos, проверяющую наличие URL адреса страницы в параметре, а не просто сравнение.
Пример
Предположим, что мы создали HTML блок, куда добавили HTML код, отображающий меню, и мы хотим выделить активный пункт этого меню в зависимости от страницы, на которой находимся.
HTML код нашего блока меню может выглядеть следующим образом:
<ul class='ipsList_inline cMyMenu'> <li {{if strpos( \IPS\Request::i()->path, 'help/home' ) !== FALSE}}class='active'{{endif}}> <a href='/help/home'>Домой</a> </li> <li {{if strpos( \IPS\Request::i()->path, 'help/faq' ) !== FALSE}}class='active'{{endif}}> <a href='/help/faq'>FAQ</a> </li> <li {{if strpos( \IPS\Request::i()->path, 'help/tutorials' ) !== FALSE}}class='active'{{endif}}> <a href='/help/tutorials'>База знаний</a> </li> </ul>
Если бы у нас было много пунктов меню, такая конструкция была бы непрактичной и слишком утомительной в реализации. Мы можем сделать следующий цикл:
// Используем переменную PHP для хранения массива страниц => имена страниц в цикле {{$myPages = array('help/home' => "Домой", 'help/faq' => "FAQ", 'help/tutorials' => "База знаний", 'help/qna/listing' => "Вопросы", 'help/qna/recent' => "Последние вопросы", 'help/contact' => "Свяжитесь с нами");}} <ul class='ipsList_inline cMyMenu'> {{foreach $myPages as $url => $title}} <li {{if strpos( \IPS\Request::i()->path, $url ) !== FALSE}}class='active'{{endif}}> <a href='{$url}'>{$title}</a> </li> {{endforeach}} </ul>
Теперь, чтобы добавить новые пункты в наше пользовательское меню в блоке, мы просто можем добавить их в массив.