Управление полями доступно на странице управления компонента во вкладе “Поля”. Также все поля компонента отображаются в левой панели под названием компонента при нажатии на иконку плюса. Добавление нового поля возможно как на странице со списком полей, так и при наведении на название компонента (надо нажать на появившуюся иконку).
Заполняется латинскими буквами: Name, Image, Text, Description, Price и пр.. При добавлении этого поля в таблицу MessageX, где хранятся данные этого компонента, будет добавлена колонка с этим названием.
Название, которое будет фигурировать в формах добавления/изменения: Имя, Фото, Текст, Описание, Цена и пр.
В данное поле можно поместить дополнительное содержимое: 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);
В стандартных формах эта настройка не используется.
Примечание. Внизу этого поля, как и у многих других, выводятся галочки “включить редактор”, “переносить строки” и “на весь экран”, которые могут помочь при редактировании большого количества кода в поле.
Если настройка установлена, то для сохранения формы добавления/изменения объекта потребуется заполнение этого поля компонента.
Если признак установлен, поле будет использоваться для выборки встроенным механизмом поиска/выборки.
В панели администрирования на странице раздела (вкладка редактирования) в правой части шапки есть иконка переключения между шаблонами отображения объекта: стандартным и табличным. Табличное представление строится автоматически: на каждый объект приходится строка таблицы. Если установить эту настройку для некоторого поля, то значение этого поля будет отображаться в таблице для каждого объекта.
Значение данного поля определяет приоритетность вывода полей в компоненте и далее в формах добавления/редактирования объекта.
Будет записано данное значение, если поле не заполнено.
Если объекты этого компонента будут доступны для добавления/изменения посетителями сайта, некоторые поля можно сделать доступными только администраторам (пользователям с административными полями): например, пользователь может оставить вопрос или претензию, а администратор - ответить на ее; в таком случае полю “Ответ” надо присвоить доступ только для администратора. Также поле можно сделать недостуным никому: это может быть применимым, например, для вычисляемых полей, значения которых формируются программно при добавлении/изменении объекта.
Быстрый переход к описаниям типов полей:
строка, целое число, текстовый блок, список, логическая переменная, файл, число с плавающей запятой, дата и время, связь с другими объектами, множественный выбор, множественная загрузка.
Cимвольное поле, максимально может содержать 255 символов.
В данном типе поля возможен выбор формата поля из следующего списка:
$f_ИмяПоля
выводится без изменений (для поля без выбранного формата HTML-разметка экранируется). Данный тип доступен с версии 5.8.0.17311.Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя; ?>
Для данного типа поля можно указать опцию «Транслитерация», с помощью которой будет формироваться ключевое слово объекта.
Формат для этого типа поля не предусмотрен. В поле данного типа может быть введено только целое число (1, 56, 1024, 56255 и т. д.).
Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя; ?>
Поле (для ввода будет использован элемент формы <textarea>). Для этого типа поля доступны следующие параметры:
Для вывода записи данного типа достаточно указать переменную:
<?= $f_имяполя; ?>
Для использования типографирования текста включите одноимённую опцию
Также для типографирования можно воспользоваться функцией 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 полей даты и времени. Возможно использование календаря для выбора даты (при установке соответствующей галочки).
В поле «Формат» можно указать значения:
Для вывода значения поля в компоненте можно воспользоваться присущими для поля такого типа переменными:
Соответственно, эти поля пожно вариьровать между собой и использовать только нужные.
Пример: в компоненте нужно вывести дату добавления новости:
Добавлено: <?=$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% | Номер элемента списка |
Путь к 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>"; }