вверх
29/07 2017
назад

Часть 4. Подключение опций модуля

Любой серьезный модуль имеет пользовательские настройки. Например, для гостевой книги мы решили, что ее необходимо (или нет) модерировать, что мы можем разрешить или запретить 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. Опции модуля «Гостевые книги»

Доставка полезной информации от экспертов по Битрикс24!

Подпишитесь, и раз в неделю у вас на почте будет подборка полезных советов и обзоров про Битрикс24

Выберите рассылку

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

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