Создаем кастомный тип записи (Custom Post Type) с кастомными категориями (Custom Taxonomy). Живой поиск на Битрикс. Пример реализации Требуется мужчина search item php i

template

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

Search_string

Поисковая фраза. Если значение не задано, оно берётся из переданного через форму поиска запроса.

Search_types

Список идентификаторов иерархических типов для поиска (указываются через пробел). Если значение не указано, поиск оcуществляется по всем типам.

Search_branches

Список разделов в которых будет осуществляться поиск (указываются через пробел). Если значение не указано, поиск осуществляется по всем разделам. Параметр может принимать как id страниц, так и их URL.

Per_page

Количество результатов на странице. Если параметр не задан, будет взято значение, указанное в настройках модуля "Поиск".

%total%

Выводит общее количество новостей в ленте. Можно использовать для макроса %system numpages()% .

%per_page%

Выводит значение параметра per_page. Можно использовать для макроса %system numpages()% .

%list-class-first%

в случае, если элемент первый, выводит "first"

%list-class-last%

в случае, если элемент последний, выводит "last"

%list-class-odd%

в случае, если элемент четный, выводит "odd"

%list-class-even%

в случае, если элемент нечетный, выводит "even"

%list-position%

вставляет порядковый номер в списке

search_empty_result

Используется в том случае, если в результате поиска не найдено ни одной страницы. В таком случае этот блок выводится вместо блока search_block .

%last_search_string%

Выводит предыдущий поисковый запрос, если такой был.

search_block_line_quant

Выводит некий разделитель, который вставляется между результатами поиска.

Примеры использования

Найдено %total% страниц.

%lines%

%system numpages(%total%, %per_page%)%

END; $FORMS ["search_block_line" ] = << %num%. %name% %context%

END; $FORMS ["search_empty_result" ] = <<Извините. По данному запросу ничего не найдено.

END; ?>

От автора: приветствую вас друзья. В этой статье мы с вами продолжим реализацию живого поиска для сайта. Что такое живой поиск? Вы с ним сталкиваетесь постоянно, когда что-то ищете в Гугле или Яндексе. Как только вы начинаете набирать поисковый запрос, поисковик тут же начинает предлагать вам варианты, из которых вам остается лишь выбрать наиболее подходящий. Удобная штука, не так ли? Попробуем и мы реализовать нечто подобное.

Исходные файлы текущей статьи вы можете скачать по . Первую часть статьи вы можете найти по .

Итак, в первой части мы подготовили базу данных, которая будет использована для живого поиска, а также прикрутили виджет Autocomplete библиотеки jQuery UI к полю поиска на нашей странице. Пока что виджет работает с тестовыми данными, но сейчас мы с вами это исправим.

Прежде всего укажем для виджета другой источник данных, это будет, скажем, файл search.php, который нам необходимо также создать.

$(function(){ $("#search").autocomplete({ source: "search.php", }); });

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

Как видим, отправляется GET запрос с параметром term, значением которого является строка, набранная в поле поиска. При этом все происходит асинхронно, без перезагрузки страницы, т.е. используется AJAX.

Отлично, теперь остается лишь принять поступивший поисковый запрос и выдать ответ на него. Для этого потребуется организовать подключение к серверу БД и написать несложный код, получающий данные из БД по запросу. Код файл search.php будет примерно таким:

$db = mysqli_connect("localhost", "root", "", "world") or die("Нет соединения с БД"); mysqli_set_charset($db, "utf8") or die("Не установлена кодировка соединения"); /** * поиск автокомплит **/ function search_autocomplete(){ global $db; $search = trim(mysqli_real_escape_string($db, $_GET["term"])); $query = "SELECT Name FROM city WHERE Name LIKE "%{$search}%" LIMIT 10"; $res = mysqli_query($db, $query); $result_search = array(); while($row = mysqli_fetch_assoc($res)){ $result_search = array("label" => $row["Name"]); } return $result_search; } if(!empty($_GET["term"])){ $search = search_autocomplete(); exit(json_encode($search)); }

$ db = mysqli_connect ("localhost" , "root" , "" , "world" ) or die ("Нет соединения с БД" ) ;

mysqli_set_charset ($ db , "utf8" ) or die ("Не установлена кодировка соединения" ) ;

* поиск автокомплит

function search_autocomplete () {

global $ db ;

$ search = trim (mysqli_real_escape_string ($ db , $ _GET [ "term" ] ) ) ;

$ res = mysqli_query ($ db , $ query ) ;

$ result_search = array () ;

while ($ row = mysqli_fetch_assoc ($ res ) ) {

$ result_search = array ("label" = > $ row [ "Name" ] ) ;

return $ result_search ;

if (! empty ($ _GET [ "term" ] ) ) {

$ search = search_autocomplete () ;

exit (json_encode ($ search ) ) ;

Обратите внимание, функция search_autocomplete, которая и получает данные по запросу, должна возвращать эти данные в определенном формате, это должен быть массив с ключами label и значениями найденных городов. После вызова функции данные необходимо преобразовать в формат JSON.

Остается проверить работу нашего живого поиска. Для этого, как и в прошлый раз, наберем всего одну букву — a:

Отлично! В ответ мы получили десяток городов, в названии которых встречается введенная буква. Если мы продолжим набирать название, список вариантов будет изменяться, т.е. с каждой буквой будет отправляться новый запрос AJAX.

В этой статье я покажу, как можно создавать многоуровневое меню на PHP и MySQL . Безусловно, вариантов его создания можно придумать много, но, судя по количеству Ваших вопросов на эту тему, Вам нужен пример. И его я приведу в этой статье. Сразу отмечу, что данная статья имеет смысл только для тех, кто знает PHP и умеет работать с MySQL . Всем остальным сначала надо пройти этот , либо прочитать какие-нибудь книги по PHP и MySQL .

Для начала создадим таблицу в базе данных со следующими полями:

  • id - уникальный идентификатор.
  • title - анкор ссылки в меню.
  • link - адрес, на который будет вести пункт меню.
  • parent_id - родительский ID. Если родительского пункта нет, то здесь будет NULL (либо можно ещё 0 поставить).

С таблицей разобрались, теперь пришло время PHP-кода . Полный PHP-код приведён ниже:

$mysqli = new mysqli("localhost", "root", "", "db"); // Подключаемся к БД
$result_set = $mysqli->query("SELECT * FROM `menu`"); // Делаем выборку всех записей из таблицы с меню
$items = array(); // Массив для пунктов меню
while (($row = $result_set->fetch_assoc()) != false) $items[$row["id"]] = $row; // Заполняем массив выборкой из БД
$childrens = array(); // Массив для соответствий дочерних элементов их родительским
foreach ($items as $item) {
if ($item["parent_id"]) $childrens[$item["id"]] = $item["parent_id"]; // Заполняем массив
}
function printItem($item, $items, $childrens) {
/* Выводим пункт меню */
echo "

  • ";
    echo "".$item["title"]."";
    $ul = false; // Выводились ли дочерние элементы?
    while (true) {
    /* Бесконечный цикл, в котором мы ищем все дочерние элементы */
    $key = array_search($item["id"], $childrens); // Ищем дочерний элемент
    if (!$key) {
    /* Дочерних элементов не найдено */
    if ($ul) echo ""; // Если выводились дочерние элементы, то закрываем список
    break; // Выходим из цикла
    }
    unset($childrens[$key]); // Удаляем найденный элемент (чтобы он не выводился ещё раз)
    if (!$ul) {
    echo "
      "; // Начинаем внутренний список, если дочерних элементов ещё не было
      $ul = true; // Устанавливаем флаг
      }
      echo printItem($items[$key], $items, $childrens); // Рекурсивно выводим все дочерние элементы
      }
      echo "";
      }
      ?>

      Этот код полностью рабочий, однако, Вы должны понимать, что так никто не пишет (в частности, вывод через echo HTML-тегов ). И Ваша задача взять алгоритм из этого кода, но не сам код. А дальше этот алгоритм подключить к своему движку. Я постарался тщательно прокомментировать код вывода многоуровневого меню на PHP и MySQL , но, безусловно, он не самый прозрачный и требует уже неплохих начальных знаний. Если Вы ещё плохо знаете PHP и MySQL , то сначала настоятельно рекомендую пройти этот

      Основные задачи:

      • реализовать поиск таким образом, чтобы после ввода поискового запроса в строку, ниже этой строки появились результаты поиска
      • запрос на получение результата должен происходить только после окончания ввода поискового запроса

      Окей, поехали!

      Примерная вёрстка самого блока с поисковой строкой и div-ником, куда будем добавлять результаты поиска:

      Т.к. поиск доступен в шапке сайта, добавим соответствующие скрипты поиска и стилизации результатов:

      //подрубаем поиск: $APPLICATION->AddHeadScript("/search/ajax_search.js"); $APPLICATION->AddHeadScript("/search/jquery.mCustomScrollbar.js"); $APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/css/ajax_search.css"); $APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/css/jquery.mCustomScrollbar.min.css");

      Теперь посмотрим, что лежит в нашем ajax_search.js:

      Function get_result (){ //очищаем результаты поиска $("#search_result").html(""); //пока не получили результаты поиска - отобразим прелоадер $("#search_result").append("

      "); $.ajax({ type: "POST", url: "/search/ajax_search.php", data: "q="+q, dataType: "json", success: function(json){ //очистим прелоадер $("#search_result").html(""); $("#search_result").append(""); //добавляем каждый элемент массива json внутрь div-ника с class="live-search" (вёрстку можете использовать свою) $.each(json, function(index, element) { $("#search_result").find(".live-search").append(""+element.TITLE+""+element.BODY_FORMATED+""); //console.log (element.BODY_FORMATED); }); //стилизуем скроллинг $(".live-search").mCustomScrollbar({ scrollInertia: 500 }); } }); } var timer = 0; var q = ""; $(document).ready(function() { $("#q").keyup(function() { q = this.value; clearTimeout(timer); timer = setTimeout(get_result, 1000); }); $("#reset_live_search").click(function() { $("#search_result").html(""); }); });

      keyup функция осуществляем вызов функции get_result(), которая собственно и заполняет div-ник с id=»search_result» по аяксу.

      mCustomScrollbar — это просто вызов стилизации (можете отключить).

      Данные от /search/ajax_search.php мы получаем в формате JSON.

      С JS составляющей всё понятно, теперь посмотрим, что происходит в ajax_search.php:

      Search(array("QUERY" => $q, "SITE_ID" => LANG, "MODULE_ID" => "iblock", "CHECK_DATES" => "Y", "PARAM2" => "8")); $result = array(); while ($res = $obSearch->GetNext()){ $id = $res["ITEM_ID"]; //если нашли раздел: if (strripos($id, "S")!==false){ $result_item["TITLE"] = $res["TITLE"]; $result_item["URL"] = $res["URL"]; $result_item["BODY_FORMATED"] = $res["TITLE_FORMATED"]; $result = $result_item; } //если S-ки нету, то else{ $result_item["TITLE"] = $res["TITLE"]; $result_item["URL"] = $res["URL"]; $result_item["BODY_FORMATED"] = $res["BODY_FORMATED"]; $result = $result_item; } } echo json_encode($result); } ?>

      В данном случае поиск осуществляется методом Search Битриксового класса CSearch. В PARAM2 пишем в каком инфоблоке ищем. Результаты поиска запихиваем в массив $result. Обратите внимание, что в $res[‘ITEM_ID’] может быть как элемент, так и раздел. В зависимости от того, что нашли, в $result_item[‘BODY_FORMATED’] пихаем либо название раздела, либо кусок текста из найдённого элемента инфоблока.

      Updated on April 30, 2016

      I"m going to show you how to create simple search using PHP and MySQL. You"ll learn:

      • How to use GET and POST methods
      • Connect to database
      • Communicate with database
      • Find matching database entries with given word or phrase
      • Display results

      Preparation

      You should have Apache, MySQL and PHP installed and running of course (you can use for different platforms or WAMP for windows, MAMP for mac) or a web server/hosting that supports PHP and MySQL databases.

      Let"s create database, table and fill it with some entries we can use for search:

      • Go to phpMyAdmin, if you have server on your computer you can access it at http://localhost/phpmyadmin/
      • Create database, I called mine tutorial_search
      • Create table I used 3 fields, I called mine articles.
      • Configuration for 1st field. Name: id, type: INT, check AUTO_INCREMENT, index: primary

      INT means it"s integer
      AUTO_INCREMENT means that new entries will have other(higher) number than previous
      Index: primary means that it"s unique key used to identify row

      • 2nd field: Name: title, type: VARCHAR, length: 225

      VARCHAR means it string of text, maximum 225 characters(it is required to specify maximum length), use it for titles, names, addresses
      length means it can"t be longer than 225 characters(you can set it to lower number if you want)

      • 3rd field: Name: text, type: TEXT

      TEXT means it"s long string, it"s not necessary to specify length, use it for long text.

      • Fill the table with some random articles(you can find them on news websites, for example: CNN, BBC, etc.). Click insert on the top menu and copy text to a specific fields. Leave "id" field empty. Insert at least three.

      It should look something like this:

      • Create a folder in your server directory and two files: index.php and search.php (actually we can do all this just with one file, but let"s use two, it will be easier)
      • Fill them with default html markup, doctype, head, etc.

      Search

      • Create a form with search field and submit button in index.php, you can use GET or POST method, set action to search.php. I used "query" as name for text field

      GET - means your information will be stored in url (http://localhost/tutorial_search/search.php?query=yourQuery )
      POST - means your information won"t be displayed it is used for passwords, private information, much more secure than GET

      Ok, let"s get started with php.

      • Open search.php
      • Start php ()
      • Connect to a database(read comments in following code)

      < to > $query = mysql_real_escape_string($query); // makes sure nobody uses SQL injection $raw_results = mysql_query("SELECT * FROM articles WHERE (`title` LIKE "%".$query."%") OR (`text` LIKE "%".$query."%")") or die(mysql_error()); // * means that it selects all fields, you can also write: `id`, `title`, `text` // articles is the name of our table // "%$query%" is what we"re looking for, % means anything, for example if $query is Hello // it will match "hello", "Hello man", "gogohello", if you want exact match use `title`="$query" // or if you want to match just full word so "gogohello" is out use "% $query %" ...OR ... "$query %" ... OR ... "% $query" if(mysql_num_rows($raw_results) >

      ".$results["title"]."

      ".$results["text"]."

      "; // posts results gotten from database(title and text) you can also show id ($results["id"]) } } else{ // if there is no matching rows do following echo "No results"; } } else{ // if query length is less than minimum echo "Minimum length is ".$min_length; } ?>

      Done!

      Now it works. Try different words, variations, editing code, experiment. I"m adding full code of both files in case you think you"ve missed something. Feel free to ask questions or ask for tutorials.

      index.php

      Search

      search.php

      Search results = $min_length){ // if query length is more or equal minimum length then $query = htmlspecialchars($query); // changes characters used in html to their equivalents, for example: < to > $query = mysql_real_escape_string($query); // makes sure nobody uses SQL injection $raw_results = mysql_query("SELECT * FROM articles WHERE (`title` LIKE "%".$query."%") OR (`text` LIKE "%".$query."%")") or die(mysql_error()); // * means that it selects all fields, you can also write: `id`, `title`, `text` // articles is the name of our table // "%$query%" is what we"re looking for, % means anything, for example if $query is Hello // it will match "hello", "Hello man", "gogohello", if you want exact match use `title`="$query" // or if you want to match just full word so "gogohello" is out use "% $query %" ...OR ... "$query %" ... OR ... "% $query" if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following while($results = mysql_fetch_array($raw_results)){ // $results = mysql_fetch_array($raw_results) puts data from database into array, while it"s valid it does the loop echo "

      ".$results["title"]."

      ".$results["text"]."

      "; // posts results gotten from database(title and text) you can also show id ($results["id"]) } } else{ // if there is no matching rows do following echo "No results"; } } else{ // if query length is less than minimum echo "Minimum length is ".$min_length; } ?>

  • Последние материалы раздела:

    Почему режется скорость Интернета по WiFi: Бесплатные советы как ускорить передачу данных
    Почему режется скорость Интернета по WiFi: Бесплатные советы как ускорить передачу данных

    Плохая скорость интернета через роутер - одна из наиболее «популярных» проблем всех любителей беспроводного соединения . В предыдущих статьях мы...

    Контекстное меню в Windows
    Контекстное меню в Windows

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

    Продвижение в Instagram: самая подробная инструкция
    Продвижение в Instagram: самая подробная инструкция

    XXI век - стремительно меняющийся и ломающий прежние представления об успехе. Социальные сети стали феноменом, люди часами проводят время в режиме...