Jump to content
Русская поддержка Invision Community

Построение динамических блоков на основе просматриваемой страницы

Для более продвинутых сайтов, построенных на приложении Страницы, вы можете изменить отображение дополнительного 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>

Теперь, чтобы добавить новые пункты в наше пользовательское меню в блоке, мы просто можем добавить их в массив.

 




×
×
  • Create New...

Important Information

By using our site you agree to our Privacy Policy