1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.3.x Прицепляем autocomplete к любому элементу формы в шаблонах без PHP

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 16.06.2014.

Загрузка
  1. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Недавно в одном аддоне мне понадобилось прицепить к произвольному элементу формы в шаблоне автоподсказку (пользователь должен был вводить в это поле ник пользователя).

    Сделать это довольно просто и без написания PHP кода. Создаем модификацию шаблона, который содержит нужное нам поле и с ее помощью добавляем в шаблон такой код:

    Код:
    <script language="javascript">
    $(function() {
      var fr_tm_element = $("#ctrl_custom_field_ThreadModerator"); //это ID поля, которое автодополняем
      fr_tm_element.attr('data-acurl', 'admin.php?users/search-name&_xfResponseType=json');
      fr_tm_element.attr('data-acextrafields', '#ctrl_search_type');
      fr_tm_element.attr('autocomplete', 'off');
      XenForo.create('XenForo.AutoComplete', fr_tm_element);
    });
    </script>
    
     
    Romchik® и Mirovinger нравится это.
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Хм. Достаточно просто в класс к этому input добавить AutoComplete. А ксен (набор скриптов, идущий ко всем страницам) уже сам цепляет скрипты ко всем элементам с этим классом.
    Кстати, Вы привели код для шаблона в админке. Для паблика должен быть другой код. И, опять таки, достаточно просто в класс элементу добавить AutoComplete. А там автоматом подцепится автодополнение что в админке, что в паблике.
    --- добавлено : Jun 16, 2014 4:02 AM ---
    И еще. Намного интереснее цеплять свое автодополнение. Делается это не сложно. Если интересно, могу дать пример. На офе это есть.
    --- добавлено : Jun 16, 2014 4:06 AM ---
    И еще один нюанс. Для того, чтобы не добавлялась запятая и в поле вводилось только одно имя, а не несколько через запятую, нужно добавить опять же в класс помимо AutoComplete специальный класс AcSingle.
     
    Последнее редактирование модератором: 24.06.2014
    Mirovinger нравится это.
  3. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Спасибо за комментарии.

    Этот скрипт у меня работает именно в паблике. Правда, я писал его в расчете именно на администраторов. Другим пользователям этот функционал доступен не должен был быть. Несмотря на то, что acurl указывает на админку, в паблике все работает нормально. Правда, только для администраторов.

    Про свое автодополнение на оффе я читал, спасибо.

    Что касается добавления класса Autocomplete, я бы, наверное, так и поступил, если бы мог изменить модификацией шаблона само поле, для которого я реализую автодополнение. В моем случае это поле создавалось другим аддоном динамически в template_post_render. Если я AutoComplete назначаю через .addClass, поле автодополняемым не становится. .ready() в XenForo отрабатывает раньше, а изменить порядок выполнения обработчиков, похоже, нельзя.
     
    Последнее редактирование: 16.06.2014
    Mirovinger нравится это.
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А почему бы тогда прямо в код того аддона не включить нужный класс? Я к тому, что лишние скрипты на странице - это всегда зло. Хотя в данном конкретном случае это, наверное, и не так критично, но все же.
     
  5. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    В том аддоне не просто поле вставляется в чистом виде. Там список полей (мое нужное внутри этого списка) получается из сериализованных данных, которые приходят из базы. Сложная логика, а я не люблю накладывать сложные патчи на чужие работы. Много работы при обновлении. Я и так там кое что поменял.

    Конечно, лишние скрипты на странице зло. Но... патч чужого кода тоже :) Нам дано только выбрать то, что нам кажется злом меньшим :)
     
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну тогда надо было автора плагина пнуть, пусть сразу встроит нужный функционал. Тогда и все чистенько, и обновление без головняков :)
     
    Kolya groza morey нравится это.
  7. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Да, я все собираюсь ему написать :)
     

Поделиться этой страницей