Элементы форм
Определяются методом, соответствующим их названию. Метод может принимать четыре аргумента, два последние из которых необязательные.
Обязательным является параметр upload_path, указывающий на путь загрузки файла.
В случае с image и image_url параметр allowed_types указывается автоматически.
Для проверки данных добавлена новая функция в js_validation и validation — file[формат_файла].
Для полного понимания всех процессов анализируйте код компонентов.
$this->form->input($name = 'name',$config = array(), [$position = (int)10,$replace = (bool)TRUE])- $name Имя элемента — определяет параметры name и id. В последствии при помощи функции $this->form->find('name') можно найти элемент по имени.
- $config
Конфигурация — массив параметров.
/* * Все базовые параметры являются необязательными. */ $config = array( // Проверка на стороне сервера 'validation'=>'required|min_length[3]', // Проверка на стороне клиента 'js_validation'=>'required|length[3,-1]', // Прямое указание метки 'label'=>t('name'), // Прямое указание описания 'description'=>t('name_description'), // Класс элемента 'class'=>'myClass', // Смещение метки после элемента -- полезно для radio, checkbox 'label_after'=>TRUE, // Скрыть метку 'label_hidden'=>TRUE, // Указываем значение элемента // Лучше указывать массив/объект значений методу $this->form->set_values($data) 'value'=>$value, // Задать элементу собственный шаблон // Позволяет не вносить изменения в стандартный шаблон формы 'template'=>GEARS."captcha/templates/captcha.tpl", // Прямое указание типа элемент // Указывается автоматически по названию вызванного метода 'type'=>'input', ... // У некоторых элементов типа file или image есть свои, особенные параметры. ); - $position Прямое указание позиции элемента. Полезно использовать при расширении формы через хуки.
- $replace Команда на замещение элемента на указанной $position позиции элемента.
text, password, textarea, hidden
Стандартные элементы, отличающиеся способом отображения. Вместо text можно использовать слово input.$this->form->text('name');
//Аналогично
$this->form->input('name');
select, image_select
Элемент выбора через выпадающее меню или через иконки.
$config = array(
...
/*
* Варианты выбора для элементов типа select, image_select
*/
'options'=>array(
'0'=>'Вариант один',
// Если тип image_select
'1'=>'/gears/select/img/some_folder/some_icon.png'
// Если нужно установить title к изображению выбора
'2'=>array('Some Title','/gears/select/img/some_folder/some_icon.png')
),
// Если можно выбрать несколько вариантов за раз
'multiple'=>TRUE,
// Значение должно указывать на ключ массива значений
'value'=>0,
// Если значения множественные, возможны два варианта
'value'=>array(0,1,2,3,4),
// Такой вариант можно хранить в виде строки
'value'=>'0,1,2,3,4',
...
);Если элемент может иметь множество значений, то при обработке полученных значений результат будет иметь вид «0,1,2,3,4», то есть значения склеиваются через ",", чтобы обеспечить возможность сохранения данных в виде строки.checkbox,radio
Стандартные элементы выбора. Не имеют особых параметров. По-умолчанию label размещается перед элементом. Это можно изменить при помощи добавления дополнительного параметра конфигурации «label_after»=>TRUE.fieldset,div
Иногда необходимо обернуть некоторые элементы в fieldset или div....->fieldset('name','legend')
->input('name')
...
// Можно явно закрыть fieldset, вызвав метод без параметров.
->filedset()->compile();
/*
* Если fieldset или div не будет закрыт -- модель закроет его автоматически.
*/
->div('id')
->input('name')
...
// Вместо того, чтобы закрыть, определяем следующий div.
// Предыдущий закроется автоматически.
->div('info')
->input('address')
...
->compile();
// Указанное выше верно и для fieldset.
file, file_url, image, image_url
Быстрая и удобная загрузка файлов. В качестве дополнительных параметров элемента следует указывать параметры класса File Uploading Class из CodeIgniter.Обязательным является параметр upload_path, указывающий на путь загрузки файла.
В случае с image и image_url параметр allowed_types указывается автоматически.
Для проверки данных добавлена новая функция в js_validation и validation — file[формат_файла].
...
->file('info',array(
// Не указывайте required
'validation'=>'file[doc]',
'js_validation'=>'file[doc]',
// Функция _mkdir создает директорию, если она не существует
'upload_path'=>_mkdir('./uploads/files/info/')
));
При загрузке изображений можно использовать пост-обработку, а также использовать параметры класса Image Manipulation Class из CodeIgniter....
->image('post_image',array(
// Указывать allowed_types не надо
'max_size'=>500, // в килобайтах
'upload_path'=>_mkdir('./uploads/images/'.$this->user->get('id').'/'.date('Y/m/d/')),
'overwrite'=>TRUE, // перезаписать, если такой файл уже есть
/*
* Далее идут параметры для пост-обработки
*/
'resize'=>'400x300',
'resize_aspect'=>TRUE, // сохранить пропорции
'watermark'=>TRUE, // водный знак,
// миниатюры будут созданы в подпапках 100x100 и 200x200 директории оригинала
'thumbs'=>array('100x100','200x200'),
// поскольку миниатюры небольшие, водный знак не стоит использовать
'thumbs_watermark'=>FALSE,
'thumbs_aspect'=>'auto',
'thumbs_ratio'=>TRUE,
'thumbs_crop'=>TRUE, // Подрезать по точного размера
))
... При создании миниатюр можно хранить лишь адрес оригинала, воссоздавая пути к ним автоматически.$data['image'] = '/uploads/images/image.png';
$data['image'] = make_icons($data['image'],array('100x100','200x200'));
// Результат будет следующим
$data['image'] = array(
'original'=>'/uploads/images/image.png',
'100x100'=>'/uploads/images/100x100/image.png',
'200x200'=>'/uploads/images/200x200/image.png'
);
title, description
/*
* @param string Заголовок
* @param mixed Конфигурация
* @param boolean Использовать в title страницы
* @param boolean Заменять последний элемент в title страницы
*/
$this->form->title('Регистрация',FALSE,TRUE,TRUE);
/*
* Описание формы
*/
$this->form->description('В данной форме вам предстоит пройти регистрацию на сайте.',array('class'=>'info'));
datetime
Используется когда нужно указать дату и время. Принимает значение в виде «Y-m-d H:i:s»./*
* Параметры для элемента datetime
*/
...
// с 1970 по 2010
'range'=>2010,
// с 2008 по 2010
'range'=>'2008-2010',
// с 2007 по 2010,
'range'=>'2007,2008,2009,2010',
// с 2006 по 2007
'range'=>array('2006','2007'),
'value'=>'2009-05-30 10:10',
br,div_clear
Дополнительные элементы. Суть их ясна из названия.grid
Для создания сеток (типовых таблиц), можно использовать этот метод.
// Укажем типы столбцов
$header = array(
// имя элемента => (текст заголовка, тип элемента, ширина столбца,[адрес картинки, выравнивание])
'position'=>array(FALSE,'dragndrop','5%'), // drag and drop
'id' => array(t('ID'),'text','10%'),
'name' => array(t('name'),'link','20%',FALSE,'left'),
'edit' => array(t('edit'),'icon','10%','/gears/global/img/icon/edit.png'),
// Массив информации должен содержать путь к картинке в ячейке image
'image' => array(t('image'),'image','10%',
'delete' => array(t('delete'),'checkbox'),
);
// Указываем параметры сетки
$info = array(
// Куда указывает ссылка/иконка
// Очередность в $header обуславливает очередность в данном массиве
'link'=>array('/path/to/link','/path/to/icon'),
// Какой параметр подставляется после пути ссылки
'link_add'=>array('id','url_name'),
// По какому параметру происходит удаление элементов
'primary'=>'id',
// Прячем заголовок сетки
'noname'=>TRUE,
// Активируем drag-n-drop по полю
// Используется для простой смены порядка очередности
'dragndrop'=>'position',
// Динамическая отправка запроса при клике на checkbox'ы
'ajax'=>FALSE,
// Динамическое удаление элементов при клике на checkbox'ы
'ajax_delete'=>FALSE
);
// Собираем информацию для сетки
// Обязательно в виде массива
$data = $this->db->get('elements',20)->result_array();
foreach($data as &$item){
// Достраиваем полный путь для картинки, если его нет
// Название элемента массива информации должно совпадать с элементом в заголовке
$item['image'] = '/gears/some_gear/img/'.$item['image'];
}
// Задаем сетку.
/*
* Внимание! Если вы хотите, чтобы базовые функции удаления или перетаскивания работали
* имя элемента сетки должно совпадать с названием таблицы базы данных.
*/
$this->form->grid('elements',$header,$data,$info);
// Выводим форму в шаблон
$this->form->compile();
Для полного понимания всех процессов анализируйте код компонентов.
