PHP

Создание собственных типов полей ввода

Сейчас занимаюсь разработкой модуля для Yii который будет создавать собственные типы контента (что-то схожее по функционалу с модулем CCK для Drupal). Для этого модуля нужен стандартный набор типов полей (текстовое поле, список, чекбоксы, радиобатоны и тд). К счастью на своей основной работе я уже реализововал что-то поднобное, вот как оно будет выглядеть:

Есть базовый клас типов контента:
// field prototype class 
class Data_Type {
	
	public $type = 'data-type';	
	public static $type_slug = 'data-type';
	public $label = '';

	public function __construct() {
		// basic initialize
	}

    // basic save function
	public function save($value = null) {
        // save action
	}

	public function get_value() {
        // getter
	}

	public function render_settings() { 
		// render field settings form
	}

	public render_content() { 
        // render field template. calls on frontend
    }

}

И есть классы-шаблоны для разных полей. Вот пример для текстового поля:
class Input_text extends Data_Type {

	public $type = 'input-text';
	public static $type_slug = 'input-text';
	public $label = 'Input text';
	
	public function render_content() { 			
		<label>
			<span class="customize-control-title"><?php echo $this->field->title ?></span>
			<div class="customize-control-content">
				<input type="text" class="input-text" <?php $this->link(); ?> name="<?php echo $this->field->alias ?>" value="<?php echo $this->get_value() ?>"/>				
			</div>
		</label><?php
	}

	public function render_settings() { ?>

		<script id="input-text" type="text/x-jquery-tmpl">
		    <div class="settings-container">
		        <label class="settings-title">
		            Values:
		            <br><span class="settings-title-caption"></span>
		        </label>
		        <div class="settings-in">
		            <input name="values" value="${values}" class="settings-input" type="text">
		            <br><span class="settings-field-caption"></span>
		        </div>
		    </div><div class="clear"></div>

		    <div class="settings-container">
		        <label class="settings-title">
		            Required:
		            <br><span class="settings-title-caption"></span>
		        </label>
		        <div class="settings-in">

		            <label>
		                {{if required == 'Yes'}}
		                <input data-set="required" name="required" value="Yes" checked="true" type="checkbox">
		                {{else}}
		                <input data-set="required" name="required" value="Yes" type="checkbox">
		                {{/if}}
		                Yes
		            </label>

		            <br><span class="settings-field-caption">Is this a required field.</span><br>

		            <input data-set="requiredMessage" name="requiredMessage" value="${requiredMessage}" type="text">

		            <br><span class="settings-field-caption">Optional. Enter a custom error message.</span>
		        </div>
		    </div><div class="clear"></div>
		</script>		

	<?php }

	public function get_value() {

		$value = parent::get_value();

		if(is_array($value)) {
			return isset($value[0]) ? $value[0] : '';
		} else {
			return $value;
		}

	}
}

После чего мы можем получить как шаблон для настроек создаваемого поля так и шаблон для фронтенда. Обрабатывать шаблоны мы будем при помощи jQuery Templates
Теги:
кастомные поля, Создание собственных типов полей, типы контента, типы полей
Добавлено: 20 Мая 2018 07:30:53 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...