Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля
Netcat 6: профессиональный конструктор сайтов Netcat 6

Операции со списками объектов

Для примера мы будем использовать раздел с новостями, в который уже должно быть добавлено некоторое количество объектов (новостей).

Разберём следущие примеры:

  • как вывести последние N объектов на главную страницу
  • как вывести только избранные объекты на главную страницу
  • как в списке объектов выделить (стилевым оформлением) один или несколько избранных объектов

Думаю, что на сегодня примеров будет достаточно. Сразу же уточню, что неважно с какими компонентами вы будете экспериментировать/работать, потому что принцип один и тот же.

Для начала мы углубимся немного в теорию и узнаем из руководства разработчика о том, что у нас есть возможность модифицировать SQL-запрос, который формирует вывод объектов на странице. По-умолчанию SQL-запрос выглядит примерно таким образом:

SELECT список_полей FROM MessageXX WHERE условия_выбор

Для того, чтобы изменить данный запрос нужно внести в него необходимые изменения. Все изменения/дополнения к SQL-запросу вносятся в поле «Системные настройки» на странице редактирования компонента. Изменить запрос можно подобным образом:

SELECT a.список_полей,$query_select
FROM MessageXX AS a,$query_from
$query_join
WHERE условия_выборки AND $query_where
GROUP BY $query_group
HAVING BY $query_having
ORDER BY $query_order
LIMIT $query_limit

На этом с теорией покончили, переходим к практике. Пойдём по списку.

В большинстве сайтов возникает такая задача, при которой разработчику нужно вывести, к примеру, 5 последних новостей (объектов раздела) на главную страницу (в сайдбар и т.д.). В этом случае вам нужно будет прописать только одну строку в месте вывода:

<?=nc_objects_list( AA, BB, "&nc_ctpl=CC&recNum=DD" )?>

где:

  • AA — номер раздела
  • BB — номер компонента в разделе
  • CC — номер шаблона компонента
  • DD — количество выводимых записей

Примечание: вместо nc_objects_list возможно так же использовать s_list_class.

Нужные номера вы можете узнать следующим образом:



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

С первым пунктом разобрались, переходим ко второму.

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

Реализовать задачу можно простым способом — добавить чекбокс с бинарным значением:

  • если нажат — новость выводится на главной
  • если не нажат — новость выводится в общем списке внутри раздела

Собственно сейчас нужно добавить новое поле типа «Логическая переменная» в компонент, который успользуется у вас и сделать его обязательным для заполнения.

Теперь в окне добавлении/редактировании каждого объекта у вас появится новое поле:

Ну а теперь остаётся добавить к условию SQL-запроса строку, в соответствии с которой будут выводиться объекты. В системные настройки шаблона компонента вставляем строку:

$query_where = "a.IsMain = 1";

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

Разобрались со вторым вопросомв списке. Остаётся ещё два дела. Как вы можете догадаться эти два дела очень тесно связаны со вторым, но я всё-равно покажу как их выполнять.

Для стилевого оформления предлагаю поступить аналогичным образом — добавляем новое поле типа «Логическая переменная», обязательное для заполнения.

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

У меня данное поле выглядит таким образом:

Разумеется, теперь в окне добавления/редактирования объекта появится новая функция:

Для того, чтобы эта функция заработала внесём в макет следующие изменения:

это:

<tr><td><h3><a href='<?=fullLink?>'>$f_Name</a></h3><?=$f_Text?></td></tr>

заменим на:

<tr><td <?=($f_isStyle==1 ? "style='background:#ccc'":null)?>><h3><a href='<?=$fullLink?>'><?=$f_Name?></a></h3><?=$f_Tex?>t</td></tr>

Как вы видите во втором коде добавлена проверка объекта. В том случае, когда стиль у объекта включен, у ячейки появится фон.

Аналогичным образом вы можете решить любую другую, подобную задачу.

Описание проекта