Jump to content
Invision Community

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


 Share

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

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

 Share


User Feedback

Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.