Регистрация пользователей. Меняем порядок полей через result_modifier.php
Запись от 13.08.2014
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true);
// Function for order
function sortArray($arSource, $arOrder, $arUserFields = Array()) {
$arFirst = Array();
$arUserProps = Array();
if(count($arUserFields)) {
foreach($arUserFields as $keyFiels=>$arField) {
$arUserProps[] = $keyFiels;
}
}
$arUsedFields = array_merge($arSource, $arUserProps);
foreach($arOrder as $sField) {
if(in_array($sField, $arUsedFields)) {
$arFirst[] = $sField;
foreach($arUsedFields as $keySource=>$sSource) {
if($sSource == $sField) {
unset($arUsedFields[$keySource]);
}
}
}
}
$arResult = array_merge($arFirst, $arUsedFields);
return $arResult;
}
// Set array of order fields
$arOrder = Array(
"NAME",
"PERSONAL_PHONE",
"EMAIL",
"UF_PERSON",
"PASSWORD",
"CONFIRM_PASSWORD"
);
// Order of array
$arResult["SHOW_FIELDS"] = sortArray($arResult["SHOW_FIELDS"], $arOrder, $arResult["USER_PROPERTIES"]["DATA"]);
template.php, на случай, если используются пользовательские поля:
...
<?if(GetMessage("REGISTER_FIELD_".$FIELD)):?>
<tr>
<td><?=GetMessage("REGISTER_FIELD_".$FIELD)?>:<?if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"):?><span class="starrequired">*</span><?endif?></td>
</tr>
<?endif;?>
...
default:
if(strstr($FIELD, "UF_")) {
$arUserField = $arResult["USER_PROPERTIES"]["DATA"][$FIELD];
?>
<tr>
<td>
<?=$arUserField["EDIT_FORM_LABEL"]?>:<?if ($arUserField["MANDATORY"]=="Y"):?><span class="starrequired">*</span><?endif;?>
</td>
</tr>
<tr>
<td>
<?$APPLICATION->IncludeComponent(
"bitrix:system.field.edit",
$arUserField["USER_TYPE"]["USER_TYPE_ID"],
array("bVarsFromForm"=>$arResult["bVarsFromForm"],"arUserField"=>$arUserField,"form_name"=>"regform"), null, array("HIDE_ICONS"=>"Y"));?>
</td>
</tr>
<?
} else {
if ($FIELD == "PERSONAL_BIRTHDAY")
...
<?if($arResult["USER_PROPERTIES"]["SHOW"] == "Y" && false):?>
Здесь я обозначил ключевые моменты, думаю, будет понятно что на что менять.
Как формируется порядок полей штатно - я не нашел. Подозреваю, что он жестко прописан в ядре или компоненте.
В идеале, конечно, добавить в .parameters.php и как-то там указывать порядок, но пока не придумал, как лучше это сделать.