Module.php 2.3 KB
<?php

namespace frontend\modules\forms;


use yii\helpers\Html;
use yii\web\View;
use yii\widgets\ActiveForm;
use artbox\core\forms\Module as CoreModule;


/**
 * Class ContactModule
 * @package frontend\forms
 *
 *
 * Класс, который немного видоизменяет вывод формы контактов для того, чтобы в ней появилась гугловая рекапча
 *
 */
class Module extends CoreModule
{


	public function renderForm(View $view)
	{
		if ($this->ajax) {
			$js = <<<JS
$(document).on('submit', '#{$this->formId}', function(e) {
        e.preventDefault();
        e.stopImmediatePropagation();
        $.post(
            $(this).attr("action"), $(this).serialize(), {$this->successCallback}).fail({$this->errorCallback});
});
JS;

			$view->registerJs($js, View::POS_READY);
		}
		/**
		 * @var ActiveForm $form
		 */

		$form = ActiveForm::begin(
			[
				'id' => $this->formId,
				'action' => ($this->ajax) ? '/save/ajax' : '/' . $this->id . '/save/no-ajax',
				'class' => $this->classForm,
			]
		);
		$content = '';
		foreach ($this->attributes as $field) {

			# если мы присвоили этому полю тип, то он его отрисовывает
			if (isset($this->inputOptions[$field]['type'])) {
				$function = $this->inputOptions[$field]['type'];
				$formStr = $form->field($this->model, $field)
					->$function(
						isset($this->inputOptions[$field]['options'])
							? $this->inputOptions[$field]['options'] : []
					);
			} # а если нет, то просто добавляет поле
			else {
				$formStr = $form->field($this->model, $field);
			}
			if (isset($this->labels[$field])) {
				$formStr->label(\Yii::t($this->locale, $this->labels[$field]));
			}
			if (isset($this->inputOptions[$field]['template'])) {

				$formStr = str_replace('{input}', $formStr, $this->inputOptions[$field]['template']);
			}
			$content .= $formStr;

		}

		$content .= $form->field($this->model, 'reCaptcha')->widget(\sashsvamir\yii2\recaptcha\ReCaptcha::className())->label(false);


		$content .= str_replace('{button}', Html::submitButton(\Yii::t($this->locale, $this->buttonContent), $this->buttonOptions), $this->buttonTemplate);
		$content = str_replace('{form}', $content, $this->templateForm);
		echo $content;
		ActiveForm::end();
	}
}