Создание собственных типов полей ввода
Сейчас занимаюсь разработкой модуля для 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;
}
}
}
После чего мы можем получить как шаблон для настроек создаваемого поля так и шаблон для фронтенда.
Комментарии:
Нету комментариев для вывода...