# Form Draft 1.0.7+ | 1.1.2+

# Базовое использование

# Пример шаблона:

<xf:comment>Подключение JavaScript ниже требуется только для версий XenForo до 2.3.0</xf:comment>
<xf:js src="TC/ComponentLibrary/form.js" addon="TC/ComponentLibrary" min="1" />

<xf:form class="block"
		 data-xf-init="tc-form-draft"
		 data-draft-save-url="{{ link('demo/form-draft/save') }}"
		 data-draft-load-url="{{ link('demo/form-draft/load') }}">
	<div class="block-container">
		<div class="block-body">
			<xf:textboxrow label="Test 1"
						   name="test1" />

			<xf:textboxrow label="Test 2"
						   name="test2" />

			<xf:textboxrow label="Test 3"
						   name="test3" />
		</div>

		<xf:submitrow icon="save">
			<xf:html>
				<xf:macro id="tc_clib_form_draft_macros::controls"
						  arg-menuHref="{{ link('demo/form-draft/menu') }}" />
			</xf:html>
		</xf:submitrow>
	</div>
</xf:form>

# Пример контроллера:

<?php

namespace MV\Playground\Pub\Controller;

use TC\ComponentLibrary\ControllerPlugin\FormDraft;
use XF\Mvc\Reply\AbstractReply;
use XF\Pub\Controller\AbstractController;

class Demo extends AbstractController
{
	public function actionIndex(): AbstractReply
	{
		return $this->view(
			'Vendor\AddOn:Demo\FormInputs',
			'demo_form'
		);
	}

	public function actionFormDraftMenu(): AbstractReply
	{
		/** @var FormDraft $formDraftPlugin */
		$formDraftPlugin = $this->plugin('TC\ComponentLibrary:FormDraft');

		return $formDraftPlugin->actionMenu('demo');
	}

	public function actionFormDraftLoad(): AbstractReply
	{
		/** @var FormDraft $formDraftPlugin */
		$formDraftPlugin = $this->plugin('TC\ComponentLibrary:FormDraft');

		return $formDraftPlugin->actionLoad('demo');
	}

	public function actionFormDraftSave(): AbstractReply
	{
		/** @var FormDraft $formDraftPlugin */
		$formDraftPlugin = $this->plugin('TC\ComponentLibrary:FormDraft');

		return $formDraftPlugin->actionSave('demo');
	}
}

Пример черновиков форм
Пример черновиков форм

# TC\ComponentLibrary\ControllerPlugin\FormDraft

# actionMenu

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

public function actionMenu(string $formKey, string $draftEntity = null, string $viewClass = null, string $template = null, array  $params = []): AbstractReply

# Параметры

Параметр Тип Значение по умолчанию Описание
formKey string Уникальный идентификатор обрабатываемой формы.
draftEntity string TC\ComponentLibrary:FormDraft Сущность для сохранения черновиков.
viewClass string TC\ComponentLibrary:FormDraft\Menu Класс представления.
template string public:tc_clib_form_draft_menu Шаблон содержимого меню.
params array [] Параметры шаблона.

# actionLoad

Возвращает ответ в формате JSON с объектом, содержащим значения сущности $draftEntity c идентификатором из
параметра draft_id.

	public function actionLoad(string $formKey, string $draftEntity = null): AbstractReply
Параметр Тип Значение по умолчанию Описание
formKey string Уникальный идентификатор обрабатываемой формы.
draftEntity string TC\ComponentLibrary:FormDraft Сущность для сохранения черновиков.

# actionSave

Обновляет столбцы title и draft_data сущности $draftEntity c идентификатором из параметра draft_id значениями из
одноименных параметров. При наличии параметра delete со значением равным true сущность удаляется.
После сохранения возвращается ответ в формате JSON с объектом, содержащим значения обновленной сущности $draftEntity.
После удаления возвращается только идентификатор удаленной сущности.

	public function actionSave(string $formKey, string $draftEntity = null): AbstractReply

# Смотрите также

JavaScript / Form / Form Draft.