Ejemplo n.º 1
0
    /**
     * Отрисовать одно поле.
     * @param  array  $_field массив с описанием поля
     * @return string HTML-текст
     */
    public static function RenderField($_field)
    {
        if (ToLower($_field['TYPE']) != 'hidden') {
            $result = '<div class="rf_fwrapper_o ' . $_field['WCLASS'] . '" ' . ($_field['WSTYLE'] ? 'style="' . $_field['WSTYLE'] . '" ' : '') . 'id="rf_wrapper_o_' . $_field['ID'] . '">
				<div class="rf_lwrapper" id="rf_lwrapper_' . $_field['ID'] . '">
					<label for="' . $_field['ID'] . '" id="rf_label_' . $_field['ID'] . '">' . $_field['LABEL'] . '</label>
					' . ($_field['REQUIRED'] ? '<span class="rf_required">*</span>' : '') . '
				</div>
				<div class="rf_fwrapper_i" id="rf_fwrapper_i_' . $_field['ID'] . '">';
        } else {
            $result = '';
        }
        // общая строка для большинства элементов
        $field = 'name="' . $_field['NAME'] . '" id="' . $_field['ID'] . '"' . ($_field['DISABLED'] ? ' disabled' : '') . ($_field['CLASS'] ? ' class="' . $_field['CLASS'] . '"' : '') . ($_field['ONCLICK'] ? ' onclick="' . $_field['ONCLICK'] . '"' : '') . ($_field['ONHOVER'] ? ' onmouseover="' . $_field['ONHOVER'] . '"' : '') . ($_field['ONCHANGE'] ? ' onchange="' . $_field['ONCHANGE'] . '"' : '') . ($_field['ONHOUT'] ? ' onmouseout="' . $_field['ONHOUT'] . '"' : '');
        // типы почти по алфавиту
        switch (ToLower($_field['TYPE'])) {
            // привязка к теме форума с возможностью создать новую
            case 'bind_forum_topic2':
                $result .= '<div class="rf_selectforum">
					<select id="' . $_field['ID'] . '_selectforum" name="' . $_field['NAME'] . '_selectforum">
					<option value="" selected></option>';
                foreach ($_field['FORUMS'] as $k => $v) {
                    $result .= '<option value="' . $k . '">' . $v . '</option>';
                }
                $result .= '</select></div>
					<div class="rf_createtopic">
						<div class="rf_inner_label" id="rf_inner_label_' . $_field['ID'] . '">
							<label for="' . $_field['ID'] . '_createtopic">Название темы форума</label>
						</div>
						<div class="rf_inner_input" id="rf_inner_input_' . $_field['ID'] . '">
							<input type="text" id="' . $_field['ID'] . '_createtopic" name="' . $_field['NAME'] . '_createtopic">
						</div>
					</div>';
                // обратите внимание - тут нет брейка, следом должен идти bind_forum_topic1
                // привязка к теме форума
            // привязка к теме форума
            case 'bind_forum_topic1':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/forum_topics_search_gs.php?FC=' . $_field['ID'] . ($_field['FORUM_ID'] ? '&FORUM_ID=' . $_field['FORUM_ID'] : '') . '\', 600, 500);" value="...">';
                break;
                // привязка к элементу инфоблока с возможностью создать новый
            // привязка к элементу инфоблока с возможностью создать новый
            case 'bind_iblock_element2':
                $result .= '<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv\').style.display=\'block\';">Создать</span>
					<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv">';
                $result .= CFormRenderer::RenderFields($_field);
                $result .= '</div>';
                // обратите внимание - тут нет брейка, следом должен идти bind_iblock_element1
                // привязка к элементу инфоблока
            // привязка к элементу инфоблока
            case 'bind_iblock_element1':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<span id="sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'] . '</span>
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '&k=text\', 600, 500);" value="...">';
                break;
                // привязка к пользователю
            // привязка к пользователю
            case 'bind_user':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<span id="div_sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'] . '</span>
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/user_search.php?FN=' . CFormRenderer::$formname . '&FC=' . $_field['ID'] . '\', 600, 500);" value="...">';
                // немного говнеца в стиле битрикса
                $result .= '<iframe id="rf_iframe_' . $_field['ID'] . '" style="width: 0; height: 0; border: none;"></iframe>
					<script type="text/javascript">
					var prev_' . $_field['ID'] . '_val = \'' . $_field['VALUE'] . '\';
					function rf_input_' . $_field['ID'] . '_check()
					{
						var val = document.getElementById(\'' . $_field['ID'] . '\').value;
						if(val != prev_' . $_field['ID'] . '_val)
						{
							document.getElementById("rf_iframe_' . $_field['ID'] . '").src=\'/bitrix/admin/get_user.php?ID=\'
								+ val + \'&strName=sp_' . md5($_field['ID']) . '_text&lang=ru&admin_section=Y\';
							prev_' . $_field['ID'] . '_val = val;
						}
					}
					setInterval(function() { rf_input_' . $_field['ID'] . '_check(); }, 1000);
					</script>';
                break;
                // кнопарь
            // кнопарь
            case 'button':
                $result .= '<input type="button" ' . $field . ' value="' . $_field['VALUE'] . '">';
                break;
                // обычный текстовый инпут с календариком
            // обычный текстовый инпут с календариком
            case 'date':
                ob_start();
                global $APPLICATION;
                $APPLICATION->IncludeComponent("bitrix:main.calendar", "", array("SHOW_INPUT" => "Y", "FORM_NAME" => CFormRenderer::$formname, "INPUT_NAME" => $_field['NAME'], "INPUT_NAME_FINISH" => "", "INPUT_VALUE" => $_field['VALUE'], "INPUT_VALUE_FINISH" => "", "SHOW_TIME" => "N", "HIDE_TIMEBAR" => "N"));
                $result .= ob_get_clean();
                /*$result .= '<input type="text" '.$field.' value="'.htmlspecialchars($_field['VALUE']).'">'
                		.Calendar($_field['NAME'], CFormRenderer::$formname);*/
                break;
                // файл
            // файл
            case 'file':
                $result .= '<input type="file" ' . $field . '>';
                break;
                // хидден
            // хидден
            case 'hidden':
                $result .= '<input type="hidden" ' . $field . ' value="' . htmlspecialcharsEx($_field['VALUE']) . '">';
                break;
                // множественная привязка к элементу инфоблока
            // множественная привязка к элементу инфоблока
            case 'multibind_iblock_element1':
                $max_i = 10;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 10;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multielementbind_wrapper_' . $_field['ID'] . '_' . $i . '">';
                    $result .= '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang=ru&IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '_' . $i . '&k=text\', 600, 500);" value="...">' . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multielementbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественная привязка к элементу инфоблока с возможностью создать новый
            // множественная привязка к элементу инфоблока с возможностью создать новый
            case 'multibind_iblock_element2':
                $max_i = 10;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 10;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multielementbind_wrapper_' . $_field['ID'] . '_' . $i . '">
						<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv_' . $i . '\').style.display=\'block\';">Создать</span>
						<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv_' . $i . '">';
                    $result .= CFormRenderer::RenderFields($_field, 'sub_', '_' . $i);
                    $result .= '</div>';
                    $result .= '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="sp_' . md5($_field['ID'] . '_' . $i) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang=ru&IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '_' . $i . '&k=text\', 600, 500);" value="...">' . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multielementbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественная привязка к пользователям
            // множественная привязка к пользователям
            case 'multibind_user':
                $max_i = 5;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 5;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multiuserbind_wrapper_' . $_field['ID'] . '_' . $i . '">' . '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="div_sp_' . md5($_field['ID'] . '_' . $i) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/user_search.php?FN=' . CFormRenderer::$formname . '&FC=' . $_field['ID'] . '_' . $i . '\', 600, 500);" value="...">' . ('<iframe id="rf_iframe_' . $_field['ID'] . '_' . $i . '" style="width: 0; height: 0; border: none;"></iframe>
							<script type="text/javascript">
								var prev_' . $_field['ID'] . '_' . $i . '_val = \'' . $_field['VALUE'][$i] . '\';
								function rf_input_' . $_field['ID'] . '_' . $i . '_check()
								{
									var val = document.getElementById(\'' . $_field['ID'] . '_' . $i . '\').value;
									if(val != prev_' . $_field['ID'] . '_' . $i . '_val)
									{
										document.getElementById("rf_iframe_' . $_field['ID'] . '_' . $i . '").src=\'/bitrix/admin/get_user.php?ID=\'
											+ val + \'&strName=sp_' . md5($_field['ID'] . '_' . $i) . '_text&lang=ru&admin_section=Y\';
										prev_' . $_field['ID'] . '_' . $i . '_val = val;
									}
								}
								setInterval(function() { rf_input_' . $_field['ID'] . '_' . $i . '_check(); }, 1000);
							</script>') . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multiuserbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественные файлы
            // множественные файлы
            case 'multifile':
                $result .= '<div id="multifile_wrapper_' . $_field['ID'] . '_0" class="rf_multifile_wrapper">
					<input
					type="file"
					id="' . $_field['ID'] . '_0"
					name="' . $_field['NAME'] . '_0"> <span class="rf_command" onclick="document.getElementById(\'multifile_wrapper_' . $_field['ID'] . '_1\').style.display=\'block\';">Ещё</span></div>';
                for ($i = 1; $i < 5; $i++) {
                    $result .= '<div id="multifile_wrapper_' . $_field['ID'] . '_' . $i . '" class="rf_multifile_wrapper rf_hidden">
						<input
						type="file"
						id="' . $_field['ID'] . '_' . $i . '"
						name="' . $_field['NAME'] . '_' . $i . '">';
                    if ($i < 4) {
                        $result .= '<span class="rf_command" onclick="document.getElementById(\'multifile_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display=\'block\';">Ещё</span>';
                    }
                    $result .= '</div>';
                }
                break;
                // селект с возможностью создать новый элемент
            // селект с возможностью создать новый элемент
            case 'selectplus':
                $result .= '<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv">
					<input type="text" id="' . $_field['ID'] . '_addnew" name="' . $_field['NAME'] . '_addnew">
					</div>
					<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv\').style.display=\'block\';">Добавить элемент</span>';
                // обратите внимание на отсутствие брейка - далене должен идти case 'select'
                // селект
            // селект
            case 'select':
                $result .= '<select ' . $field . '>
					<option value=""' . ($_field['VALUE'] == '' ? ' selected' : '') . '></option>';
                foreach ($_field['ITEMS'] as $k => $v) {
                    $result .= '<option value="' . $k . '"' . ($_field['VALUE'] == $k ? ' selected' : '') . '>' . $v . '</option>';
                }
                $result .= '</select>';
                break;
                // сабмит
            // сабмит
            case 'submit':
                $result .= '<input type="submit" ' . $field . ' value="' . $_field['VALUE'] . '">';
                break;
                // текстареа
            // текстареа
            case 'textarea':
                $result .= '<textarea ' . $field . ' rows="10" cols="60">' . htmlspecialchars($_field['VALUE']) . '</textarea>';
                break;
                // массив текстовых полей с ключами
            // массив текстовых полей с ключами
            case 'textarray':
                if (is_array($_field['VALUE'])) {
                    $sizeof = sizeof($_field['VALUE']);
                } else {
                    $_field['VALUE'] = array(array('' => ''));
                    $sizeof = 5;
                }
                $result .= '<table id="' . $_field['ID'] . '_table">';
                $i = 0;
                foreach ($_field['VALUE'] as &$v) {
                    $result .= '<tr id="' . $_field['ID'] . '_tr_' . $i . '">
						<td><input type="text" class="' . $_field['CLASS'] . ' rf_textarray_key"   name="' . $_field['ID'] . '_key[' . $i . ']"   id="' . $_field['ID'] . '_key_' . $i . '" value="' . htmlspecialchars($k) . '"></td>
						<td><input type="text" class="' . $_field['CLASS'] . ' rf_textarray_value" name="' . $_field['ID'] . '_value[' . $i . ']" id="' . $_field['ID'] . '_key_' . $i . '" value="' . htmlspecialchars($v) . '"></td>
						</tr>';
                    $i++;
                }
                // тут немножко говнеца
                $result .= '</table>
					<script type="text/javascript">
						var last' . $_field['ID'] . '_counter = "' . $i . '";
					</script>
					<span class="rf_command" onclick="
						var newtr = document.createElement(\'tr\');
						newtr.id  = \'' . $_field['ID'] . '_tr_\' + last' . $_field['ID'] . '_counter;
						document.getElementById(\'' . $_field['ID'] . '_table\').appendChild(newtr);
						var newinp       = document.createElement(\'input\');
						newinp.type      = \'text\';
						newinp.className = \'' . $_field['CLASS'] . ' rf_textarray_key\';
						newinp.id        = \'' . $_field['ID'] . '_key_\' + last' . $_field['ID'] . '_counter;
						newinp.name      = \'' . $_field['ID'] . '_key[\' + last' . $_field['ID'] . '_counter + \']\';
						var newtd        = document.createElement(\'td\');
						newtr.appendChild(newtd);
						newtd.appendChild(newinp);
						newinp           = document.createElement(\'input\');
						newinp.type      = \'text\';
						newinp.className = \'' . $_field['CLASS'] . ' rf_textarray_key\';
						newinp.id        = \'' . $_field['ID'] . '_value_\' + last' . $_field['ID'] . '_counter;
						newinp.name      = \'' . $_field['ID'] . '_value[\' + last' . $_field['ID'] . '_counter + \']\';
						newtd            = document.createElement(\'td\');
						newtr.appendChild(newtd);
						newtd.appendChild(newinp)
						last' . $_field['ID'] . '_counter++;
					">Ещё</span>';
                break;
                // привязка к Яндекс-карте
            // привязка к Яндекс-карте
            case 'yandexmap':
                require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/fileman/properties.php';
                ob_start();
                CIBlockPropertyMapYandex::GetPropertyFieldHtml(array('ID' => $_field['ID'], 'NAME' => $_field['LABEL'], 'ACTIVE' => 'Y', 'CODE' => $_field['NAME'], 'MULTIPLE' => 'N', 'USER_TYPE' => 'map_yandex', 'USER_TYPE_SETTINGS' => ''), array('VALUE' => $_field['VALUE']), array('VALUE' => $_field['NAME'], 'FORM_NAM' => CFormRenderer::$formname, 'MODE' => 'FORM_FILL'));
                $cart = ob_get_clean();
                if ($_field['MAP_CENTER']) {
                    $cart = str_replace('map.disableRuler();', 'map.disableRuler(); map.setCenter(new context.YMaps.GeoPoint(' . $_field['MAP_CENTER'] . '), 10, context.YMaps.MapType.MAP);', $cart);
                }
                $result .= $cart;
                break;
                //Пароль
            //Пароль
            case 'password':
                $result .= '<input type="password" ' . $field . '>';
                break;
                // обычный текстовый инпут
            // обычный текстовый инпут
            case 'text':
            default:
                $result .= '<input type="text" ' . $field . ' value="' . htmlspecialchars($_field['VALUE']) . '">';
                break;
        }
        if (ToLower($_field['TYPE'] != 'hidden')) {
            $result .= '</div></div>';
        }
        return $result;
    }
Ejemplo n.º 2
0
?>
:</td>
		<td>
			<?
			CIBlockPropertyMapYandex::GetPropertyFieldHtml
			(
				array
				(
					'ID'        => 'COORD',
					'NAME'      => 'COORD',
					'ACTIVE'    => 'Y',
					'CODE'      => 'COORD',
					'MULTIPLE'  => 'N',
					'USER_TYPE' => 'map_yandex',
					'USER_TYPE_SETTINGS' => ''
				),
				array
				(
					'VALUE' => $arElement['LATITUDE'].','.$arElement['LONGITUDE']
				),
				array
				(
					'VALUE'    => 'COORD',
					'FORM_NAM' => 'hole_edit',
					'MODE'     => 'FORM_FILL'
				)
			);
			?>
		</td>
	</tr>
	<tr valign="top">