Документация для разработчиков
Темная тема

SetTemplate

Описание и параметры

void
SetTemplate(
	object obStepTemplate,
	mixed stepID = null
);

Метод устанавливает шаблон obStepTemplate для шага stepID. Если параметр stepID не указан, шаблон устанавливается для всех шагов.

Параметры функции

Параметр Описание
obStepTemplate Экземпляр класса CWizardTemplate. До версии 9.5.0 передавался по ссылке.
stepID ID шага, для которого устанавливается шаблон. Необязательный параметр, по умолчанию равен null (шаблон применяется для всех шагов). До версии 6.5.3 по умолчанию был равен равен false.

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

Примеры использования

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class Step1 extends CWizardStep
{
	function InitStep()
	{
		$this->SetTitle("Первый шаг");
		$this->SetStepID("step1");
		$this->SetNextStep("step2");
		$this->SetCancelStep("cancel");
	}

	function ShowStep()
	{
		$this->content .= "Шаг 1";
	}
}

class Step2 extends CWizardStep
{
	function InitStep()
	{
		$this->SetTitle("Второй шаг");
		$this->SetStepID("step2");
		$this->SetNextStep("step3");
		$this->SetPrevStep("step1");
		$this->SetCancelStep("cancel");
	}
}

class Step3 extends CWizardStep
{
	function InitStep()
	{
		$this->SetStepID("step3");
		$this->SetPrevStep("step2");
		$this->SetCancelStep("cancel");
		$this->SetTitle("Третий шаг");
	}
}

class CancelStep extends CWizardStep
{
	function InitStep()
	{
		$this->SetStepID("cancel");
		$this->SetCancelStep("cancel");
	}

	function ShowStep()
	{
		$this->content .= "Отмена";
	}
}

//Красный шаблон мастера
class MyRedTemplate extends CWizardTemplate
{
	function GetLayout()
	{
		//Получаем ссылку на объект мастера
		$wizard = &$this->GetWizard();

		$formName = $wizard->GetFormName(); //имя формы
		$wizardName = $wizard->GetWizardName(); //имя мастера
		$charset = LANG_CHARSET; //текушая кодировка

		//Получаем значения атрибута name кнопок мастера
		$nextButtonID = $wizard->GetNextButtonID();
		$prevButtonID = $wizard->GetPrevButtonID();
		$cancelButtonID = $wizard->GetCancelButtonID();
		$finishButtonID = $wizard->GetFinishButtonID();

		//Получаем ссылку на объект текущего шага
		$obStep =& $wizard->GetCurrentStep();

		$stepTitle = $obStep->GetTitle(); //Заголовок шага
		$stepSubTitle = $obStep->GetSubTitle(); //Подзаголовк шага

		//Получим ошибки шага
		$arErrors = $obStep->GetErrors();
		$strError = "";
		if (count($arErrors) > 0)
		{
			foreach ($arErrors as $arError)
				$strError .= $arError[0]."<br />";

			$strError = '<div id="step_error">'.$strError.'</span>';
		}

		/*
			Возвращаем HTML-код шаблона, в котором обязательно 
			должны быть определны следующие макросы:
			{#FORM_START#} - начало формы
			{#CONTENT#} - содержимое текущего шага
			{#BUTTONS#} - кнопки навигации
			{#FORM_END#} - конец формы
		*/
		return <<<HTML
<html>
	<head>
		<title>{$wizardName}</title>
		<meta http-equiv="Content-Type" content="text/html; charset={$charset}">
		<style type="text/css">
			body
			{
				margin:0; padding:0; background-color: #FFDEDE; 
				font-family:Verdana,Arial,helvetica,sans-serif;font-size:75%;
			}
			table {font-size:100%;}
			form {margin:0;}
			#border-box{margin:2px 2px 0 2px; border:1px dashed red;}
			#step_info
			{
				height:45px;padding:8px 30px;border-bottom:1px dashed red;
				box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;background:#FFC4C4;
			}
			#step_title{font-weight:bold;}
			#step_description {font-size:95%; margin-left:10px;}
			#step_content {padding:20px 20px;box-sizing:border-box;-moz-box-sizing:border-box;float:left;}
			#step_buttons
			{ 
				height:50px; text-align:right; padding-right:20px; padding-top:5px; 
				overflow:hidden; box-sizing:border-box;-moz-box-sizing:border-box;
			}
			#step_content_container { height:290px; overflow:auto;background:#fff;}
			#step_error {color:red; margin:6px;}
		</style>

		<script type="text/javascript">

			function OnLoad()
			{
				/*Установим в окошке мастера заголовок*/
				var title = self.parent.window.document.getElementById("wizard_dialog_title");
				if (title)
					title.innerHTML = "{$wizardName}";

				/*Получаем объект формы*/
				var form = document.forms["{$formName}"];

				if (!form)
					return;

				/*Получаем объекты кнопок*/
				var cancelButton = form.elements["{$cancelButtonID}"];
				var nextButton = form.elements["{$nextButtonID}"];
				var prevButton = form.elements["{$prevButtonID}"];
				var finishButton = form.elements["{$finishButtonID}"];

				/*Если в шаге только кнопка Отмена, то закроем окно мастера,
				иначе запросим подтверждение*/
				if (cancelButton && !nextButton && !prevButton && !finishButton)
					cancelButton.onclick = CloseWindow;
				else if(cancelButton)
					cancelButton.onclick = ConfirmCancel;
			}

			/*Подтвержение по кнопке Отмена*/
			function ConfirmCancel()
			{
				return (confirm("Вы действительно хотите прервать мастер?"));
			}

			/*Закроем окошко мастера*/
			function CloseWindow()
			{
				if (self.parent.window.WizardWindow)
					self.parent.window.WizardWindow.Close();
			}

		</script>
	</head>
	<body onload="OnLoad();">
		{#FORM_START#}
			<div id="border-box">
				<div id="step_info">
					<div id="step_title">{$stepTitle}</div>
					<div id="step_description">{$stepSubTitle}</div>
				</div>
				<div id="step_content_container">
					{$strError}
					<div id="step_content">{#CONTENT#}</div>
				</div>
			</div>
			<div id="step_buttons">{#BUTTONS#}</div>
		{#FORM_END#}
	</body>
</html>
HTML;
	}
}

//Аскетичный шаблон
class AsceticTemplate extends CWizardTemplate
{
	function GetLayout()
	{
		//Получаем ссылку на объект мастера
		$wizard = &$this->GetWizard();

		$formName = $wizard->GetFormName(); //имя формы
		$wizardName = $wizard->GetWizardName(); //имя мастера
		$charset = LANG_CHARSET; //текушая кодировка

		$obStep =& $wizard->GetCurrentStep();//Получаем ссылку на объект текущего шага
		$stepTitle = $obStep->GetTitle(); //Заголовок шага
		$stepSubTitle = $obStep->GetSubTitle(); //Подзаголовк шага

		return <<<HTML
<html>
	<head>
		<title>{$wizardName}</title>
		<meta http-equiv="Content-Type" content="text/html; charset={$charset}">
		<style type="text/css">body, form, table {margin:0; padding:0;}</style>
	</head>
	<body>
		{#FORM_START#}
			<table width="100%" height="375" cellpadding="8">
				<tr><td height="50">{$stepTitle}<br />{$stepSubTitle}<hr /></td></tr>
				<tr><td valign="top">{#CONTENT#}</td></tr>
				<tr><td height="50" align="right"><hr />{#BUTTONS#}</td></tr>
			</table>
		{#FORM_END#}
	</body>
</html>
HTML;
	}
}

//Создаем мастер
$wizard = new CWizardBase("Мой мастер", $package);

//Запретим применять системный шаблон по умолчанию 
//при запуске мастера из административного раздела
$wizard->DisableAdminTemplate();

//Добавляем шаги
$wizard->AddSteps(Array("Step1", "Step2", "Step3", "CancelStep"));

//Определим для всех шагов красный шаблон
$wizard->SetTemplate(new MyRedTemplate);

//А для первого шага определим аскетичный шаблон
$wizard->SetTemplate(new AsceticTemplate, "step1");

//Выводим на экран
$wizard->Display();
?>


© «Битрикс», 2001-2024, «1С-Битрикс», 2024