Code Monkey home page Code Monkey logo

bitrix.main.lookup.input's Introduction

bitrix.main.lookup.input

Автозаполнение (привязка к элементам) Бывает требуется добавить функционал автозаполнения (подсказка, которая всплывает под инпутом, когда мы что-то туда вписываем). Браузеры сами имеют такую опцию, но у нас стоит задача - сделать подсказки из определенного инфоблока. Если у Вас есть такая задача, здесь вы найдете простое решение здесь. :)

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

Путь:

/bitrix/components/bitrix/<b>main.lookup.input</b>/templates/iblockedit/ajax.php
  1. Копируем компонент main.lookup.input в своё пространство имён и переходим в файл ajax.php:

В конце находим строку:

echo Main\Web\Json::encode($arResult);;

Меняем на:

echo json_encode($arResult);
  1. Добавляем к нашему инпуту еще один скрытый инпут и блок, в который будут подгружаться предлогаемые варианты:
<input id="ajaxInput" type="text" value="">
<input type="hidden" id="ajaxInputIblock" value="<?=IBLOCK_GAMES?>">
<div class="mli-search-result-input"></div>
  1. Теперь нам нужно написать функцию, который отправляет через метод GET данные в этот обработчик и принимает json данные и раскладывает в массив js;
$(document).ready(function(){
    var search,iblock_id, mode, type, admin, lang, site;

    $('#ajaxInput').on('keyup',function(){
        search = $('#ajaxInput').val();
        iblock_id = $('#ajaxInputIblock').val();
        mode = 'SEARCH';
        type = 'ELEMENT';
        admin = 'Y';
        lang = 'ru';
        site = 'ru';

            $.ajax({
                url: "/bitrix/components/пространство_имен/main.lookup.input/templates/iblockedit/ajax.php",
                type: "GET",
                dataType: "json",
                data: {IBLOCK_ID:iblock_id, MODE:mode, TYPE:type, admin:admin, lang:lang, search:search, site:site},
            }).done(function(data){
                $('.mli-search-result-input').text('');
					      $('.mli-search-result-input').addClass('active');
                var html = "";
                // Скрытие всплывающего окна, если кликнули мимо
                $(document).mouseup(function (e){ 
			var div = $(".mli-search-result-games"); // тут указываем ID элемента
			if (!div.is(e.target) // если клик был не по нашему блоку
			    && div.has(e.target).length === 0) { // и не по его дочерним элементам
				div.removeClass('active'); // скрываем его
			}
		});
                
                for (var i=0; i < data.length; i++){
                    if(typeof data[i].NAME !== 'undefined'){
                        html += "<div data-inputID="+data[i].ID+" class='itemInput itemInput"+i+"'>"+[data[i].NAME].toString()+"</div>";
                    }
                }
                $('.mli-search-result-input').append(html);
            });
    });
    $('.mli-search-result-input').on('click',".itemInput", function(){
       var input_id = $(this).attr("data-inputID");
       var input_name = $(this).text();
       $('#ajaxInputResult').val(input_id);
       $('.mli-search-result-input').removeClass('active');
       $('#ajaxInput').val(input_name);
       // Какая нибудь отправка данных, если это не обходимо, должна быть тут
    });
    
    // Выбрать первый предложенный элемент при нажатии на ENTER
    $('#ajaxInput').on('keyup',function(){
      $(this).keypress(function(event){
        var keycode = (event.keyCode ? event.keyCode : event.which);
        if(keycode == '13'){
            $('.itemInput').click(); 
            $('#ajaxInput').blur();
        }
      });
    });    
    
});
  1. Наш функционал по идее расчитан под АДМИНИСТРАТОРА! поэтому нужно не забыть передать права. (Этот момент я заметил не сразу)

Вставьте Этот код в ajax.php вместо стандартного

либо:

Перед строкой:

if ($iblockId > 0)

Вставляем:

$iblockAccessLevel = 'element_read'; 
$filter = array(
	'CHECK_PERMISSIONS' => 'Y',
	'MIN_PERMISSION' => 'R'
);

bitrix.main.lookup.input's People

Contributors

sadovikow avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.