Быстрый переход к описаниям типов полей:
строка, целое число, текстовый блок, список, логическая переменная, файл, число с плавающей запятой, дата и время, связь с другими объектами, множественный выбор, множественная загрузка, общие настройки.
Cимвольное поле, максимально может содержать 255 символов.
В данном типе поля возможен выбор формата поля из следующего списка:
$f_ИмяПоля
выводится без изменений (для поля без выбранного формата HTML-разметка экранируется). Данный тип доступен с версии 5.8.0.17311.Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя?>
Для данного типа поля можно указать опцию «Транслитерация», с помощью которой будет формироваться ключевое слово объекта.
Формат для этого типа поля не предусмотрен. В поле данного типа может быть введено только целое число (1, 56, 1024, 56255 и т. д.).
Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя?>
Поле (для ввода будет использован элемент формы <textarea>), может содержать 64кб текста. Задавать формат поля можно через таблицу «Размер текстового блока», в которой можно указать высоту и ширину элемента <textarea>, который будет использоваться для добавления/изменения поля объекта. Кроме этого можно указать следующие параметры:
Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя?>
С версии 5.3 доступна функция типографирования текста. Для включения опции включите одноимённую опцию
Также для типографирования можно воспользоваться функцией nc_format_typo().
Список значений (для ввода будет использован выпадающий список <select>); возвращает значение указанной записи списка. В поле «Формат» можно указать латинское название списка (название таблицы), содержимое которого будет использоваться при выводе списка возможных значений.
Пример: при заполнении анкеты нужно сделать выбор города пользователем из выпадающего списка. Для этого нужно создать сам список с перечислением городов и подключить его к создаваемому полю. Если список носит название «Region», в поле «Формат» нужно будет вписать название списка, то есть «Region».
Для вывода данных в компоненте будут доступны переменные:
В том случае, если в поле «Формат» ввести только название списка, в форме добавления или редактирования будет отображаться выпадающий список. Выпадающий список можно изменить на ряд radiobutton'ов дописав в имени списка radio через двоеточие. Таким образом «Region» будет изменён на «Region:radio».
Логическое поле (да/нет); при выводе записи возвращает 1 (да) или 0 (нет). Если у поля параметр «обязательно для заполнения» выключен, то будет выводиться блок radiobutton'ов (не важно, да, нет). Если этот параметр включен, будет выводиться checkbox. Формат для этого типа поля не предусмотрен.
Пример: при заполнении анкеты пользователь при ответе на вопрос может поставить галочку, если ответ утвердительный:
В компоненте можно сделать вывод переменной:
<?= $f_mobile?>
Но в этом случае будет выведена только цифра 1 или 0, поэтому лучше используя проверку вывести обычное описание:
Мобильные телефон: <?= ($f_mobile==1?"Есть":"Нет")?>
Поле типа «файл» (для ввода будет использован элемент формы <input type="file">, возвращает URL файла, его настоящее название и размер. В поле «формат» может быть указан максимальный размер файла в байтах. При необходимости через двоеточие может быть указан также и возможный тип файла (mime type).
Например:
Тип файловой системы влияет на вариант загрузки и хранения файла:
Файлы хранятся в директории /netcat_files/. Имя файла на диске состоит из идентификатора поля, символа подчеркивания, идентификатора сообщения и расширения файла.
На диск записывается оригинальное имя файла (если оно содержит кириллицу — то символы переведутся в «транслит», если такой файл уже существует, то к новому добавится числовой индекс через подчеркивание). По умолчанию, файл записывается в директорию netcat_files/sub/cc/, где sub — номер раздела, сс — номер компонента в разделе.
Вы можете поменять директорию, указав в условии добавления или изменение требуемое значение:
$f_ИмяПоля['folder'] = 'ИмяДиректории';
Имя директории должно содержать только латинские буквы, подчеркивание и дефис. Для разделений директорий между собой (для создания вложенной структуры) используется символ «/», например:
$f_Picture['folder'] = 'Image/foto';
Так же как и в случае с «стандартной» файловой системой, файлы записываются в директорию netcat_files/sub/cc/. На диск записывается захэшированное имя файла. Так же в таблице Filetable для каждого файла создается своя запись. Такой тип хранения файлов затрудняет получение файла подбором имени, но в этом случае создаётся нагрузка на базу данных.
Для файлов этого типа можно задать атрибут «Закачиваемый». В этом случае при обращении к файлу браузер предложит его сохранить, а не показать. Так же для файлов данного типа можно считать количество обращений к ним, для этого надо задать атрибут «Считать количество скачиваний».
Структура таблицы Filetable имеет следующий вид:
Поле | Описание |
---|---|
ID | индекс |
Real_Name | настоящее имя файла |
Virt_Name | виртуальное имя файла |
File_Path | путь к файлу |
File_Type | тип файла |
File_Size | размер файла |
Message_ID | номер объекта (раздела, пользователя, макета, сайта), к которому относится файл |
Field_ID | номер поля файла |
Content_Disposition | атрибут «Закачиваемый» |
Download | количество скачиваний |
В списке объектов и на странице просмотра объекта, при наличии поля типа «Файл», доступны переменные:
В условие добавления:
В действии после добавления:
Работа с файлами для сайтов, разделов, макетов дизайна и пользователей аналогична.
Для изображений доступны дополнительные функции.
См. также: создание нескольких вариантов изображения с сохранением исходного файла.
Укажите ширину и высоту для изображение. В том случае, если снимок будет превышать указанные параметры, снимок будет пропорционально уменьшен.
Для обрезки необходимо задать 4 параметра: точки начала (лево, верх) X0, Y0 и точки конца (право, низ) X1, Y1
Как правило, такие изображения используются для отображения анонсов к просмотру объекта (список статей, новостей, аватарка и т. д.). Для создания превью укажите желаемые размеры: ширину и высоту.
Вывод картинки-превью:
$f_имяполя_preview_url
Формат данного поля подразумевает ввод цифр с плавающей запятой. Такое поле можно использовать для ввода цены, когда после запятой нужно ввести копейки либо для ввода точных значений.
Например: 2000,52 руб.
Создаётся 6 полей для хранения даты и времени ('day', 'month', 'year', 'hours', 'minutes', 'seconds'). Возможно использование календаря для выбора даты.
В поле «Формат» можно указать значения:
Для вывода значения поля в компоненте можно воспользоваться присущими для поля такого типа переменными:
Соответственно, эти поля пожно вариьровать между собой и использовать только нужные.
Пример: в компоненте нужно вывести дату добавления новости:
Добавлено: <?=$f_date_day."/".$f_date_month."/".$f_date_year?>
На сайте будет выведено: «Добавлено 05/04/2013». При помощи дополнительных функций вы можете обработать эти числа и получить читаемые даты: «Добавлено 5 апреля 2013 года».
Поле в компонентах выдаёт идентификатор связанного объекта, который можно вывести при помощи функции listQuery. Например, формат поля «Связь с другим объектом» имеет значение «22», это означает, что связанные объекты берутся из компонента с идентификатором 22. Тогда получить объект можно следующим образом:
<?=listQuery("SELECT * FROM Message22 WHERE Message_ID=$f_имя_поля", '$data[Title] // $data[Date]')?>
где «имя_поля» — связь с другим объектом. Привязать объект можно при добавлении или редактировании сообщения в разделе, к которому прикреплён компонент с таким полем.
В поле «Формат» следует указать номер компонента для привязки, если связь осуществляется с компонентами. В случае связи системных таблиц, указывается название системной таблицы (Subdivision, Sub_Class, User, Catalogue...). Примеры правильного оформления поля «Формат» для связи с другими объектами:
1 – номер компонента 2:Name – номер компонента и заголовка объекта 2:"CONCAT(Message_ID, ': ', Announcement)" – номер заголовка объекта и расширение запроса Subdivision – имя системной таблицы User:CONCAT(FirstName, ' ', LastName) – имя системной таблицы и расширение запроса
Расширение запроса используется для получения данных об объекте, например заголовка. Расширяемый запрос имеет вид:
SELECT <ID_Field> AS ItemID, CONCAT( [...] ) AS ItemCaption FROM <Table> WHERE <Constraints>
Как правило, использование данного поля используется редакторами или администраторами сайта, так как поле создаёт ссылку, при нажатии на которую появляется окно с выбором подключаемого раздела, компонента и объекта.
1. На сайте необходимо создать систему тикетов. Каждому тикету назначается пользователь-исполнитель.
User:"CONCAT(ForumName, '<div style="color: gray;">', Login, ' | ', Email, '</div>')"где: User — таблица со списком пользователей; ForumName, Login и Email — поля пользователя в таблице.
<?= listQuery("SELECT * FROM User WHERE User_ID=$f_User","\$data[ForumName] (\$data[Login] \$data[Email])");?>
2. На сайте есть раздел с мастер-классами и раздел с преподавателями. При добавлении мастер-класса нужно сделать возможность выбора преподавателя. Для этого:
<?= listQuery("SELECT * FROM Message16 WHERE Message_ID=$f_Master_ID","\$data[Name] \$data[Surname]");?>
Данный тип поля (компонента, раздела, сайта, пользователей) позволяет пользователю выбирать несколько элементов из списка.
В «типе поля» при добавлении\редактировании поля компонента (или поля из системной таблицы) укажите «Множественный выбор».
Поле «Формат» в этом случае обязательно для заполнения. Оно должно содержать как минимум латинское название списка (название таблицы). Так же в поле «Формат» можно задать вид (select или checkbox) элемента, который будет выводиться по умолчанию в формах добавления, изменения и поиска.
По умолчанию используется select с высотой равной трем. Для изменения элемента укажите его через двоеточие после имени таблицы. При использовании select можно также задать высоту этого элемента (количество одновременно отображаемых элементов) опять же через двоеточие после слова «select»
Примеры заполнения поля формат:
Формат | Результат |
---|---|
Region | Элемент select, size - 3 |
ShopUnits:checkbox | Элемент checkbox |
Manufacturer:select | Элемент select, size - 3 |
ShopCurrency:select:2 | Элемент select, size - 2 |
По умолчанию, как было сказано выше, элемент (select или checkbox) берётся из формата поля. Т.е. Если вы используете форму «по умолчанию», то формат вывода элемента будет взят из формата поля.
В альтернативных формах можно использовать функцию
string nc_multilist_field($field_name, $style = "", $type = "", $classID = "", $caption = false, $selected = false, $disabled = false, $getData = false)
Она возвращает строку с HTML-кодом.
Подробно это функция описана в Приложении, здесь остановимся на том, что третьем параметром можно указать тип элемента: select или checkbox, так же для элемента select можно задать высоту. Этот параметр имеет вид аналогичный, как и у формата поля, за исключением того, что здесь не нужно указывать таблицу. По умолчанию так же используется select с высотой 3.
Пример использования:
nc_multilist_field('countrySelect', '', 'checkbox', $classID, 1) nc_multilist_field('countrySelect', '', 'select:5', $classID, 1)
При использовании компонента с полем «Множественный выбор», в списке отображения объектов и в полном выводе объекта доступна переменная $f_ИмяПоля, которая на самом деле является массивом, содержащим выбранные элементы, так же доступен массив $f_ИмяПоля_id, содержащим id выбранных элементов.
Для примера рассмотрим ситуацию, когда у объекта выбраны элементы из списка «Город» (Region):
1.Москва, 59.Екатеринбург, 110.Магадан.
Поле имеет имя city.
Тогда в массиве $f_city первый элемент ($f_city[0]) это «Москва», второй элемент «Екатеринбург» и третий - «Магадан», а массив $f_city_id имеет следующий вид:
$f_city_id[0] = 1, $f_city_id[1] = 59, $f_city_id[2] = 110
Для вывода этих элементов есть смысл перевести массив в строку. Это можно сделать с помощью функции nc_array_to_string().
Так же для перевода массива в строку можно использовать функцию php join (подробнее см. http://ru2.php.net/join).
Все это справедливо и при использовании поля типа «Множественный выбор» в системных таблицах.
Для отображения списка создайте шаблон вывода вида:
<?php $templ['prefix'] = '<ui>'; $templ['element'] = '<li>%ELEMENT</li>'; $templ['suffix'] = '</ui>'; ?>
поместите его в поле «Системные настройки», а в месте вывода пропишите:
<?= nc_array_to_string($f_pole, $templ)?>
Также можно воспользоваться следующим способом:
<?= nc_array_to_string($f_pole, array( 'prefix' => 'List:<br>', 'element' => '%I. %ELEMENT', 'divider' => '<br>', 'suffix' => 'end' ) )?>
Данный тип поля (компонента, раздела, сайта, пользователей) позволяет пользователю добавлять неограниченное количество файлов. При этом, доступна мультизагрузка путём перетаскивания множества файлов на поле загрузки либо выбор множества файлов в окне обзора.
В «типе поля» при добавлении\редактировании поля компонента (или поля из системной таблицы) укажите «Множественная загрузка файлов».
Для изображений доступны дополнительные функции.
См. также: создание нескольких вариантов изображения с сохранением исходного файла.
Укажите ширину и высоту для изображение. В том случае, если снимок будет превышать указанные параметры, снимок будет пропорционально уменьшен.
Для обрезки необходимо задать 4 параметра: точки начала (лево, верх) X0, Y0 и точки конца (право, низ) X1, Y1
Как правило, такие изображения используются для отображения анонсов к просмотру объекта (список статей, новостей, аватарка и т. д.). Для создания превью укажите желаемые размеры: ширину и высоту.
Для отображения поля в альтернативных формах нужно использовать метод form объекта f_названиеПоля, возвращающий строку с HTML кодом.
string $f_multifileFieldName->form()
Данная конструкция используется «по умолчанию».
Также объект поля содержит в себе объект настроек этого поля.
string $f_multifileFieldName->settings->settingsName()
Имя метода | Описание |
---|---|
path($path) | Путь до папки, куда будут сохраняться файлы (от папки, в которую установлена NetCat) |
use_name('Текст для placeholder’а поля') | При использовании этой настройки, рядом с полем добавления файла будет добавлено поле, в котором можно указать описание для файла |
resize($width, $height) | Если поле используется для загрузки фотографий, то с помощью этого метода можно задать размер, в которому будет приводиться фотография после загрузки |
preview($width, $height) | Если поле используется для загрузки фотографий, то с помощью этого метода можно автоматически создавать превью заданного размера |
min($int) | Минимальное количество файлов, доступное для загрузки |
max($int) | Максимальное количество файлов, доступное для загрузки |
set_description($name) | Заголовок поля |
Методы могут использоваться в любой последовательности, а также несколько подряд.
Пример использования в альтернативных формах:
<?= $f_Img->settings->resize(600, 600)->preview(150, 150)->path('/my_img/')->min(2)->max(5);?> <?= $f_Img->form();?>
Метод set_description()
не является методом настроек и его нужно использовать отдельно:
<? $f_Img->set_description("Имя поля");?> <?= $f_Img->form();?>
Для отображения поля сначала необходимо задать его шаблон в системных настройках. Для этого необходимо присвоить переменной f_названиеПоля_tpl массив, который может содержать следующие элементы:
Элемент | Описание |
---|---|
prefix | Выводится перед списком |
suffix | Выводится после списка |
record | Элемент списка |
divider | Разделитель между элементами списка |
i | Начальный индекс счетчика элементов |
В элементе record могут быть следующие макропеременные:
Элемент | Описание |
---|---|
%Name% | Имя для файла, которое можно задать при использовании $f_multifileFieldName->settings->use_name() в альтернативной форме |
%Size% | Размер |
%Path% | Путь до файла |
%Preview% | Путь до превью |
%i% | Номер элемента списка |
До версии 5.6.0.16248 при установке системы в подпапку пути Path и Preview не содержали имени подпапки. Начиная с версии 5.6.0.16248 эти элементы содержат полный путь от корня сайта.
До версии 5.6.0.16248 элемент Preview был всегда заполнен, даже когда уменьшенной копии изображения не сущствовало. Начиная с версии 5.6.0.16248 путь к Preview указан только если была создана уменьшенная копия изображения.
Пример использования:
$f_Img_tpl = array( 'prefix' => "<div>", 'record' => "<div>%i%. %Name%</div><a href='%Path%'><img src='%Preview%' /></a>", 'divider' => " ", 'suffix' => "</div>", 'i' => 1 );
После задания шаблона в списке объектов и в полном отображении объекта можно использовать переменную $f_имяПоля для вывода его содержимого.
Так же, в списке объектов и в полном отображении можно использовать следующие методы:
Элемент | Описание |
---|---|
get_record($val) | Вернет строку с шаблоном, примененным к одному файлу, который находится на $val месте по приоритету |
get_random_record() | Вернет строку с шаблоном, примененным к одному файлу, выбранному случайно |
count() | Вернет количество файлов в поле |
set_template($val_arr) | С версии 5.3. Сменить шаблон вывода поля, например чтобы вывести отдельный элемент через метод get_record() в отличном дизайне (параметр $val_arr массив с шаблоном вывода) |
to_array() | Возвращает массив с данными о файлах загруженных в поле(ссылки, размер и.т.п) |
Пример использования:
# Случайная фотография <?= $f_Img->get_random_record()?> # Вывод одной фотографии со своим шаблоном (например, используя в качестве обложки альбома) # Для этого вывода нужно добавить шаблон отображения <?= $f_Img->set_template($img_tpl)->get_record(1)?>
Используя функцию nc_load_multifield() можно получить объект поля в любом месте системы.
Если необходимо производить с данными о файлах какие-либо вычисления, можно перебрать их в цикле:
foreach ($f_Img->to_array() as $file) { // $file — объект, у которого доступны свойства Name, Size, Path, Preview echo basename($file->Path) . " — " . nc_bytes2size($file->Size) . "<br>"; }
У многих полей есть схожие настройки. Их описание вынесено в данный подраздел.
1. Обязательно для заполнения. В том случае, если вы включаете эту опцию, пользователь, заполняющий форму, но не заполнивший обязательное поле, увидит сообщение с просьбой заполнить поле.
2. Возможен поиск по данному полю. Подробнее про функционал поиска по компоненту написано в разделе «Поиск и выборка». При включении данной опции, поле будет участвовать в поиске по компоненту, а также в базе данных для данного поля будет создан индекс. При выключении опции индекс также будет удалён.
3. Использовать в табличном списке объектов. Начиная с версии 5.4 в админразделе доступен табличный вид отображения списка объектов. Включите данную опцию для того, чтобы значение из данного поля отображалось в таблице.
4. Приоритет. Определяет порядок расположения и отображения (в формах добавления, редактирования) полей. Приоритет можно изменить как вручную, так и путём перетаскиванию полей в дереве.
5. Значение по умолчанию. В случае, если пользователь не заполнит поле, данные для него будут браться из этого поля.
6. Тип доступа к полю. С помощью данного поля можно задавать скрытые поля, либо скрывать поля совсем. Поле имеет три опции:
7. Связанное поле. В данное поле можно поместить дополнительное содержимое: js-скрипт, строку-подсказку, html-код и т.д. В содержимом можно использовать макрос %ID, при выводе он будет заменён на идентификатор поля. Вывод содержимого происходит для поля с именем $field_name компонента $class_id. Если $class_id не указан - автоматически подставляется текущий класс. Для вывода содержимого в нужном месте воспользуйтесь функцией:
nc_field_extension($field_name, $class_id = null);
Примеры вывода:
# Вывод содержимого из поля Name echo nc_field_extension('Name'); # Вывод содержимого из поля Caption, компонент №579 echo nc_field_extension('Caption', 579);
Комментарии 30
Примера по множественному выбору не нашёл, поэтому решил поделиться с другими:
Код для системных настроек
[CODE]<?
$templ['prefix'] = '<ul>';
$templ['element'] = '<li>%ELEMENT</li>';
$templ['suffix'] = '</ul>';
?>[/CODE]
Код для полей объект в списке и вывод на отдельной странице:
[CODE]<?=nc_array_to_string($f_imya_polya,$templ)?>[/CODE]
Больше информации по выводу есть [URL='http://netcat.ru/developers/docs/api/nc_array_to_string.html']здесь[/URL].
Спасибо!
Добавьте пожалуйста в описание, по данному типу поля, параметры максимальное и минимальное количество файлов при добавлении.
В коде присутствует данная возможность в документации нет.
Указал необходимые размеры.
В результате размеры все разные.
не указано что эти размеры берутся по большей стороне. нужно тоже указать как то что либо обрезать в размеры либо по сторонам.
раз уж используется та же функция.
а то не долделано получается.
Если указать 800х600, а затем загрузить фото размером 100х100, то всё равно растянет то 800х600.
Нужно наверно проверять, если исходник меньше, то не пережимать?!
"В действии после добавления:
$f_имяполя — ссылка на файл"
Ничего подобного. Это массив. $f_имяполя_url - ссылка.
При сохранении форма ругается "Файлы превысившие допустимый размер <имя файла>". Лечится очисткой поля "Формат".
<?=nc_field_extension('Name',($class_id ? $class_id : $classID))?>
1. Рулить параметром multiple — иногда правильнее предлагать пользователю добавлять файлы по одному, а не пачкой.
2. Чтобы перечисленные типы файлов таки попадали в значение атрибута accept. Понятно, что в тех браузерах, где оно работает плохо, его подменить обработчик ошибок. Но в наиболее массовых браузерах все давно работает!
Причем, эта проблема наблюдается лишь тогда, когда добавляешь поле для описания файла через
$f_Field->set_description("Описание") в шаблонах действий.
Когда при выводе поля "множественный выбор" надо организовать условие, можно воспользоваться слкдующим приемом:
В поле вывода пишем
".eval("return \"".$f_Files."\";")."
А в системных настройках
$f_Files_tpl = array(
'prefix' => "",
'record' => "<a href='%Path%'>%Name%\".(\"%Name%\"?'':'%i%').\"</a>",
'divider' => "",
'suffix' => "",
'i' => 1
);
Этот код выводит в анкоре подпись %Name%, если она есть и порядковый номер файла в противном случае.
Но если в метке %Name% кто-то напечатает ", то возникает ошибка. Как можно от нее избавиться?