Бұл класс негізгі мақсаты – модульдерді әзірлеу кезінде әртүрлі өрістерді, формаларды және компоненттерді жылдам жасау құралдарын алу, олар EGO CRM жүйесімен толық үйлесімді жұмыс істейді.

«ui::» класы екі түрлі бағыттағы әдістер блогынан тұрады:

Толық құжаттама төмендегі сілтемеде берілген:

Ұсынылған мысалдарда файл өрістері сыртында барлық өріс мәндері «storage::» класы арқылы сақталады (параметр ретінде «value_storage» қолданылады). Сақталған мәндерді тек сіз көресіз.

Сіз осы мысал бетінде жүктеген файлдар тек сізге ғана көрінеді.

Барлық файл мысалдарында біз «auto_delete» параметрін «1» мәнімен қолданамыз. Бұл сіз жүктеген барлық файлдардың 1 күннен кейін жойылатынын білдіреді.

Әдістер әртүрлі типтегі өрістерді сызуға қолданылады және көптеген параметрлерді қамтиды.
Назар аударыңыз, кейбір өрістерде кеңейтілген нұсқалары бар («Жекелеген формалар» бөлімінде сипатталған).
Қажетті параметрлер жиынтығын құру үшін әр әдісте көрсетілген конструкторды қолданыңыз.
Әр мысалда қолданылған параметрлер мәндерін көру үшін конструкторға сілтемелер келтірілген.

1. ui::btn()

Түймелер және сілтемелер.

$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()», ол «Жекелеген формалар» бөлімінде көрсетілген, мұнда бұл өрісті мәндерін сақтауға қалай өңдеу керектігі көрсетілген.

Өрісті тазалау үшін екі рет шертіңізMy help message
$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()», ол «Жекелеген формалар» бөлімінде көрсетілген, мұнда бұл өрісті мәндерін сақтауға қалай өңдеу керектігі көрсетілген.

Өрісті тазалау үшін екі рет шертіңізMy help message
$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()», ол «Жекелеген формалар» бөлімінде көрсетілген, мұнда бұл өрісті мәндерін сақтауға қалай өңдеу керектігі көрсетілген.

My help message
$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()», ол «Жекелеген формалар» бөлімінде көрсетілген, мұнда бұл өрісті мәндерін сақтауға қалай өңдеу керектігі көрсетілген.

My help message
$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()», ол «Жекелеген формалар» бөлімінде көрсетілген, мұнда бұл өрісті мәндерін сақтауға қалай өңдеу керектігі көрсетілген.

My help message
$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_» префиксі және өрістің «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» параметрі қолданылады, ол өріс мәнін дерекқорда автоматты түрде сақтайды.

Өрісті тазалау үшін екі рет шертіңізСақтау үшін ENTER пернесін басыңыз
$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» жұмыс істеу туралы толық ақпаратты төмендегі сілтемеден оқыңыз.

Мысал:CLASS «ui::» | Class «upload::» | «input type=file» жұмысының мысалдары

(Түсініктеме жоқ)
Файл(дар) жүктелмедіТек файлдар: png, jpg, jpeg, gif, ico
$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» параметрі қолданылады, ол өріс мәнін дерекқорда автоматты түрде сақтайды.

Өрісті тазалау үшін екі рет шертіңізСақтау үшін ENTER пернесін басыңызЖолды бөлу үшін SHIFT+ENTER пернелерін басыңыз
$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_+field_name» түріндегі идентификаторымен өңдегіш құрамыз. Біздің өрісіміздің «name» атрибуты «my_select_multiple_short_form» мәнінде, сондықтан өңдегіштің идентификаторы «save_my_select_multiple_short_form» болады.
Назар аударыңыз, өңдегіште «ui::get_post_VAL()» әдісі пайдаланушы таңдаған мәндердің массивін қайтарады, ал алдыңғы мысалда бір мән қайтаратын.

Мысалда «value_storage» параметрі қолданылады, ол өріс мәнін дерекқорда автоматты түрде сақтайды.

Ctrl (Command) басып ұстап, бірнеше мәнді таңдаңыз.
$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.

Қарапайым күрделі форма мысалы.
«ui::form_end()» әдісінде форма өңдегіші «saves_form_example_1» көрсетіледі.

Серверде «saves_form_example_1» идентификаторы бар өңдегіш құрыңыз.
Назар аударыңыз, өңдегіш идентификаторындағы «saves_» префиксі міндетті!

Біздің формада «file» типті өріс бар. Жүйе файлды толық автоматты түрде жүктейді, өңдеушіде ешқандай өңдеу қолданылмайды. «file» типті өрістермен қалай жұмыс істеу керек екенін құжаттамадағы бөлек мысалда қараңыз.

Мысалда «value_storage» параметрі қолданылады, ол өріс мәнін дерекқорда автоматты түрде сақтайды.

Мин. 0Макс. 1000
Өрісті тазалау үшін екі рет шертіңіз

(Түсініктеме жоқ)
Файл(дар) жүктелмеді
$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:» қосымша префиксі берілді.
Бұл жағдайда серверде өңдегіш жасау қажет емес, жүйе бәрін автоматты түрде орындайды.

* өрісті толтырыңыз
Мин. 0Макс. 1000
Өрісті тазалау үшін екі рет шертіңіз
* өрісті толтырыңыз

* кем дегенде бір мәнді таңдаңыз
(Түсініктеме жоқ)
* өрісті толтырыңыз
Файл(дар) жүктелмеді
$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.

Бұл мысалда форма жіберілмес бұрын ajax арқылы JS өңдеуді қосамыз.
Біздің өрістің «name» атрибуты «input_extend_js_1» мәнінде, сондықтан сервердегі өңдегіш идентификаторы «save_input_extend_js_1» болады. Сол идентификатор JS кодында да қолданылады. «$$.save_input_extend_js_1 = {};» объектісін құрамыз. Оған «start» атты функция ретінде қасиет қосамыз, ол біздің өңдеу кодымызды қамтиды.

Мысалда «value_storage» параметрі қолданылады, ол өріс мәнін дерекқорда автоматты түрде сақтайды.

Өрісті тазалау үшін екі рет шертіңізСақтау үшін ENTER пернесін басыңыз
$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 жауап алғаннан кейін өңдеушілерді жазамыз.

Мысалымызда «ui::form_end()» әдісінде көрсетілген «saves_complex_extend_js» өңдеуші идентификаторы қолданылады. Яғни 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 жүйесінде барлық мүмкіндіктерін ескере отырып, өңдегіштердің жұмыс істеуі үшін элементке арнайы атрибуттар мен кластар тағайындау керек.
HTML тегін құру кезінде ui::dom_element() әдісін пайдалана отырып, сіз бұл элементті форма өрістері сияқты жүйеге енгізесіз.

Кейін элементке қатысты кез келген өңдеу схемасын қолдана аласыз, төмендегі «Өңдеу схемасы конструкторы» бөлімін оқыңыз:

1.

Тек DIV элементіне басқанда JS өңдеуді орындаймыз.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat lacinia nunc, eget tincidunt est maximus eu.
$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.

Ерекше қолданылуы - контекстік мәзірді қосу (оң жақ батырмамен басу).
Толығырақ мысалдарды сілтемеден қараңыз:

Мысал:CLASS «ui::» | Контекстік мәзір (оң батырма)

Әдістер арнайы компоненттерді салуға қолданылады.

1. ui::dropdown()

Ашылатын элемент.
Толығырақ мысалдарды төмендегі сілтемеден қараңыз.

Мысал:CLASS «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.
Толығырақ мысалдарды төмендегі сілтемеден қараңыз.

Мысал:CLASS «ui::» | Қойындылар - Tabs / Pills

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 = 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()

Галерея.
Толығырақ мысалдарды төмендегі сілтемеден қараңыз.

Мысал:CLASS «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);
}