Интеграция адаптивного Bootstrap шаблона сайта в 1С-Битрикс по шагам - УРОК 4


В четвёртом уроке мы рассмотрим интеграцию очень непростого, но важного компонента - поисковой строки в шапку сайта!

форма поиска 1С-Битрикс в шапке Boottrap сайта

Помимо поисковой строки в шапке у нас на сайте будет ещё несколько элементов поиска, однако пока мы не хотели бы забегать вперёд, поэтому вероятно вернёмся к ним в одном из следующих уроков.

Для начала создадим раздел сайта /search/ в котором будет находиться страница поиска. На странице index.php мы разместим самый обычный компонент страницы поиска bitrix:search.page с дефолтным шаблоном:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
?><?$APPLICATION->IncludeComponent(
"bitrix:search.page",
"",
Array(
"USE_SUGGEST" => "Y",
"AJAX_MODE" => "N",
"RESTART" => "N",
"NO_WORD_LOGIC" => "N",
"USE_LANGUAGE_GUESS" => "Y",
"CHECK_DATES" => "Y",
"USE_TITLE_RANK" => "Y",
"DEFAULT_SORT" => "rank",
"FILTER_NAME" => "",
"SHOW_WHERE" => "N",
"SHOW_WHEN" => "N",
"PAGE_RESULT_COUNT" => "50",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"CACHE_NOTES" => "",
"DISPLAY_TOP_PAGER" => "Y",
"DISPLAY_BOTTOM_PAGER" => "Y",
"PAGER_TITLE" => "Результаты поиска",
"PAGER_SHOW_ALWAYS" => "Y",
"PAGER_TEMPLATE" => "",
"arrFILTER" => array(),
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N"
),
false
);?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Как можно заметить он мало похож на красивую поисковую строку, расположенную в верхней части шаблона:

компонент поиска с шаблоном .defult (до интеграции в bootstrap вёрстку)

Мы ещё вернёмся к оформлению этого компонента, однако в настоящий момент страница /search/index.php с компонентом поиска нужна нам только для проверки работоспособности поиска.


Поисковая строка

Начнём интеграцию поисковой строки для шаблона с размещения на нашей тестовой рабочей странице (например 1.php) компонента bitrix:search.form с шаблоном suggest. Зададим так же путь к разделу поиска /search/, используя константу с адресом сайта:

<?$APPLICATION->IncludeComponent("bitrix:search.form", "suggest", array(
"PAGE" => "#SITE_DIR#search/"
),
false
);?>

Скопируем шаблон компонента в шаблон сайта под именем "top".

Обратим внимание, что внутри компонента вызывается другой компонента - search.suggest.input. В данном случае мы не будем пользоваться подобной структурой, поскольку нашей цели можно достичь более простым путём.

Заменим весь код внутри шаблона компонента на нашу поисковую форму из вёрстки и обратив на 3 ыделенных цветом элемента:

<form id="search-form" action="search.php" method="GET" accept-charset="utf-8" class="navbar-form">
<input type="text" name="s" onblur="if(this.value=='') this.value=''" onfocus="if(this.value =='' ) this.value=''">
<a href="#" onclick="document.getElementById('search-form').submit()"></a>
</form>

1) accept-charset="utf-8"

Мы удалим данный элемент. В случае, если разработка производится на проекте с отличной от UTF-8 кодировкой, наличие этого параметра приведёт к повреждению передаваемого поискового запроса.

2) name="s" 

Если мы посмотрим на страницу поиска, которую мы создали, то она по умолчанию получает поисковый запрос из переменной "q", поэтому и для формы следует переменную переименовать.

Приведение к стандартны значениям может и покажется "не красивым", однако значительно упрощает жизнь при работе с родными компонентами системы.

3) action="search.php"

Очевидно, здесь передаётся адрес скрипта для которого предназначено действие с нашей формой.

В шаблоне формы поиска это поле нигде не фигурировало, поскольку поле для ввода поискового запроса задавалось отдельным компонентом.

Однако в параметрах компонента мы заполнили параметр "PAGE" => "#SITE_DIR#search/". Куда же он делся?

Очевидно, что он был передан компоненту, вызываемому в шаблоне. Что же делать? Посмотрим на ЛОГИКУ компонента формы поиска и узнаем как же этот параметр обрабатывается. Логика компонента находится в файле /bitrix/components/bitrix/search.form/component.php.

Ни в коем случае не удаляем и не вносим изменения в этот файл! Всё содержимое папки /bitrix/components/bitrix/ - системные компоненты, т.е. часть ядра. Они необходимы для корректной работы продукта и могут быть изменены автоматически при обновлении системы. Правка системных компонентов (или их шаблонов) считается дурным тоном и категорически запрещена. Шаблоны компонентов необходимо копировать в шаблоны сайтов (как мы уже делали в этом и предыдущем уроке), а сами компоненты при необходимости модификации (в крайнем случае) - выносить в собственное пространство имён. Мы коснёмся этого вопроса в будущем.

Обратим внимание в коде компонента на строку:

$arResult["FORM_ACTION"] = htmlspecialcharsbx(str_replace("#SITE_DIR#", SITE_DIR, $arParams["PAGE"]));

Мы видим, в этой строке происходит преобразование нашего параметра в адрес. Так же тперь мы знаем как вызвать его в шаблоне - $arResult["FORM_ACTION"].

В результате итоговый код шаблона поисковой строки будет выглядеть:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<form id="search-form" action="<?=$arResult["FORM_ACTION"]?>" method="GET" class="navbar-form">
<input type="text" name="q" onblur="if(this.value=='') this.value=''" onfocus="if(this.value =='' ) this.value=''">
<a href="#" onclick="document.getElementById('search-form').submit()"></a>
</form>


Обратим внимание, что сейчас наша поисковая форма может не всегда корректно срабатывать (например, на нажатие кнопки с пиктограммой лупы). Это вызвано тем, что на странице существует 2 формы с одинаковым id="search-form". Это является семантической ошибкой, которая устранится на всех страницах, где будет находиться лишь 1 форма - наш компонент.


Заменим форму в шаблоне на вызов компонента.


Материалы данного урока (демо данные и шаблон сайта) доступны в нашем репозитории на GitHub.


Интеграция адаптивного Bootstrap шаблона сайта в 1С-Битрикс по шагам - УРОК 4

<p><b>В четвёртом уроке мы рассмотрим интеграцию очень непростого, но важного компонента - поисковой строки в шапку сайта!</b></p> <p><img src="/upload/medialibrary/4b0/4b0cff887432fd60143117f674c19129.png" title="форма поиска 1С-Битрикс в шапке сайта" hspace="5" vspace="5" border="0" alt="форма поиска 1С-Битрикс в шапке Boottrap сайта" width="700" height="257" /></p> <p><i>Помимо поисковой строки в шапке у нас на сайте будет ещё несколько элементов поиска, однако пока мы не хотели бы забегать вперёд, поэтому вероятно вернёмся к ним в одном из следующих уроков.</i></p> <p>Для начала создадим раздел сайта /search/ в котором будет находиться страница поиска. На странице index.php мы разместим самый обычный компонент страницы поиска bitrix:search.page с дефолтным шаблоном:</p> <table border="1" cellpadding="1" cellspacing="1"> <tbody> <tr><td>&lt;? <br /> require($_SERVER[&quot;DOCUMENT_ROOT&quot;].&quot;/bitrix/header.php&quot;); <br /> ?&gt;&lt;?$APPLICATION-&gt;IncludeComponent( <br /> &quot;bitrix:search.page&quot;, <br /> &quot;&quot;, <br /> Array( <br /> &quot;USE_SUGGEST&quot; =&gt; &quot;Y&quot;, <br /> &quot;AJAX_MODE&quot; =&gt; &quot;N&quot;, <br /> &quot;RESTART&quot; =&gt; &quot;N&quot;, <br /> &quot;NO_WORD_LOGIC&quot; =&gt; &quot;N&quot;, <br /> &quot;USE_LANGUAGE_GUESS&quot; =&gt; &quot;Y&quot;, <br /> &quot;CHECK_DATES&quot; =&gt; &quot;Y&quot;, <br /> &quot;USE_TITLE_RANK&quot; =&gt; &quot;Y&quot;, <br /> &quot;DEFAULT_SORT&quot; =&gt; &quot;rank&quot;, <br /> &quot;FILTER_NAME&quot; =&gt; &quot;&quot;, <br /> &quot;SHOW_WHERE&quot; =&gt; &quot;N&quot;, <br /> &quot;SHOW_WHEN&quot; =&gt; &quot;N&quot;, <br /> &quot;PAGE_RESULT_COUNT&quot; =&gt; &quot;50&quot;, <br /> &quot;CACHE_TYPE&quot; =&gt; &quot;A&quot;, <br /> &quot;CACHE_TIME&quot; =&gt; &quot;3600&quot;, <br /> &quot;CACHE_NOTES&quot; =&gt; &quot;&quot;, <br /> &quot;DISPLAY_TOP_PAGER&quot; =&gt; &quot;Y&quot;, <br /> &quot;DISPLAY_BOTTOM_PAGER&quot; =&gt; &quot;Y&quot;, <br /> &quot;PAGER_TITLE&quot; =&gt; &quot;Результаты поиска&quot;, <br /> &quot;PAGER_SHOW_ALWAYS&quot; =&gt; &quot;Y&quot;, <br /> &quot;PAGER_TEMPLATE&quot; =&gt; &quot;&quot;, <br /> &quot;arrFILTER&quot; =&gt; array(), <br /> &quot;AJAX_OPTION_JUMP&quot; =&gt; &quot;N&quot;, <br /> &quot;AJAX_OPTION_STYLE&quot; =&gt; &quot;Y&quot;, <br /> &quot;AJAX_OPTION_HISTORY&quot; =&gt; &quot;N&quot; <br /> ), <br /> false <br /> );?&gt;&lt;?require($_SERVER[&quot;DOCUMENT_ROOT&quot;].&quot;/bitrix/footer.php&quot;);?&gt;</td></tr> </tbody> </table> <p>Как можно заметить он мало похож на красивую поисковую строку, расположенную в верхней части шаблона:</p> <p><img src="/upload/medialibrary/c2e/c2e653386db1637a9ed30f4020473b17.png" title="компонент поиска с шаблоном .defult (до интеграции в bootstrap вёрстку)" hspace="5" vspace="5" border="0" alt="компонент поиска с шаблоном .defult (до интеграции в bootstrap вёрстку)" width="327" height="214" /></p> <p>Мы ещё вернёмся к оформлению этого компонента, однако в настоящий момент страница /search/index.php с компонентом поиска нужна нам только для проверки работоспособности поиска.</p> <p> <br /> </p> <h2>Поисковая строка</h2> <p>Начнём интеграцию поисковой строки для шаблона с размещения на нашей тестовой рабочей странице (например 1.php) компонента bitrix:search.form с шаблоном suggest. Зададим так же путь к разделу поиска /search/, используя константу с адресом сайта:</p> <table border="1" cellpadding="1" cellspacing="1"> <tbody> <tr><td>&lt;?$APPLICATION-&gt;IncludeComponent(&quot;bitrix:search.form&quot;, &quot;suggest&quot;, array( <br /> &quot;PAGE&quot; =&gt; &quot;#SITE_DIR#search/&quot; <br /> ), <br /> false <br /> );?&gt;</td></tr> </tbody> </table> <p>Скопируем шаблон компонента в шаблон сайта под именем &quot;top&quot;.</p> <p>Обратим внимание, что внутри компонента вызывается другой компонента - search.suggest.input. В данном случае мы не будем пользоваться подобной структурой, поскольку нашей цели можно достичь более простым путём.</p> <p>Заменим весь код внутри шаблона компонента на нашу поисковую форму из вёрстки и обратив на 3 ыделенных цветом элемента:</p> <table border="1" cellpadding="1" cellspacing="1"> <tbody> <tr><td>&lt;form id=&quot;search-form&quot; <span style="background-color: rgb(0, 255, 0);">action=&quot;search.php&quot;</span> method=&quot;GET&quot; <span style="background-color: rgb(255, 0, 0);">accept-charset=&quot;utf-8&quot;</span> class=&quot;navbar-form&quot;&gt; <br /> &lt;input type=&quot;text&quot; <span style="background-color: rgb(0, 174, 239);">name=&quot;s&quot;</span> onblur=&quot;if(this.value=='') this.value=''&quot; onfocus=&quot;if(this.value =='' ) this.value=''&quot;&gt; <br /> &lt;a href=&quot;#&quot; onclick=&quot;document.getElementById('search-form').submit()&quot;&gt;&lt;/a&gt; <br /> &lt;/form&gt;</td></tr> </tbody> </table> <p>1) <span style="background-color: rgb(255, 0, 0);">accept-charset=&quot;utf-8&quot;</span></p> <p>Мы удалим данный элемент. В случае, если разработка производится на проекте с отличной от UTF-8 кодировкой, наличие этого параметра приведёт к повреждению передаваемого поискового запроса.</p> <p>2) <span style="background-color: rgb(0, 174, 239);">name=&quot;s&quot;</span> </p> <p>Если мы посмотрим на страницу поиска, которую мы создали, то она по умолчанию получает поисковый запрос из переменной &quot;q&quot;, поэтому и для формы следует переменную переименовать.</p> <p>Приведение к стандартны значениям может и покажется &quot;не красивым&quot;, однако значительно упрощает жизнь при работе с родными компонентами системы.</p> <p>3) <span style="background-color: rgb(0, 255, 0);">action=&quot;search.php&quot;</span></p> <p>Очевидно, здесь передаётся адрес скрипта для которого предназначено действие с нашей формой.</p> <p>В шаблоне формы поиска это поле нигде не фигурировало, поскольку поле для ввода поискового запроса задавалось отдельным компонентом.</p> <p>Однако в параметрах компонента мы заполнили параметр &quot;PAGE&quot; =&gt; &quot;#SITE_DIR#search/&quot;. Куда же он делся?</p> <p>Очевидно, что он был передан компоненту, вызываемому в шаблоне. Что же делать? Посмотрим на ЛОГИКУ компонента формы поиска и узнаем как же этот параметр обрабатывается. Логика компонента находится в файле /bitrix/components/bitrix/search.form/component.php.</p> <p><font color="#ff0000"><b>Ни в коем случае не удаляем и не вносим изменения в этот файл!</b> Всё содержимое папки /bitrix/components/bitrix/ - системные компоненты, т.е. часть ядра. Они необходимы для корректной работы продукта и могут быть изменены автоматически при обновлении системы. Правка системных компонентов (или их шаблонов) считается дурным тоном и категорически запрещена.</font> <i>Шаблоны компонентов необходимо копировать в шаблоны сайтов (как мы уже делали в этом и предыдущем уроке), а сами компоненты при необходимости модификации (в крайнем случае) - выносить в собственное пространство имён. Мы коснёмся этого вопроса в будущем.</i></p> <p>Обратим внимание в коде компонента на строку:</p> <table border="1" cellpadding="1" cellspacing="1"> <tbody> <tr><td>$arResult[&quot;FORM_ACTION&quot;] = htmlspecialcharsbx(str_replace(&quot;#SITE_DIR#&quot;, SITE_DIR, $arParams[&quot;PAGE&quot;]));</td></tr> </tbody> </table> <p>Мы видим, в этой строке происходит преобразование нашего параметра в адрес. Так же тперь мы знаем как вызвать его в шаблоне - $arResult[&quot;FORM_ACTION&quot;].</p> <p>В результате итоговый код шаблона поисковой строки будет выглядеть:</p> <table border="1" cellpadding="1" cellspacing="1"> <tbody> <tr><td>&lt;?if(!defined(&quot;B_PROLOG_INCLUDED&quot;) || B_PROLOG_INCLUDED!==true)die();?&gt; <br /> <br /> &lt;form id=&quot;search-form&quot; action=&quot;&lt;?=$arResult[&quot;FORM_ACTION&quot;]?&gt;&quot; method=&quot;GET&quot; class=&quot;navbar-form&quot;&gt; <br /> &lt;input type=&quot;text&quot; name=&quot;q&quot; onblur=&quot;if(this.value=='') this.value=''&quot; onfocus=&quot;if(this.value =='' ) this.value=''&quot;&gt; <br /> &lt;a href=&quot;#&quot; onclick=&quot;document.getElementById('search-form').submit()&quot;&gt;&lt;/a&gt; <br /> &lt;/form&gt;</td></tr> </tbody> </table> <p> <br /> </p> <p><i>Обратим внимание, что сейчас наша поисковая форма может не всегда корректно срабатывать (например, на нажатие кнопки с пиктограммой лупы). Это вызвано тем, что на странице существует 2 формы с одинаковым id=&quot;search-form&quot;. Это является семантической ошибкой, которая устранится на всех страницах, где будет находиться лишь 1 форма - наш компонент.</i></p> <p> <br /> </p> <p>Заменим форму в шаблоне на вызов компонента.</p> <p> <br /> </p> <p>Материалы данного урока (демо данные и шаблон сайта) доступны в нашем репозитории на <noindex><a href="https://github.com/lexnekr/bitrixtemplate_stylish/tree/888c52470bfff050dd6112f0a782d4e9c95212ae" target="_blank" rel="nofollow" >GitHub</a></noindex>.</p> <div style="text-align: right;"><a href="http://plus.google.com/+АлексейЗадойный?rel=author" target="_blank" >Задойный А.В.</a></div>

Возврат к списку

Яндекс.Метрика