Цей клас було створено з основною метою - отримати інструменти для швидкого створення різних полів, форм і компонентів при розробці модулів, які працюватимуть у повній сумісності з системою EGO CRM.
Клас «ui::» містить два блоки методів різного призначення:
- Методи, що допомагають швидко відмалювати різні поля форм або компоненти (dropdown, tabs, gallery) з урахуванням синхронізації з системою EGO CRM
- Методи, які дозволяють ефективно обробляти форми (збереження полів форми тощо)
Повна документація представлена за посиланням нижче:
У представлених прикладах значення полів, крім полів з файлами, зберігаються за допомогою класу «storage::» (використовується параметр «value_storage»). Збережені значення видно тільки Вам.
Файли, які ви завантажуєте на цій сторінці прикладів, бачите лише ви.
У всіх прикладах з файлами ми використовуємо параметр «auto_delete» зі значенням «1». Це означає, що всі файли, завантажені вами, будуть видалені через 1 добу.
Методи використовуються для відмалювання полів різних типів і включають багато параметрів.
Зверніть увагу, що деякі поля мають розширені версії (описані у розділі «Одиночні форми»).
Використовуйте конструктор при створенні необхідного набору параметрів, який представлений у документації класу «ui::» для кожного методу.
Ми наводимо посилання на конструктор у кожному прикладі, щоб Ви могли переглянути значення параметрів, які використовуються у прикладах.
$args = array();
$args['in_div'] = true;
$args['size'] = '';
$args['handler_click'] = 'my_handler_forms_1';
$args['theme'] = 'primary';
$args['text'] = 'Button text';
$args['icon'] = array('user', 'far', '');
$str .= ui::btn($args);
//===
$args = array();
$args['in_div'] = true;
$args['size'] = 'sm';
$args['btn_open_img'] = media_link('c1c3ad469424684ae939');
$args['theme'] = 'warning';
$args['text'] = 'Open image';
$args['icon'] = array('image', 'far', '');
$str .= ui::btn($args);
//===
$args = array();
$args['in_div'] = true;
$args['as_a_href'] = 'https://www.youtube.com/';
$args['as_a_target'] = '_blank';
$args['btn_style'] = 'link';
$args['text'] = 'Youtube';
$args['icon'] = array('video', 'far', 'text-primary');
$str .= ui::btn($args);2. ui::btn_onoff()
Кнопки типу Увімкнути / Вимкнути
Метод має розширений варіант «ui::btn_onoff_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['size'] = '';
$str .= ui::btn_onoff($args);
//===
$args = array();
$args['in_div'] = true;
$args['size'] = 'sm';
$args['onoff_text_start'] = 'Text before button';
$str .= ui::btn_onoff($args);3. ui::input()
Поля типу «input»
Метод має розширений варіант «ui::input_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_input';
$args['value'] = '';
$args['placeholder'] = 'Placeholder text';
$args['label'] = 'My label text';
$args['help'] = 'My help message';
$str .= ui::input($args);4. ui::input_file()
Поля типу «input type=file» для завантаження файлів.
Метод має розширений варіант «ui::input_file_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['name'] = 'my_input_file';
$args['in_div'] = true;
$args['size'] = '';
$args['help'] = '';
$args['with_result'] = true;
$args['with_result_detail'] = true;
$args['with_preview'] = true;
$args['with_delete'] = true;
$args['with_caption'] = true;
$str .= ui::input_file($args);5. ui::textarea()
Текстові області.
Метод має розширений варіант «ui::textarea_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_textarea';
$args['value'] = '';
$args['placeholder'] = 'Placeholder text';
$args['label'] = 'My label text';
$args['help'] = 'My help message';
$args['rows'] = 3;
$str .= ui::textarea($args);6. ui::select()
Поля типу «select».
Метод має розширений варіант «ui::select_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_select';
$args['value'] = '';
$args['label'] = 'My label text';
$args['help'] = 'My help message';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
);
$args['include_opt_not_set'] = true;
$str .= ui::select($args);7. ui::checkbox()
Поле або множина полів типу «checkbox».
Метод має розширений варіант «ui::checkbox_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_checkboxes';
$args['value'] = '';
$args['label'] = 'My label text';
$args['help'] = 'My help message';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
, 'opt_6_value'=>'Option 6'
, 'opt_7_value'=>'Option 7'
, 'opt_8_value'=>'Option 8'
);
$args['include_opt_not_set'] = true;
$str .= ui::checkbox($args);8. ui::radio()
Поле або множина полів типу «radio».
Метод має розширений варіант «ui::radio_with_save()», який представлений у розділі «Одиночні форми», де показано, як обробляти це одиночне поле для збереження його значень.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_radios';
$args['value'] = '';
$args['label'] = 'My label text';
$args['help'] = 'My help message';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
, 'opt_6_value'=>'Option 6'
, 'opt_7_value'=>'Option 7'
, 'opt_8_value'=>'Option 8'
);
$args['include_opt_not_set'] = true;
$str .= ui::radio($args);Під одиночними формами маються на увазі одиночні поля, які необхідно зберегти.
Для таких сценаріїв використовуються наведені нижче методи, які автоматично створять необхідну форму, а також кнопку збереження всередині форми, якщо це відповідає логіці.
Вам навіть не потрібно вказувати в методі обробник, просто створіть на вашому сервері обробник за схемою:
save_+назва_поля, тобто префікс «save_», далі атрибут «name» поля.
Нарешті, Вам навіть не знадобиться створювати на Вашому сервері обробник, якщо Ви передаєте параметр «_auto_handler», система зробить усе сама, це зручно, якщо Вам не потрібні жодні додаткові обробки, а лише зберегти значення поля.
У Вашому обробнику на сервері використовуйте метод «ui::get_post_VAL()». Цей метод поверне введене користувачем значення.
У методі «ui::get_post_VAL()» значення, введене користувачем, також буде автоматично відфільтроване залежно від типу поля. Ви також можете встановити тип фільтрації за допомогою параметра «post_filter». Читайте про особливості фільтрації даних:
Після виконання фільтрації система автоматично повертає у поле відфільтроване значення для контролю користувачем того, що він зберігає.
Якщо потрібно змінити повернене значення, використовуйте хелпер «oj_ret()» з першим аргументом «ret_val», другим аргументом передайте значення, яке має повернутися в поле.
1. ui::btn_onoff_with_save()
Розглянемо приклад збереження одиночної кнопки увімкнення - вимкнення.
Наше поле має атрибут «name» зі значенням «my_onoff_short_form», тому на сервері створюємо обробник «save_my_onoff_short_form».
В обробнику використовуємо метод «ui::get_post_VAL()», який поверне значення кнопки «Y» або «N».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_onoff_short_form';
$args['value_storage'] = array('api_docs_examples', 'access');
$str .= ui::btn_onoff_with_save($args);public function save_my_onoff_short_form() {
$now_val = ui::get_post_VAL();
if($now_val === 'Y') {
// YOUR code
}
else {
// YOUR code
}
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$msg .= e_p('<strong>VALUE:</strong> <br>'.$now_val);
ojsucc($msg, 3000);
}2. ui::input_with_save()
Зберігаємо поле «input».
Створюємо на сервері обробник з ідентифікатором у вигляді «save_+назва_поля». Наше поле має атрибут «name» зі значенням «my_input_short_form», отже ідентифікатор обробника буде «save_my_input_short_form».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_input_short_form';
$args['value'] = '';
$args['label'] = 'Type in the word:';
$args['value_storage'] = array('api_docs_examples', 'access');
$str .= ui::input_with_save($args);public function save_my_input_short_form() {
$now_val = (string) ui::get_post_VAL();
if($now_val !== '') {
// YOUR code
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$msg .= e_p('<strong>VALUE:</strong> <br>'.$now_val);
ojsucc($msg, 3000);
}
else {
ojerr(mlang('s_form__fill', 1).'!');
}
}3. ui::input_file_with_save()
Зберегти файл(и), завантажені користувачем.
Цей метод може працювати повністю автоматично, Вам навіть не потрібно створювати обробник, система зробить усе сама.
Докладніше про роботу з «input type=file» читайте за посиланням нижче.
Приклад:КЛАС «ui::» | Клас «upload::» | Приклади роботи з «input type=file»
$args = array();
$args['name'] = 'my_ui_file_input';
$args['in_div'] = true;
$args['inp_file_only_imgs'] = true;
$args['with_caption'] = true;
$args['multiple'] = true;
$args['auto_delete'] = 1;
$str .= ui::input_file_with_save($args);4. ui::textarea_with_save()
Зберегти поле «textarea».
Створюємо на сервері обробник з ідентифікатором у вигляді «save_+назва_поля». Наше поле має атрибут «name» зі значенням «my_textarea_short_form», отже ідентифікатор обробника буде «save_my_textarea_short_form».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_textarea_short_form';
$args['value'] = '';
$args['label'] = 'Type in the words:';
$args['rows'] = 3;
$args['value_storage'] = array('api_docs_examples', 'access');
$str .= ui::textarea_with_save($args);public function save_my_textarea_short_form() {
$now_val = (string) ui::get_post_VAL();
if($now_val !== '') {
// YOUR code
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$msg .= e_p('<strong>VALUE:</strong> <br>'.nl2br($now_val));
ojsucc($msg, 3000);
}
else {
ojerr(mlang('s_form__fill', 1).'!');
}
}5. ui::select_with_save()
Зберегти поле «select».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
Для цього прикладу ми не створюватимемо обробник на сервері, оскільки використовуємо параметр «_auto_handler», який запустить системний автоматичний обробник.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_select_short_form';
$args['value'] = '';
$args['label'] = 'Select option:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
);
$args['include_opt_not_set'] = true;
$args['value_storage'] = array('api_docs_examples', 'access');
$args['_auto_handler'] = true;
$str .= ui::select_with_save($args);6. ui::select_with_save()
Зберегти поле «select» з параметром «multiple» зі значенням «TRUE».
Створюємо на сервері обробник з ідентифікатором у вигляді «save_+назва_поля». Наше поле має атрибут «name» зі значенням «my_select_multiple_short_form», отже ідентифікатор обробника буде «save_my_select_multiple_short_form».
Зверніть увагу, що в обробнику метод «ui::get_post_VAL()» поверне масив обраних користувачем значень, а не одне значення, як у попередньому прикладі.
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_select_multiple_short_form';
$args['value'] = '';
$args['label'] = 'Select option:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
);
$args['include_opt_not_set'] = true;
$args['multiple'] = true;
$args['value_storage'] = array('api_docs_examples', 'access');
$str .= ui::select_with_save($args);public function save_my_select_multiple_short_form() {
$now_val = ui::get_post_VAL();
if(!empty($now_val)) {
// YOUR code
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$now_val_format = "<pre>\n";
$now_val_format .= print_r($now_val, true);
$now_val_format .= "</pre>";
$msg .= e_p('<strong>VALUE:</strong> <br>'.$now_val_format);
ojsucc($msg, 3000);
}
else {
ojerr(mlang('s_form__fill', 1).'!');
}
}7. ui::checkbox_with_save()
Зберегти поле або множину полів «checkbox».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
Для цього прикладу ми не створюватимемо обробник на сервері, оскільки використовуємо параметр «_auto_handler», який запустить системний автоматичний обробник.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_checkboxes_short_form';
$args['value'] = '';
$args['label'] = 'Check options:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
);
$args['max_opts_in_block'] = 2;
$args['value_storage'] = array('api_docs_examples', 'access');
$args['_auto_handler'] = true;
$str .= ui::checkbox_with_save($args);8. ui::radio_with_save()
Зберегти поле або множину полів «radio».
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
Для цього прикладу ми не створюватимемо обробник на сервері, оскільки використовуємо параметр «_auto_handler», який запустить системний автоматичний обробник.
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_radios_short_form';
$args['value'] = '';
$args['label'] = 'Select radio:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
, 'opt_5_value'=>'Option 5'
);
$args['max_opts_in_block'] = 2;
$args['value_storage'] = array('api_docs_examples', 'access');
$args['_auto_handler'] = true;
$str .= ui::radio_with_save($args);Під комплексними формами маються на увазі форми, у яких знаходиться кілька полів, які необхідно зберегти.
Побудова комплексних форм повинна починатися з методу «ui::form_start()» з відповідними параметрами.
- Далі йдуть методи, які створюють поля потрібних типів.
І нарешті, комплексна форма повинна закінчуватися методом «ui::form_end()» з відповідними параметрами.
Обов’язковим елементом будь-якої форми, яку потрібно зберегти, є кнопка збереження форми.
В залежності від параметрів, переданих методу «ui::form_end()», кнопка може бути відрендерена системою автоматично.
Вивчіть опис конструктора методу «ui::form_end()».
Фільтрація вхідних даних форми в обробнику здійснюється за допомогою методу «ui::get_post_VALS()», який виконує фільтрацію автоматично залежно від типу поля. Метод поверне масив відфільтрованих значень кожного поля. Також Ви можете самостійно перебрати масив $_POST['val'] (не рекомендується).
Ви також можете встановити тип фільтрації для будь-якого поля, якщо необхідно, за допомогою параметра «post_filter». Читайте про особливості фільтрації даних:
1.
Приклад роботи з звичайною комплексною формою.
Вказуємо обробник форми «saves_form_example_1» у методі «ui::form_end()».
Створюємо на сервері обробник з ідентифікатором «saves_form_example_1».
Зверніть увагу, префікс «saves_» в ідентифікаторі обробника обов’язковий!
У нашій формі присутнє поле типу «file». Система повністю автоматично завантажить файл, ніяких обробок у обробнику не використовуємо. Про те, як працювати з полями типу «file», дивіться окремий приклад у документації.
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$str .= ui::form_start();
//--- INPUT number
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_input_number';
$args['label'] = 'Type in the number:';
$args['type'] = 'number';
$args['inp_type_number_min'] = 0;
$args['inp_type_number_max'] = 1000;
$args['value_storage'] = array('api_docs_examples_complex', 'access');
$str .= ui::input($args);
//--- SELECT
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_select';
$args['value'] = '';
$args['label'] = 'Select the option:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
);
$args['include_opt_not_set'] = true;
$args['value_storage'] = array('api_docs_examples_complex', 'access');
$str .= ui::select($args);
//--- CHECKBOXES
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_checkboxes';
$args['value'] = '';
$args['label'] = 'Check the checkboxes:';
$args['opts'] = array(
'check_1_value'=>'Option 1'
, 'check_2_value'=>'Option 2'
, 'check_3_value'=>'Option 3'
, 'check_4_value'=>'Option 4'
);
$args['max_opts_in_block'] = 2;
$args['value_storage'] = array('api_docs_examples_complex', 'access');
$str .= ui::checkbox($args);
//--- INPUT TYPE FILE
$args = array();
$args['name'] = 'my_form_file_example_1_';
$args['in_div'] = true;
$args['multiple'] = true;
$args['with_caption'] = true;
$args['auto_delete'] = 1;
$str .= ui::input_file($args);
//=== form end
$str .= ui::form_end('saves_form_example_1');public function saves_form_example_1() {
$now_vals = ui::get_post_VALS();
//if(...) {
// YOUR code
// }
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$now_vals_format = "<pre>\n";
$now_vals_format .= print_r($now_vals, true);
$now_vals_format .= "</pre>";
$msg .= e_p('<strong>VALUES:</strong> <br>'.$now_vals_format);
//---
$now_uploaded = upload::get_uploaded();
$now_uploaded_format = "<pre>\n";
$now_uploaded_format .= print_r($now_uploaded, true);
$now_uploaded_format .= "</pre>";
$msg .= e_p('<strong>UPLOADED:</strong> <br>'.$now_uploaded_format);
ojsucc($msg, false);
}2.
Повторимо попередній приклад, додавши «required» полям.
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
Також зверніть увагу, що у цьому прикладі використовується повністю автоматична обробка.
Для цього ми передали методу «ui::form_end()» додатковий префікс «auto:».
У такому випадку не потрібно створювати обробник на сервері, система все зробить автоматично.
$str .= ui::form_start();
//--- INPUT number
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_input_number';
$args['label'] = 'Type in the number:';
$args['type'] = 'number';
$args['inp_type_number_min'] = 0;
$args['inp_type_number_max'] = 1000;
$args['required'] = true;
$args['value_storage'] = array('api_docs_examples_complex_auto', 'access');
$str .= ui::input($args);
//--- SELECT
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_select';
$args['value'] = '';
$args['label'] = 'Select the option:';
$args['opts'] = array(
'opt_1_value'=>'Option 1'
, 'opt_2_value'=>'Option 2'
, 'opt_3_value'=>'Option 3'
, 'opt_4_value'=>'Option 4'
);
$args['include_opt_not_set'] = true;
$args['required'] = true;
$args['value_storage'] = array('api_docs_examples_complex_auto', 'access');
$str .= ui::select($args);
//--- CHECKBOXES
$args = array();
$args['in_div'] = true;
$args['name'] = 'my_checkboxes';
$args['value'] = '';
$args['label'] = 'Check the checkboxes:';
$args['opts'] = array(
'check_1_value'=>'Option 1'
, 'check_2_value'=>'Option 2'
, 'check_3_value'=>'Option 3'
, 'check_4_value'=>'Option 4'
);
$args['max_opts_in_block'] = 2;
$args['required'] = true;
$args['value_storage'] = array('api_docs_examples_complex_auto', 'access');
$str .= ui::checkbox($args);
//--- INPUT TYPE FILE
$args = array();
$args['name'] = 'my_form_file_example_2_';
$args['in_div'] = true;
$args['multiple'] = true;
$args['with_caption'] = true;
$args['auto_delete'] = 1;
$args['required'] = true;
$str .= ui::input_file($args);
//=== form end
$str .= ui::form_end('auto:saves_form_example_2');public function saves_form_example_1() {
$now_vals = ui::get_post_VALS();
//if(...) {
// YOUR code
// }
storage::auto();
//---
$msg = e_p(mlang('s_status__success', 1).'!');
$now_vals_format = "<pre>\n";
$now_vals_format .= print_r($now_vals, true);
$now_vals_format .= "</pre>";
$msg .= e_p('<strong>VALUES:</strong> <br>'.$now_vals_format);
//---
$now_uploaded = upload::get_uploaded();
$now_uploaded_format = "<pre>\n";
$now_uploaded_format .= print_r($now_uploaded, true);
$now_uploaded_format .= "</pre>";
$msg .= e_p('<strong>UPLOADED:</strong> <br>'.$now_uploaded_format);
ojsucc($msg, false);
}У цьому блоці прикладів окремо розглянемо використання розширених схем обробки. Під розширеними схемами розуміється участь Ваших кастомних JS-кодів, які можуть використовуватися ДО відправлення даних форми по ajax, так і ПІСЛЯ отримання відповіді по ajax.
Обов’язково вивчіть схеми обробки за посиланням нижче (Конструктор схеми обробки). Використовуйте цю документацію для розуміння наведених нижче прикладів:
1.
Додамо у цьому прикладі JS-обробку перед відправленням форми через ajax.
Наше поле має атрибут «name» зі значенням «input_extend_js_1», отже ідентифікатор обробника на сервері буде «save_input_extend_js_1». Такий самий ідентифікатор обробника використовується у JS-коді. Створюємо об’єкт «$$.save_input_extend_js_1 = {};». Далі додаємо об’єкту властивість «start» у вигляді функції, яка міститиме наш код обробки.
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
$args = array();
$args['in_div'] = true;
$args['name'] = 'input_extend_js_1';
$args['label'] = 'Type in the word:';
$args['value_storage'] = array('api_docs_examples_js', 'access');
$str .= ui::input_with_save($args);$$.save_input_extend_js_1 = {};
$$.save_input_extend_js_1.start = function(data, element, event) {
console.log('data', data);
var confirm_text = $$.mlang('forms_example__extend_js_confirm_example');
confirm_text += ' '+data.val.length;
confirm_text +='?';
if(!confirm(confirm_text)) return false;
data.my_par_1 = 'my_value_1';
}
2.
У наступному прикладі виконаємо обробку ПІСЛЯ отримання успішної відповіді по ajax. Для цього в JS-обробнику за аналогією з попереднім прикладом створюємо властивість «cb» у вигляді функції.
У нашому прикладі після отримання відповіді по ajax JS-код перекрасить поле і додасть «disabled».
$args = array();
$args['in_div'] = true;
$args['name'] = 'select_extend_js_2';
$args['label'] = 'Select option:';
$args['opts'] = array(
'opt_1_value'=>'opt_1_label'
, 'opt_2_value'=>'opt_2_label'
, 'opt_3_value'=>'opt_3_label'
, 'opt_4_value'=>'opt_4_label'
);
$str .= ui::select_with_save($args);$$.save_select_extend_js_2 = {};
$$.save_select_extend_js_2.cb = function(json, element, event) {
console.log('json', json);
var field = element.closest('form').find('select');
field.prop('disabled', true).css({'background-color': '#d4f0ff'});
}
3.
Нарешті, розглянемо складніший приклад. Використовуємо комплексну форму. У JS-коді прописуємо обробники як ПЕРЕД відправкою ajax, так і ПІСЛЯ отримання відповіді по ajax.
У нашому прикладі ми використовуємо ідентифікатор обробника «saves_complex_extend_js», який вказаний у методі «ui::form_end()». Отже, у нашому JS-коді створюємо об’єкт з назвою «saves_complex_extend_js» і додаємо необхідні властивості-функції.
Зверніть увагу, що ми також додали обробник першому полю select.
У прикладі використовується параметр «value_storage», який виконає автоматичне збереження значення поля у базі даних.
Також зверніть увагу, що у цьому прикладі використовується повністю автоматична обробка.
Для цього ми передали методу «ui::form_end()» додатковий префікс «auto:».
У такому випадку не потрібно створювати обробник на сервері, система все зробить автоматично.
$str .= ui::form_start();
$args = array();
$args['in_div'] = true;
$args['name'] = 'select_complex_js';
$args['label'] = 'Select option:';
$args['handler_change'] = 'select_interaction';
$args['opts'] = array(
'opt_1_value'=>'opt_1_label'
, 'opt_2_value'=>'opt_2_label'
, 'opt_3_value'=>'opt_3_label'
, 'opt_4_value'=>'opt_4_label'
);
$args['include_opt_not_set'] = true;
$args['value_storage'] = array('api_docs_examples_js_complex', 'access');
$str .= ui::select($args);
$str .= '<div class="js-by_select_interaction" style="display: none;">';
$args = array();
$args['in_div'] = true;
$args['name'] = 'checkbox_complex_js';
$args['label'] = 'Check options:';
$args['opts'] = array(
'opt_1_value'=>'opt_1_label'
, 'opt_2_value'=>'opt_2_label'
, 'opt_3_value'=>'opt_3_label'
, 'opt_4_value'=>'opt_4_label'
);
$args['value_storage'] = array('api_docs_examples_js_complex', 'access');
$str .= ui::checkbox($args);
$str .= '</div>';
$args = array();
$args['in_div'] = true;
$args['name'] = 'textarea_complex_js';
$args['label'] = 'Type in the words:';
$args['value_storage'] = array('api_docs_examples_js_complex', 'access');
$str .= ui::textarea($args);
$str .= ui::form_end('auto:saves_complex_extend_js');$$.select_interaction = function(data, element, event) {
var div_by_select_interaction = element.closest('form').find('.js-by_select_interaction');
if(data.val!=='') div_by_select_interaction.slideDown();
else div_by_select_interaction.slideUp();
return true;
}
$$.saves_complex_extend_js = {};
$$.saves_complex_extend_js.start = function(data, element, event) {
console.log('data', data);
var form = element.closest('form');
form.css({'transform': 'rotate(-5deg)'});
}
$$.saves_complex_extend_js.cb = function(json, element, event) {
console.log('json', json);
var form = element.closest('form');
form.css({'transform': 'rotate(0deg)'});
}
Іноді потрібно додати обробник DOM-елементу. Ви можете зробити це звичайними методами JS (JQUERY). Проте для роботи обробників у системі EGO CRM з урахуванням усіх її можливостей, елементу потрібно призначити спеціальні атрибути та класи.
Використовуючи метод ui::dom_element() під час створення HTML-тега елемента, ви вводите цей елемент у стандартну роботу системи, як це відбувається з полями форм.
У подальшому щодо елемента Ви можете використовувати будь-яку схему обробки, вивчіть розділ «Конструктор схеми обробки» за посиланням нижче:
1.
Виконаємо лише JS-обробку по кліку на елементі DIV.
$args = array();
$args['handler_click'] = 'color_my_box';
$args['id'] = set_id('my_coloring_div');
$args['addclass'] = 'p-3 border';
$args['attrs'] = array(
'data-color_1'=>'red'
, 'data-color_2'=>'blue'
, 'data-color_3'=>'green'
, 'data-color_4'=>'orange'
, 'style'=>'background: orange; color: white;'
);
$args['cursor'] = 'pointer';
$str .= '<div '.ui::dom_element($args).' >';
$str .= 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat lacinia nunc, eget tincidunt est maximus eu.';
$str .= '</div>';$$._now_color = 1;
$$.color_my_box = function(data, element, event){
element.css({'background': element.data('color_'+$$._now_color)});
$$._now_color++;
if($$._now_color>4) $$._now_color = 1;
return true;
}
2.
Ускладнимо попередній приклад обробкою по ajax.
$args = array();
$args['handler_click'] = 'color_my_box_with_ajax';
$args['id'] = set_id('my_coloring_div_with_ajax');
$args['addclass'] = 'p-3 border';
$args['attrs'] = array(
'data-color_1'=>'orange'
, 'data-color_2'=>'red'
, 'data-color_3'=>'blue'
, 'data-color_4'=>'green'
, 'style'=>'background: green; color: white;'
);
$args['cursor'] = 'pointer';
$str .= '<div '.ui::dom_element($args).' >';
$str .= 'Душа моя озарена неземной радостью, как эти чудесные весенние утра, которыми я наслаждаюсь от всего сердца.';
$str .= '</div>';$$._number_color = 1;
$$.color_my_box_with_ajax = {};
$$.color_my_box_with_ajax.start = function(data, element, event){
element.css({'background': element.data('color_'+$$._number_color)});
data._number_color = $$._number_color;
$$._number_color++;
if($$._number_color>4) $$._number_color = 1;
}
3.
Специфічним застосуванням є підключення контекстного меню (клік правою кнопкою миші).
Детальні приклади дивіться за посиланням:
Методи використовуються для відмалювання спеціальних компонентів.
1. ui::dropdown()
Випадаючий елемент.
Дивіться докладні приклади за посиланням нижче.
$args = array();
$args['btn_text'] = 'Text for button';
$args['body'] = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat lacinia nunc, eget tincidunt est maximus eu.';
$str .= ui::dropdown($args);2. ui::tabs()
Вкладки - Tabs / Pills.
Дивіться докладні приклади за посиланням нижче.
$args = array();
$args['children'] = array();
//--- Tab 1
$tab = array(
'btn_text'=>'Tab 1'
, 'body'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In a eleifend ante, sed ultrices ipsum. Praesent id lectus mattis, dapibus massa et, blandit ipsum. Pellentesque ullamcorper ante augue, id aliquam sem vulputate id. Sed elit augue, molestie a elit aliquet, facilisis elementum eros. Nam non enim sapien. Vivamus non eleifend quam. Nam dapibus condimentum porttitor. Aenean tempor tincidunt tristique.'
);
$args['children'][] = $tab;
//--- Tab 2
$tab = array(
'btn_text'=>'Tab 2'
, 'body'=>'Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана.'
);
$args['children'][] = $tab;
//--- Tab 3
$tab = array(
'btn_text'=>'Tab 3'
, 'body'=>'Душа моя озарена неземной радостью, как эти чудесные весенние утра, которыми я наслаждаюсь от всего сердца. Я совсем один и блаженствую в здешнем краю, словно созданном для таких, как я. Я так счастлив, мой друг, так упоен ощущением покоя, что искусство мое страдает от этого. Ни одного штриха не мог бы я сделать, а никогда не был таким большим художником, как в эти минуты.'
);
$args['children'][] = $tab;
//---
$args['style_pills'] = false;
$str .= ui::tabs($args);3. ui::gallery()
Галерея.
Дивіться докладні приклади за посиланням нижче.
Приклад:КЛАС «ui::» | Галерея - Gallery
$args = array();
$args['children'] = array();
//--- Image 1
$image_set = array(
'src'=>media_link('011ab21242e86e7d7635')
, 'caption'=>'Caption for image 1'
);
$args['children'][] = $image_set;
//--- Image 2
$image_set = array(
'src'=>media_link('3e1861d3864ba55b27a8')
, 'caption'=>'Caption for image 2'
);
$args['children'][] = $image_set;
//---
$str .= ui::gallery($args);У попередніх прикладах на цій сторінці ми вже використовували клас «storage::» у різних автоматичних варіантах під час роботи з полями форм.
Розглянемо варіант ручного використання класу «storage::». Ручне використання потрібне, коли потрібно зберегти деякі значення, не пов’язані з полями форм.
Можливих прикладів такого використання класу може бути безліч. Ми наведемо лише 1 приклад.
У нашому прикладі ми створимо 3 вкладки. У кожній вкладці по 4 субвкладки.
За замовчуванням при завантаженні сторінки відкривається вкладка 1 і субвкладка 1.
Однак припустимо, що нам потрібно зберегти, яка вкладка і субвкладка були відкриті останній раз, щоб при наступному перезавантаженні сторінки відкрилися останні збережені вкладка і субвкладка. Також запам’ятаємо, яка субвкладка була відкритою останній раз у кожній вкладці.
Проаналізуйте створений приклад.
Приклад
Переключіть вкладку та субвкладку і перезавантажте сторінку.
$args = array();
//=== get saved open_tab
$saved_open_tab = storage::get_value('api_docs_examples_storage', 'open_tab');
if(!$saved_open_tab) $saved_open_tab = 0;
//===
$args['children'] = array();
$args['children'][] = array(
'btn_text'=>'Tab 1'
, 'handler_tab'=>'open_tab'
, 'handler_tab_force'=>true
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_tab === 0 ? true : false)
);
$args['children'][] = array(
'btn_text'=>'Tab 2'
, 'handler_tab'=>'open_tab'
, 'handler_tab_force'=>true
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_tab === 1 ? true : false)
);
$args['children'][] = array(
'btn_text'=>'Tab 3'
, 'handler_tab'=>'open_tab'
, 'handler_tab_force'=>true
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_tab === 2 ? true : false)
);
$str .= ui::tabs($args);public function open_tab() {
$str = '';
$open_tab = $this->post['_tab'];
//=== save to storage
storage::init('api_docs_examples_storage', 'access');
storage::set_f('open_tab', $open_tab, 'int');
storage::save();
//=== get saved open_sub_tab
$saved_open_sub_tab_rels = storage::get_value('api_docs_examples_storage', 'open_sub_tab');
if(!$saved_open_sub_tab_rels) $saved_open_sub_tab_rels = array();
$saved_open_sub_tab = (isset($saved_open_sub_tab_rels[$open_tab]) ? (int) $saved_open_sub_tab_rels[$open_tab] : 0);
//===
$str .= '<div class="pl-3 border-left border-warning">';
$str .= '<div class="py-4">My content for Tab '.($open_tab+1).'</div>';
//===
$args = array();
$args['children'] = array();
$args['children'][] = array(
'btn_text'=>'SubTab 1'
, 'handler_tab'=>'open_sub_tab'
, 'handler_tab_force'=>true
, 'handler_tab_pars'=>array('open_tab'=>$open_tab)
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_sub_tab === 0 ? true : false)
);
$args['children'][] = array(
'btn_text'=>'SubTab 2'
, 'handler_tab'=>'open_sub_tab'
, 'handler_tab_force'=>true
, 'handler_tab_pars'=>array('open_tab'=>$open_tab)
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_sub_tab === 1 ? true : false)
);
$args['children'][] = array(
'btn_text'=>'SubTab 3'
, 'handler_tab'=>'open_sub_tab'
, 'handler_tab_force'=>true
, 'handler_tab_pars'=>array('open_tab'=>$open_tab)
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_sub_tab === 2 ? true : false)
);
$args['children'][] = array(
'btn_text'=>'SubTab 4'
, 'handler_tab'=>'open_sub_tab'
, 'handler_tab_force'=>true
, 'handler_tab_pars'=>array('open_tab'=>$open_tab)
, 'use_btn_reload'=>false
, 'init_open'=>($saved_open_sub_tab === 3 ? true : false)
);
$str .= ui::tabs($args);
$str .= '</div>';
oj_tab($str);
}public function open_sub_tab() {
$str = '';
$open_sub_tab = $this->post['_tab'];
$open_tab = $this->post['open_tab'];
//=== save to storage
$open_sub_tabs_rels = array($open_tab=>$open_sub_tab);
storage::init('api_docs_examples_storage', 'access');
storage::set_f('open_sub_tab', $open_sub_tabs_rels, 'array:add');
storage::save();
//===
$str .= '<div class="py-4">My SubTab '.($open_sub_tab+1).' content for Tab '.($open_tab+1).'</div>';
oj_tab($str);
}