Пример создания страницы редактирования
Описание создания административной страницы редактирования можно увидеть здесь.
Пример
<? // подключим все необходимые файлы: require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); // первый общий пролог require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/include.php"); // инициализация модуля require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/prolog.php"); // пролог модуля // подключим языковой файл IncludeModuleLangFile(__FILE__); // получим права доступа текущего пользователя на модуль $POST_RIGHT = $APPLICATION->GetGroupRight("subscribe"); // если нет прав - отправим к форме авторизации с сообщением об ошибке if ($POST_RIGHT == "D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); // сформируем список закладок $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("rub_tab_rubric"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("rub_tab_rubric_title")), array("DIV" => "edit2", "TAB" => GetMessage("rub_tab_generation"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("rub_tab_generation_title")), ); $tabControl = new CAdminTabControl("tabControl", $aTabs); $ID = intval($ID); // идентификатор редактируемой записи $message = null; // сообщение об ошибке $bVarsFromForm = false; // флаг "Данные получены с формы", обозначающий, что выводимые данные получены с формы, а не из БД. // ******************************************************************** // // ОБРАБОТКА ИЗМЕНЕНИЙ ФОРМЫ // // ******************************************************************** // if( $REQUEST_METHOD == "POST" // проверка метода вызова страницы && ($save!="" || $apply!="") // проверка нажатия кнопок "Сохранить" и "Применить" && $POST_RIGHT=="W" // проверка наличия прав на запись для модуля && check_bitrix_sessid() // проверка идентификатора сессии ) { $rubric = new CRubric; // обработка данных формы $arFields = Array( "ACTIVE" => ($ACTIVE <> "Y"? "N":"Y"), "NAME" => $NAME, "SORT" => $SORT, "DESCRIPTION" => $DESCRIPTION, "LID" => $LID, "AUTO" =>($AUTO <> "Y"? "N":"Y"), "DAYS_OF_MONTH" => $DAYS_OF_MONTH, "DAYS_OF_WEEK" => (is_array($DAYS_OF_WEEK)?implode(",", $DAYS_OF_WEEK):""), "TIMES_OF_DAY" => $TIMES_OF_DAY, "TEMPLATE" => $TEMPLATE, "VISIBLE" => ($VISIBLE <> "Y"? "N":"Y"), "FROM_FIELD" => $FROM_FIELD, "LAST_EXECUTED" => $LAST_EXECUTED ); // сохранение данных if($ID > 0) { $res = $rubric->Update($ID, $arFields); } else { $ID = $rubric->Add($arFields); $res = ($ID > 0); } if($res) { // если сохранение прошло удачно - перенаправим на новую страницу // (в целях защиты от повторной отправки формы нажатием кнопки "Обновить" в браузере) if ($apply != "") // если была нажата кнопка "Применить" - отправляем обратно на форму. LocalRedirect("/bitrix/admin/rubric_edit.php?ID=".$ID."&mess=ok&lang=".LANG."&".$tabControl->ActiveTabParam()); else // если была нажата кнопка "Сохранить" - отправляем к списку элементов. LocalRedirect("/bitrix/admin/rubric_admin.php?lang=".LANG); } else { // если в процессе сохранения возникли ошибки - получаем текст ошибки и меняем вышеопределённые переменные if($e = $APPLICATION->GetException()) $message = new CAdminMessage(GetMessage("rub_save_error"), $e); $bVarsFromForm = true; } } // ******************************************************************** // // ВЫБОРКА И ПОДГОТОВКА ДАННЫХ ФОРМЫ // // ******************************************************************** // // значения по умолчанию $str_SORT = 100; $str_ACTIVE = "Y"; $str_AUTO = "N"; $str_DAYS_OF_MONTH = ""; $str_DAYS_OF_WEEK = ""; $str_TIMES_OF_DAY = ""; $str_VISIBLE = "Y"; $str_LAST_EXECUTED = ConvertTimeStamp(false, "FULL"); $str_FROM_FIELD = COption::GetOptionString("subscribe", "default_from"); // выборка данных if($ID>0) { $rubric = CRubric::GetByID($ID); if(!$rubric->ExtractFields("str_")) $ID=0; } // дополнительная подготовка данных if($ID>0 && !$message) $DAYS_OF_WEEK = explode(",", $str_DAYS_OF_WEEK); if(!is_array($DAYS_OF_WEEK)) $DAYS_OF_WEEK = array(); // если данные переданы из формы, инициализируем их if($bVarsFromForm) $DB->InitTableVarsForEdit("b_list_rubric", "", "str_"); // ******************************************************************** // // ВЫВОД ФОРМЫ // // ******************************************************************** // // установим заголовок страницы $APPLICATION->SetTitle(($ID>0? GetMessage("rub_title_edit").$ID : GetMessage("rub_title_add"))); // не забудем разделить подготовку данных и вывод require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); // конфигурация административного меню $aMenu = array( array( "TEXT"=>GetMessage("rub_list"), "TITLE"=>GetMessage("rub_list_title"), "LINK"=>"rubric_admin.php?lang=".LANG, "ICON"=>"btn_list", ) ); if($ID>0) { $aMenu[] = array("SEPARATOR"=>"Y"); $aMenu[] = array( "TEXT"=>GetMessage("rub_add"), "TITLE"=>GetMessage("rubric_mnu_add"), "LINK"=>"rubric_edit.php?lang=".LANG, "ICON"=>"btn_new", ); $aMenu[] = array( "TEXT"=>GetMessage("rub_delete"), "TITLE"=>GetMessage("rubric_mnu_del"), "LINK"=>"javascript:if(confirm('".GetMessage("rubric_mnu_del_conf")."'))window.location='rubric_admin.php?ID=".$ID."&action=delete&lang=".LANG."&".bitrix_sessid_get()."';", "ICON"=>"btn_delete", ); $aMenu[] = array("SEPARATOR"=>"Y"); $aMenu[] = array( "TEXT"=>GetMessage("rub_check"), "TITLE"=>GetMessage("rubric_mnu_check"), "LINK"=>"template_test.php?lang=".LANG."&ID=".$ID ); } // создание экземпляра класса административного меню $context = new CAdminContextMenu($aMenu); // вывод административного меню $context->Show(); ?> <? // если есть сообщения об ошибках или об успешном сохранении - выведем их. if($_REQUEST["mess"] == "ok" && $ID>0) CAdminMessage::ShowMessage(array("MESSAGE"=>GetMessage("rub_saved"), "TYPE"=>"OK")); if($message) echo $message->Show(); elseif($rubric->LAST_ERROR!="") CAdminMessage::ShowMessage($rubric->LAST_ERROR); ?> <? // далее выводим собственно форму ?> <form method="POST" Action="<?echo $APPLICATION->GetCurPage()?>" ENCTYPE="multipart/form-data" name="post_form"> <?// проверка идентификатора сессии ?> <?echo bitrix_sessid_post();?> <? // отобразим заголовки закладок $tabControl->Begin(); ?> <? //******************** // первая закладка - форма редактирования параметров рассылки //******************** $tabControl->BeginNextTab(); ?> <tr> <td width="40%"><?echo GetMessage("rub_act")?></td> <td width="60%"><input type="checkbox" name="ACTIVE" value="Y"<?if($str_ACTIVE == "Y") echo " checked"?>></td> </tr> <tr> <td><?echo GetMessage("rub_visible")?></td> <td><input type="checkbox" name="VISIBLE" value="Y"<?if($str_VISIBLE == "Y") echo " checked"?>></td> </tr> <tr> <td><?echo GetMessage("rub_site")?></td> <td><?echo CLang::SelectBox("LID", $str_LID);?></td> </tr> <tr> <td><span class="required">*</span><?echo GetMessage("rub_name")?></td> <td><input type="text" name="NAME" value="<?echo $str_NAME;?>" size="30" maxlength="100"></td> </tr> <tr> <td><?echo GetMessage("rub_sort")?></td> <td><input type="text" name="SORT" value="<?echo $str_SORT;?>" size="30"></td> </tr> <tr> <td><?echo GetMessage("rub_desc")?></td> <td><textarea class="typearea" name="DESCRIPTION" cols="45" rows="5" wrap="VIRTUAL"><?echo $str_DESCRIPTION; ?></textarea></td> </tr> <tr> <td><?echo GetMessage("rub_auto")?></td> <td><input type="checkbox" name="AUTO" value="Y"<?if($str_AUTO == "Y") echo " checked"?> OnClick="if(this.checked) tabControl.EnableTab('edit2'); else tabControl.DisableTab('edit2');"></td> </tr> <? //******************** // вторая закладка - параметры автоматической генерации рассылки //******************** $tabControl->BeginNextTab(); ?> <tr class="heading"> <td colspan="2"><?echo GetMessage("rub_schedule")?></td> </tr> <tr> <td width="40%"><span class="required">*</span><?echo GetMessage("rub_last_executed"). " (".FORMAT_DATETIME."):"?></td> <td width="60%"><?echo CalendarDate("LAST_EXECUTED", $str_LAST_EXECUTED, "post_form", "20")?></td> </tr> <tr> <td><?echo GetMessage("rub_dom")?></td> <td><input class="typeinput" type="text" name="DAYS_OF_MONTH" value="<?echo $str_DAYS_OF_MONTH;?>" size="30" maxlength="100"></td> </tr> <tr> <td><?echo GetMessage("rub_dow")?></td> <td> <table cellspacing=1 cellpadding=0 border=0 class="internal"> <? $arDoW = array( "1" => GetMessage("rubric_mon"), "2" => GetMessage("rubric_tue"), "3" => GetMessage("rubric_wed"), "4" => GetMessage("rubric_thu"), "5" => GetMessage("rubric_fri"), "6" => GetMessage("rubric_sat"), "7" => GetMessage("rubric_sun") ); ?> <tr class="heading"><?foreach($arDoW as $strVal=>$strDoW):?> <td><?=$strDoW?></td> <?endforeach;?> </tr> <tr> <?foreach($arDoW as $strVal=>$strDoW):?> <td><input type="checkbox" name="DAYS_OF_WEEK[]" value="<?=$strVal?>"<?if(array_search($strVal, $DAYS_OF_WEEK) !== false) echo " checked"?>></td> <?endforeach;?> </tr> </table> </td> </tr> <tr> <td><span class="required">*</span><?echo GetMessage("rub_tod")?></td> <td><input type="text" name="TIMES_OF_DAY" value="<?echo $str_TIMES_OF_DAY;?>" size="30" maxlength="255"></td> </tr> <tr class="heading"> <td colspan="2"><?echo GetMessage("rub_template")?></td> </tr> <? $arTemplates=CPostingTemplate::GetList(); if(count($arTemplates)>0): ?> <tr> <td><span class="required">*</span><?echo GetMessage("rub_templates")?></td> <td><table> <? $i=0; foreach($arTemplates as $strTemplate): $arTemplate = CPostingTemplate::GetByID($strTemplate); ?> <tr> <td valign="top"><input type="radio" id="TEMPLATE<?=$i?>" name="TEMPLATE" value="<?=$arTemplate["PATH"]?>"<?if($str_TEMPLATE==$arTemplate["PATH"]) echo "checked"?>></td> <td> <label for="TEMPLATE<?=$i?>" title="<?=$arTemplate["DESCRIPTION"]?>"><?=(strlen($arTemplate["NAME"])>0?$arTemplate["NAME"]:GetMessage("rub_no_name"))?></label><br> <?if(IsModuleInstalled("fileman")):?> <a title="<?=GetMessage("rub_manage")?>" href="/bitrix/admin/fileman_admin.php?path=<?=urlencode("/".$arTemplate["PATH"])?>"><?=$arTemplate["PATH"]?></a> <?else:?> <?=$arTemplate["PATH"]?> <?endif?> </td> <?$i++?> </tr> <?endforeach;?> </table></td> </tr> <?else:?> <tr> <td colspan="2"><?=GetMessage("rub_no_templates")?></td> </tr> <?endif?> <tr class="heading"> <td colspan="2"><?echo GetMessage("rub_post_fields")?></td> </tr> <tr> <td><span class="required">*</span><?echo GetMessage("rub_post_fields_from")?></td> <td><input type="text" name="FROM_FIELD" value="<?echo $str_FROM_FIELD;?>" size="30" maxlength="255"></td> </tr> <? // завершение формы - вывод кнопок сохранения изменений $tabControl->Buttons( array( "disabled"=>($POST_RIGHT<"W"), "back_url"=>"rubric_admin.php?lang=".LANG, ) ); ?> <input type="hidden" name="lang" value="<?=LANG?>"> <?if($ID>0 && !$bCopy):?> <input type="hidden" name="ID" value="<?=$ID?>"> <?endif;?> <? // завершаем интерфейс закладок $tabControl->End(); ?> <? // дополнительное уведомление об ошибках - вывод иконки около поля, в котором возникла ошибка $tabControl->ShowWarnings("post_form", $message); ?> <? // дополнительно: динамическая блокировка закладки, если требуется. ?> <script language="JavaScript"> <!-- if(document.post_form.AUTO.checked) tabControl.EnableTab('edit2'); else tabControl.DisableTab('edit2'); //--> </script> <? // информационная подсказка echo BeginNote();? > <span class="required">*</span><?echo GetMessage("REQUIRED_FIELDS")?> <?echo EndNote();?> </form> <? // завершение страницы require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); ?>
© «Битрикс», 2001-2024, «1С-Битрикс», 2024