Блог - Инфо-Эксперт

Любой серьезный модуль имеет пользовательские настройки. Например, для гостевой книги мы решили, что ее необходимо (или нет) модерировать, что мы можем разрешить или запретить HTML в сообщениях от пользователей, и что мы предоставим разработчикам возможность указывать тип сообщений (text или html). Для описания наших опций мы должны создать файл «/ix_guestbook/options.php»:

<?

 

global $MESS;

include(GetLangFileName($GLOBALS["DOCUMENT_ROOT"]."/bitrix/modules/ix_guestbook/lang/", "/options.php"));

 

$module_id = "ix_guestbook";

CModule::IncludeModule($module_id);

 

$MOD_RIGHT = $APPLICATION->GetGroupRight($module_id);

if($MOD_RIGHT>="R"):

 

$arAllOptions =

        Array(

                Array("ix_gb_moderate", GetMessage("IX_GB_MODERATE"), "Y", Array("checkbox", "Y")),

                Array("ix_gb_html", GetMessage("IX_GB_HTML"), "N", Array("checkbox", "N")),

                Array("ix_gb_html_default", GetMessage("IX_GB_DEFAULT_HTML"), "N", Array("checkbox", "N"))

                );

 

if($MOD_RIGHT>="W"):

 

        if ($REQUEST_METHOD=="GET" && strlen($RestoreDefaults)>0)

        {

                COption::RemoveOption($module_id);

                reset($arGROUPS);

                while(list(,$value)=each($arGROUPS))

                        $APPLICATION->DelGroupRight($module_id, array($value["ID"]));

        }

 

        if($REQUEST_METHOD=="POST" && strlen($Update)>0)

        {

                for($i=0; $i<count($arAllOptions); $i++)

                {

                        $name=$arAllOptions[$i][0];

                        $val=$$name;

                        if($arAllOptions[$i][3][0]=="checkbox" && $val!="Y")

                                $val="N";

                        COption::SetOptionString($module_id, $name, $val, $arAllOptions[$i][1]);

                }

        }

endif; //if($MOD_RIGHT>="W"):

?>

<form method="POST" action="<?echo $APPLICATION->GetCurPage()?>?mid=<?=htmlspecialchars($mid)?>&lang=<?echo LANG?>">

<table border="0" cellspacing="1" cellpadding="3" class="edittable">

        <?

        for($i=0; $i<count($arAllOptions); $i++):

                $Option = $arAllOptions[$i];

                $val = COption::GetOptionString($module_id, $Option[0], $Option[2]);

                $type = $Option[3];

        ?>

                <tr>

                        <td valign="top"><font class="tablefieldtext"><?echo $Option[1]?></font></td>

                        <td valign="top">

                                <font class="tablebodytext">

                                        <?if($type[0]=="checkbox"):?>

                                                <input type="checkbox" name="<?echo htmlspecialchars($Option[0])?>" value="Y"<?if($val=="Y")echo" checked";?>>

                                        <?elseif($type[0]=="text"):?>

                                                <input type="text" class="typeinput" size="<?echo $type[1]?>" maxlength="255" value="<?echo htmlspecialchars($val)?>" name="<?echo htmlspecialchars($Option[0])?>">

                                        <?elseif($type[0]=="textarea"):?>

                                                <textarea rows="<?echo $type[1]?>" class="typearea" cols="<?echo $type[2]?>" name="<?echo htmlspecialchars($Option[0])?>"><?echo htmlspecialchars($val)?></textarea>

                                        <?endif?>

                                        <?if($Option[0] == "spam_rating")echo "%"?>

                                </font>

                        </td>

                </tr>

        <?

        endfor;

        ?>

</table>

<?require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/group_rights.php");?>

<br>

<script language="JavaScript">

function RestoreDefaults()

{

        if(confirm('<?echo AddSlashes(GetMessage("MAIN_HINT_RESTORE_DEFAULTS_WARNING"))?>'))

                window.location = "<?echo $APPLICATION->GetCurPage()?>?RestoreDefaults=Y&lang=<?echo LANG?>&mid=<?echo urlencode($mid)?>";

}

</script>

<div align="left">

        <input type="submit" class="button" name="Update" <?if ($MOD_RIGHT<"W") echo "disabled" ?> value="<?echo GetMessage("IX_GB_OPTIONS_SAVE")?>">&nbsp;<input type="reset" class="button" name="reset" value="<?echo GetMessage("IX_GB_OPTIONS_RESET")?>"><input type="hidden" name="Update" value="Y">&nbsp;<input type="button" <?if ($MOD_RIGHT<"W") echo "disabled" ?> class="button" title="<?echo GetMessage("MAIN_HINT_RESTORE_DEFAULTS")?>" OnClick="RestoreDefaults();" value="<?echo GetMessage("MAIN_RESTORE_DEFAULTS")?>">

</div>

</form>

<?endif;?>

Код выглядит сложным, но на самом деле он целиком заимствован из аналогичного файла настроек какого-то стандартного модуля, и нам пришлось изменить лишь его малую часть. Сначала обратим внимание на вызов файлов со строковыми константами (это придется делать постоянно). В нашем случае, вызывается файл «ix_guestbook/lang/ru/options.php» следующего содержания:

<?

$MESS ['IX_GB_MODERATE'] = "Модерировать гостевые:";

$MESS ['IX_GB_HTML'] = "Разрешить html в сообщениях";

$MESS ['IX_GB_DEFAULT_HTML'] = "Включить по умолчанию HTML в сообщениях";

$MESS ['IX_GB_OPTIONS_SAVE'] = "Сохранить";

?>

Далее следует код обращения к конкретному модулю ix_guestbook. И самое главное, что нам понадобится сделать – это описать собственный массив $arAllOptions. Разберем лишь одну строку:

Array("ix_gb_moderate", GetMessage("IX_GB_MODERATE"), "Y", Array("checkbox", "Y")),

Первый параметр массива – это название опции. Второй – текстовое описание опции, взятое из $MESS ['IX_GB_MODERATE']. Третий параметр – это значение опции по умолчанию. Последний параметр служит для описания типа визуального элемента формы, который позволит пользователю редактировать значение опции. В нашем случае, это checkbox со значением “Y” по умолчанию. Другими вариантами могли бы быть текстовые поля (Array("text", 2)), списки значений (selectbox, пример можно посмотреть в «\modules\main\options.php»), и т.д.

Описав свои собственные опции, вставим наше название для кнопки сохранения (см. GetMessage("IX_GB_OPTIONS_SAVE") выше) – и это окажется последним, что нам необходимо сделать для подключения собственных опций модуля. Результат будет выглядеть следующим образом:

Рис. 3. Опции модуля «Гостевые книги»

спасибо за просмотр!

Created by potrace 1.13, written by Peter Selinger 2001-2015

Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов: