Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Формы компонентов

Форма добавления

Помимо отображения объектов, в компоненте настраиваются вывод форм для добавления и редактирования объектов. Настраивание альтернативных форм может понадобиться в том случае, если вам нужно поместить форму для пользователей на сайте и её нужно стилизовать в соответствии с требованиями дизайна или когда нужно скрыть некоторые поля в форме.

Откройте форму редактирования компонента и перейдите на вкладку «Шаблоны действий». В разделе находится ряд вкладок: добавление, изменение, удаление, поиск.

По умолчанию все поля пустые. Для того, чтобы редактировать нужную форму нажмите на ссылку «Сгенерировать код…». После генерации кода вы сможете настроить формы или условия по своему усмотрению.

У форм есть переменная $warnText, отвечающая за вывод ошибок, возникающих при заполнении формы. Поместите её в нужном месте.

Удобнее и правильнее всего создавать свою форму на основе формы, сгенерированной системой.

Приведём пример формы добавления с двумя полями: Название и Файл:

<?=( $warnText ? "Ошибка: $warnText" : NULL )?>
<form name='adminForm' enctype='multipart/form-data' method='post' action='/netcat/add.php'>
<input name='admin_mode' type='hidden' value='<?=$admin_mode?>' />
<input name='catalogue' type='hidden' value='<?=$catalogue?>' />
<input name='cc' type='hidden' value='<?=$cc?>' />
<input name='sub' type='hidden' value='<?=$sub?>' />
<input name='posting' type='hidden' value='1' />
<input name='f_Parent_Message_ID' type='hidden' value='<?=$f_Parent_Message_ID?>' />
<?=nc_form_moderate('add', $admin_mode, 0, $systemTableID, $current_cc, (isset($f_Checked) ? $f_Checked  : null), $f_Priority , $f_Keyword, $f_ncTitle, $f_ncKeywords, $f_ncDescription )?>
</div>
<?=nc_string_field("Name", "", $classID, 1) ?><br />
<br />
<?=nc_file_field("File", "", $classID, 1);?><br />
<br />
<br/> Звездочкой (*) отмечены поля, обязательные для заполнения <br/><br/>
<?=nc_submit_button(NETCAT_MODERATION_BUTTON_ADD)?>
</form>

Функции генерации полей описаны в справочнике по API.

Вы можете переопределить значения полей по своему усмотрению.

Например, вывод строкового поля

<?=nc_string_field("Name", "", $classID, 1) ?>

можно заменить на

<input type='input' name='f_Name' value='<?=$f_Name?>'>


ВАЖНО! Если в альтернативной форме будет отсутствовать какое либо поле и соответственно не будет передано никакое значение, то в объект сохранится пустое значение.

Условие добавления

По умолчанию данные, передаваемые в форме, проверяются на соответствие введённого значения типу поля. Сообщение об ошибке записывается в переменную $warnText и выводится на экран.

Некоторые условия, не входящие в стандартные функции: проверка на заполненность или соответствие формату, можно дополнить своим условием, подобного вида:

if (!$f_field1 && !$f_field2) {
    $warnText = "Необходимо заполнить Field1 или Field2!";
    $posting = 0;
}

Кроме этого в поле можно писать любой PHP-код.

Действие после добавления

В данное поле помещается код, выполняющийся после добавления объекта. Это может быть сообщение об удачном добавлении, ссылки для перехода в другие разделы, автоматический редирект пользователя на нужную страницу, отправка письма, операции с базой данных и т.д.

В поле можно вписать любой PHP-код.

Форма изменения, условия изменения, действие после изменения

Назначение и функциональность этих форм полностью идентично формам добавления. Разница лишь в том, что эти действия предназначены и работают при изменении объекта.

Для полей типа "Логическая переменная" и "Множественный выбор":

ВАЖНО! Если в альтернативной форме будет отсутствовать какое либо поле и соответственно не будет передано никакое значение, то в объект сохранится пустое значение.
ВАЖНО! Поле f_Checked является обязательным для заполнения.
В версии 5.6.0.16080 и более поздних можно установить параметр partial, делающий возможным частичную передачу формы.

<input type="hidden" name="partial" value="1" />

При наличии параметра partial будут сохранены только значения полей, переданные в форме. Обратите внимание, что в условиях изменения, действии после изменения в переменных $f_ИмяПоля будут доступны только переданные в форме поля.

Вкладки в диалогах добавления и изменения

Начиная с версии 5.5.0.15208 имеется возможность управлять видом диалогов добавления и изменения объектов. Для этого шаблон добавления или изменения должен быть размечен особым образом.

Существует два варианта разметки — полный и упрощённый.

Полный вариант разметки позволяет указать не только набор вкладок, но и заголовок и подвал диалога, а также скрыть стандартные вкладки (например, вкладку «Дополнительно»). Пример полной разметки:

<div class="nc-modal-dialog">
    <div class="nc-modal-dialog-header">
        <h2>
            Заголовок диалога, у стандартных диалогов используется 
            <?= $current_cc["Sub_Class_Name"] ?>
        </h2>
    </div>
    <div class="nc-modal-dialog-body">
         <!-- 
               Тэг form и скрытые параметры, как указано 
               в разделе «Форма добавления» 
         -->
         <form ...>
             <input type="hidden" ...>
             <div data-tab-caption="Название первой вкладки" 
              data-tab-id="опциональный_id_вкладки_1">
                 Содержимое первой вкладки
             </div>
             <div data-tab-caption="Название второй вкладки" 
              data-tab-id="опциональный_id_вкладки_2">
                 Содержимое второй вкладки
             </div>
         </form>
    </div>
    <div class="nc-modal-dialog-footer">
         <div class="nc-modal-dialog-footer-text">
             Можно вывести дополнительный текст в подвале диалога
         </div>

         <!-- Для стандартных кнопок нужно указать атрибут data-action: -->
         <button data-action="close">Закрыть</button>
         <button data-action="submit">Сохранить</button>
         <button data-action="save-draft">Сохранить черновик</button>

         <button class="nc-btn nc--red">
             Это красная кнопка без стандартной функции
         </button>
    </div>
    <script>
        // здесь можно добавить javascript-код, который будет выполнен 
        // при открытии диалога
    </script>
</div>

ВАЖНО: при использовании полной разметки всё содержимое диалога, включая тэги <script>, должно быть внутри <div class="nc-modal-dialog">.

Вкладка «Дополнительно» будет добавлена автоматически. Если вы не хотите, чтобы вкладка «Дополнительно» была показана, добавьте к тэгу div.nc-modal-dialog атрибут data-hidden-tabs="tab-system":

<div class="nc-modal-dialog" data-hidden-tabs="tab-system">

В большинстве случаев нет необходимости менять заголовок и подвал диалога. В этих случаях достаточно указать только тэги с атрибутами data-tab-caption, например:

<!-- Тэг form и скрытые параметры, как указано в разделе «Форма добавления» -->
<form ...>
    <input type="hidden" ...>
    <div data-tab-caption="Название первой вкладки">
        Содержимое первой вкладки
    </div>
    <div data-tab-caption="Название второй вкладки">
        Содержимое второй вкладки
    </div>
</form>

Чтобы получить в JavaScript можно получить открытый диалог, используйте:

var dialog = nc.ui.modal_dialog.get_current_dialog();

У объекта nc.ui.modal_dialog, полученного указанным способом, доступны методы:

  • dialog.change_tab(tab_id) — открывает вкладку с указанным значением атрибута data-tab-id
  • dialog.find(selector) — возвращает jQuery-объект с элементами, удовлетворяющими условиям селектора, например: dialog.find('.tpl-property-name')

Форма удаления

На странице выводятся ссылки для подтверждения и удаления объекта.

Форма поиска

HTML-код, записанный в это поле, будет доступен в префиксе или суффиксе списка объектов в переменной $searchForm. Форму поиска можно переопределить по своему усмотрению.

Форма расширенного поиска

В том случае, если у раздела по умолчанию задано действие «Поиск», будет выводиться расширенная форма поиска по компоненту.

Комментарии 8

ipm  Ильин Павел 23 июля 2014, 10:50:05
Маленькая ошибка в описании примера в форме добавления:

[QUOTE]можно заменить на [CODE]<input type=’input’ name=’f_Name’ value=[B]’<?=$f_Name[COLOR=FF0000]?’>[/COLOR][/B]
[/CODE][/QUOTE]

Думаю правильней так:

[CODE]<input type=’input’ name=’f_Name’ value=’<?=$f_Name?>'
[/CODE]

   
den 27 октября 2014, 14:54:39
<input type=’input’ name=’f_Name’ value=’<?=$f_Name?>'>
   
Миронов Евгений  АДВЕКОН 06 ноября 2014, 13:30:24
Следует заметить что переменная $posting так же отвечает за удаление объекта в "Условие удаления объекта", как и за добавление в "Условие добавления"
   
Толочный В. И.  ARORA 21 сентября 2016, 23:19:32
Не работает скрытие вкладок, если указан параметр isNaked
   
Литвиненко Владислав 10 декабря 2017, 00:18:47
как вывести форму редактирования определенного объекта в произвольное место сайта? с формой добавления понятно, а с формой редактирования как быть?
   
Литвиненко Владислав 24 февраля 2018, 20:29:13
если поле связанное, то в любом случае при изменении поля через get или post запрос при неустановленном значении ему присваивается значение NULL неважно проставлено значение по умолчанию или прочие настройки, даже при передаче параметра partial=1, это я считаю косяк
   
Литвиненко Владислав 24 февраля 2018, 20:39:03
исправление, как мне кажется, лежит в 85 строке файла message_put, нужно добавить проверку на || $fldType[$i] == NC_FIELDTYPE_RELATION
   
Владимир  Web-Element 23 августа 2019, 14:25:50
Чтобы запретить удаление объектов надо в условие удаления добавить $posting = 0;
   
Описание проекта