Форум русской поддержки Joomla!® CMS
20.07.2017, 16:36:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как создать список множественного выбора с возможностью текстовой фильтрации опций и отображением сп?

 (Прочитано 222 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« : 09.06.2017, 13:52:31 »

Добрый день.

Суть стоящей передо мной задачи в следующем - для разрабатываемого компонента создать кастомное поле множественного выбора с загруженными в него опциями на основании данных из определенной таблицы БД для добавления через xml-файлы в формы  1. настроек пунктов меню и 2. создания элементов контента в панели управления компонентом.  В поле должна присутствовать возможность фильтрации опций посредством ввода текста и отображением выбранных опций в виде блоков над текстовой строкой, как multiple-список, добавленный в xml-файл настройки формы пункта меню, только со сформированными заранее опциями, а не прописанными вручную. Подскажите пожалуйста, как это можно реализовать? Моя попытка найти готовый пример реализации в компонентах Joomla не увенчалась успехом.
Записан
fsv
Практически профи
*******

Репутация: +367/-2
Offline Offline

Пол: Мужской
Сообщений: 2543


« Ответ #1 : 09.06.2017, 14:37:15 »

https://docs.joomla.org/SQL_form_field_type
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #2 : 22.06.2017, 17:32:22 »

fsv, благодарю Вас за ответ. На вкладке настроек пункта меню этот тип поля работает как надо, но в панели управления компонентом, в layout=edit, он отображается и ведёт себя как обычный html-список select. Подскажите, пожалуйста, каким образом реализовать описанную выше функциональность в ПУ компонента, в layout-e edit?
Записан
fsv
Практически профи
*******

Репутация: +367/-2
Offline Offline

Пол: Мужской
Сообщений: 2543


« Ответ #3 : 22.06.2017, 20:24:45 »

смотрите, какие скрипты и стили грузятся там, где нормально
или что-то не то сделали.
Записан
Septdir
Практически профи
*******

Репутация: +93/-3
Online Online

Пол: Мужской
Сообщений: 1942


Skype: septdir


« Ответ #4 : 22.06.2017, 20:30:18 »

мб chosen отдельно подключить, но должно и так работать. А вообще смотрите в консоль.
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #5 : 22.06.2017, 23:16:27 »

ок, буду пробовать, отпишусь по результатам
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #6 : 30.06.2017, 19:31:57 »

поля начали отображаться как следует при добавлении кода:

Код:
$document->addScriptDeclaration(
'
jQuery(document).ready(function (){
jQuery("select").chosen({"disable_search_threshold":10,"search_contains":true,"allow_single_deselect":true,"placeholder_text_multiple":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","placeholder_text_single":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435","no_results_text":"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442"});
});
');


$document->addScript("/joomla/media/jui/js/chosen.jquery.min.js");
$document->addStyleSheet("/joomla/media/jui/css/chosen.css");
,
но если в них было выбрано более одного значения, то после сохранения они не отображаются. Перед записью в кастомную таблицу компонента выбранные значения преобразуются в строку посредством implode (',', $selected_values). В случае с одним значением все работает отлично. Но проблема видимо в том, что я не знаю в каком формате необходимо предоставить коду, формирующему список множественного выбора, лежащий в основе этого поля, сохраненные значения, чтобы он на их основе сформировал необходимые <option selected></option>. Попытка найти этот код через компонент меню не привела меня к желаемому результату. Теперь у меня есть три предположения:

1. либо формат данных у меня неправильный (хотя вместо implode я пробовал преобразовывать массив в json-строку через json_encode, так как в компоненте меню настройки подобного поля сохранены в виде json-строки)
2. либо этого кода нет по умолчанию и мне его необходимо написать самому
3. либо этот код на js и его необходимо подключить (скрипты на работающей и неработающей страницах я сравнивал и подключал недостающие на неработающей)

Подскажите, пожалуйста, в чём может быть причина?!

Записан
fsv
Практически профи
*******

Репутация: +367/-2
Offline Offline

Пол: Мужской
Сообщений: 2543


« Ответ #7 : 04.07.2017, 02:49:54 »

Цитировать
но если в них было выбрано более одного значения, то после сохранения они не отображаются. Перед записью в кастомную таблицу компонента выбранные значения преобразуются в строку посредством implode (',', $selected_values). В случае с одним значением все работает отлично. Но проблема видимо в том, что я не знаю в каком формате необходимо предоставить коду, формирующему список множественного выбора,
Если есть implode, должно быть explode.
Например, в модели в save
Код
...
if (isset($data['users_control_ids']) && is_array($data['users_control_ids']))
{
   $data['users_control_ids'] = implode(',', $data['users_control_ids']);
}
...
return parent::save($data);
в модели
Код
protected function loadFormData()
{
   $app = JFactory::getApplication();
   $id = $app->input->getInt('id', 0);
   $data = $app->getUserState( 'com_mycomponent.edit.myview'.$id.'.data', array() );
   if ( empty( $data ) )
   {
       $data = $this->getItem();
       $data->users_control_ids = explode(',', $data->users_control_ids);
   }
   return $data;
}
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #8 : 04.07.2017, 20:58:19 »

Да, дело было именно в этом, благодарю вас за помощь. Плюсую в карму.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet