Просмотров: 6361 (Статистика ведётся с 06.02.2017)
Роберт Басыров
Сложность урока:
4 уровень - сложно, требуется сосредоточится, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в редакциях:
Старт

Настраиваем страницу ответа

Интерфейс страницы Дать ответ (answer.php) создается с помощью компонента Редактирование результата. Однако стандартный компонент для наших целей не подходит, поскольку нам необходимо вносить изменения только в поле Ответ. Поэтому нам необходимо скопировать полностью компонент в собственное пространство имен О размещении компонентов в собственном пространстве имен смотрите в учебном курсе Разработчик Bitrix Framework. , чтобы отредактировать и код компонента, и шаблон компонента под наши нужды.


Копирование и размещение компонента

Выполним копирование компонента Редактирование результата в пространство demo, т.е. папка компонента /form.result.edit будет располагаться в папке /bitrix/components/demo.

Теперь откроем на редактирование страницу answer.php в визуальном редакторе и разместим скопированный компонент Если компонент не отобразится в дереве компонентов после копирования, то необходимо обновить закешированные данные

Редактирование результата (demo: form.result.edit Компонент служит для редактирования результатов заполнения веб-форм.

При его использовании в сочетании с компонентом Список результатов значение поля RESULT_ID можно оставить по умолчанию. Если же компонент используется самостоятельно, то необходимо определить откуда компонент должен брать значение параметра RESULT_ID или задать его явно. Компонент стандартный и входит в дистрибутив модуля.

В структуре визуального редактора компонент расположен по пути Сервисы > Веб-формы > Редактирование результата.

Компонент относится к модулю Веб-формы.

Настройки, определяющие права групп пользователей на редактирование результатов устанавливаются в настройках каждой из веб-форм, а в случае работы в расширенном режиме также в настройках статусов.

Описание компонента «Редактирование результата» в пользовательской документации.
):

Настраиваем компонент следующим образом:

  • В поле ID результата оставляем код ={$_REQUEST[RESULT_ID]}, предложенный по умолчанию.
  • В поле Выводить на редактирование дополнительные поля обязательно указываем Да.
  • В обоих параметрах Страница со списком результатов и Страница просмотра результата указываем index.php, чтобы со страницы составления ответа осуществлялся переход только на главную страницу системы Вопрос-ответ.
  • Параметры Игнорировать свой шаблон и Выводить форму смены статуса можно не настраивать, поскольку они не будут использоваться в компоненте и мы их потом удалим за ненадобностью.

Сохраняем компонент и переходим к редактированию файла компонента /bitrix/components/demo/form.result.edit/.parameters.php.


Редактирование параметров компонента

В форме добавления ответа на вопрос не будет поля для смены статуса. При нажатии на кнопку Отправить, расположенной на форме, статус меняется автоматически на Ответ. Поэтому в параметры компонента необходимо добавить возможность указания этого статуса (чтобы компонент "знал", с каким статусом работать). В связи с этим в файле .parameters.php перед строкой:

$arComponentParameters = array(...

добавляем код формирования списка веб-форм сайта и списка статусов веб-формы, зависящего от выбранной впоследствии в параметрах компонента веб-формы:

$arrForms = array();
$rsForm = CForm::GetList($by='s_sort', $order='asc', array("SITE" => $_REQUEST["site"]), $v3);
while ($arForm = $rsForm->Fetch())
{
	$arrForms[$arForm["ID"]] = "[".$arForm["ID"]."] ".$arForm["NAME"];
}

$arrStatuses = array();
$rsStat = CFormStatus::GetList($arCurrentValues["WEB_FORM_ID"], $by='s_sort', $order='asc');
while ($arStatus = $rsStat->Fetch())
{
	$arrStatuses[$arStatus["ID"]] = "[".$arStatus["ID"]."] ".$arStatus["TITLE"];
}

В массив PARAMETERS добавляем код для отображения параметров веб-формы и статуса:

		"WEB_FORM_ID" => array(
			"NAME" => GetMessage("COMP_FORM_PARAMS_WEB_FORM_ID"),
			"TYPE" => "LIST",
			"VALUES" => $arrForms,
			"DEFAULT" => "={\$_REQUEST[WEB_FORM_ID]}",
			"PARENT" => "DATA_SOURCE",
			"REFRESH" => "Y",
		),
		"STATUS_ID" => array(
			"NAME" => GetMessage("COMP_FORM_PARAMS_STATUS_ID"),
			"TYPE" => "LIST",
			"VALUES" => $arrStatuses,
			"DEFAULT" => '',
			"PARENT" => "DATA_SOURCE",
		),

Для новых параметров COMP_FORM_PARAMS_WEB_FORM_ID и COMP_FORM_PARAMS_STATUS_ID задаем языковые сообщения в файле /bitrix/components/demo/form.result.edit/lang/ru/.parameters.php:

$MESS ['COMP_FORM_PARAMS_WEB_FORM_ID'] = "ID веб-формы системы \"Вопрос-ответ\"(используется только для проверки)";
$MESS ['COMP_FORM_PARAMS_STATUS_ID'] = "ID статуса, когда дан ответ на вопрос";

Теперь параметры компонента полностью готовы под наши нужды. Форма настройки параметров компонента приобретает следующий вид:

В настройках компонента указываем нашу веб-форму Вопрос-ответ и статус Ответ.

Переходим к изменению логики компонента, т.е к редактированию файла /bitrix/components/demo/form.result.edit/component.php.


Изменение логики компонента

Необходимо сформировать массив данных компонента так, чтобы только в поле ответа можно было вносить данные, а сами вопросы формы не были доступны для редактирования. Публикация вопроса (т.е. смена его статуса на Ответ) должна происходить сразу же по нажатии кнопки Отправить. Поэтому изменяем код компонента:

Код компонента

Теперь необходимо изменить шаблон компонента под нашу логику.


Редактирование шаблона компонента

В форме ответа на вопрос помимо поля ввода ответа должны отображаться следующие данные: фамилия, имя, отчество пользователя, создавшего вопрос, текст вопроса, дата создания и дата ответа на вопрос. В связи с этим код шаблона компонента будет следующим:

Код шаблона компонента

Чтобы отобразить введенные пользователем значения вопросов Фамилия, имя, отчество и Вопрос, необходимо знать названия их html-полей При выводе веб-формы все ответы на вопросы представляются в виде HTML полей, заполняя которые, пользователи отвечают на тот или иной вопрос.
Подробнее...
. Например, если вопрос имеет ответ типа text, то поле формы будет иметь имя form_text_id, где id - это идентификатор значения ответа, который можно посмотреть в форме настройки вопроса:

Таким образом, поля формы Фамилия, имя, отчество и Вопрос имеют имена form_text_29 и form_textarea_30 соответственно, которые и используются в коде шаблона компонента.

Примечание: если в параметры компонента добавить настройку выбора отображаемых полей формы, то в коде не придется указывать имена полей явно (см. пример выше по добавлению параметров идентификаторов веб-формы и статуса).

В файле языковых сообщений шаблона компонента вносим изменения:

$MESS ['FORM_VIEW'] = "Вернуться к списку вопросов";
$MESS ['FORM_DATE_CREATE'] = "Дата создания вопроса";
$MESS ['FORM_TIMESTAMP'] = "Дата ответа на вопрос";


В результате проделанных операций, когда модератор системы или администратор сайта со страницы со списком вопросов переходят по ссылке Ответить, открывается страница ответа на вопрос:


3


Курсы разработаны в компании «1С-Битрикс»