Часть 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")?>"> <input type="reset" class="button" name="reset" value="<?echo GetMessage("IX_GB_OPTIONS_RESET")?>"><input type="hidden" name="Update" value="Y"> <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. Опции модуля «Гостевые книги»