Показать сообщение отдельно
  #1 (permalink)  
Старый 26.10.2015, 18:02
Интересующийся
Отправить личное сообщение для decadent42 Посмотреть профиль Найти все сообщения от decadent42
 
Регистрация: 26.10.2015
Сообщений: 17

Создание виджета "Создать страницу: [title]" При отсутствии результатов в Autocomplet
Здравствуйте, ситуация такая: нужно создать виджет, который появлялся бы, если в базе данных отсутствует запись подобная введённой в поле. Виджет добавляется к списку Autocomplet с текстом "Создать страницу: [title]" , где [title] - данные из поля. Т.е. чтобы виджет показывался не тогда, когда значения autocomplete отсутствовали, а когда среди них не было подобных данных. При нажатии на него срабатывает php функция, которая создаёт такую запись. PHP функцию написал, обычный autocomplete тоже, но вот этот виджет никак не могу придумать, как сделать. Подскажите, пожалуйста!
Файл autocomplete.js с Jquery ui и комментариями:
(function ($) {

Drupal.behaviors.jqe = {
  attach: function (context, settings) {
    $("#jqe-autocomplete", context).makeJqeAutocomplete();
  }// attach
};

$.widget( "jqe.jqeautocomplete", $.ui.autocomplete, {
  // Взял из последней версии (1.10). Чуть увеличил (в оригинале + 1).
  _resizeMenu: function() {
    var ul = this.menu.element;
    ul.outerWidth(Math.max(
    // Firefox wraps long text (possibly a rounding bug)
    // so we add 1px to avoid the wrapping (#7513)
    ul.width("").outerWidth() + 2,
    this.element.outerWidth()
    ));
  },
  // Формируем содержимое одного пункта меню со стилизацией.
  _renderItem: function(ul, item) {
    var line = '<a>' +
      '<span class="jqe-item-bg ' + item.value.type + '"></span>' +
      '<span class="jqe-item-info">[' + item.value.name + ']</span>' +
      '<span class="jqe-item-label">' + item.value.title + '</span>' +
      '<span class="jqe-item-info">(' + item.value.created + ')</span>' +
      '</a>';
    return $('<li></li>')
    .data("item.autocomplete", item)
    .append($(line))
    .appendTo(ul);
  }
});

  $.fn.makeJqeAutocomplete = function() {
    var $input = $(this);
    // Подключаем наш виджет к полю ввода.
    $input.jqeautocomplete({
      source: function(request, response) {
        $.ajax({
          // Определенный модулем путь запроса.
          url: Drupal.settings.basePath + "ajax/jqe-autocomplete",
          type: 'post',
          data: {
            // Текст из поля ввода.
            input: request.term,
            // Ограничение количества для запроса.
            maxItems: 12
          },
          success: function(data) {
            response($.map(data, function(item) {
              return {
                // В качестве значения пункта меню весь объект.
                // В нашем виджете будет доступен как item.value в функции _renderItem.
                value: item
                // Обычно здесь формируется содержимое одного пункта меню.
                // Но поскольку мы хотим его стилизовать, сделаем это в
                // _renderItem нашего виджета.
                //label: "[" + item.name + "] " + item.title + " (" + item.created + ")"
              };
            }));
          }
        });
      },
      // Количество символов в поле ввода, с которого запускается запрос.
      minLength: 2,
      focus: function(event, ui) {
        // Тест в поле ввода будет меняться в зависимости от того
        // пункта меню, над которым находится курсор.
        $input.val(ui.item.value.title);
        return false;
      },
      // Выбрали.
      select: function(event, ui) {
        // nid скрытому полю.
        $('#jqe-autocomplete-nid').val(ui.item ? ui.item.value.nid : 0);
        // текст - в поле.
        $input.val(ui.item ? ui.item.value.title : this.value);
        return false;
      }
    });

    return this;
  };
})(jQuery);

ПОМОГИТЕ!!!
Ответить с цитированием