Пример реализации информационного блока новостей на CMS NetCat.
Манипуляции с формированием и выводом информации из БД в NetCat производятся посредством компонентов и шаблонов компонентов.
То есть начиная с версии 3.6 достаточно найти компонент «Пyбликaции: Hoвocти кoмпaнии» нажать кнопку «Добавить шаблон» и заполнить нужные поля:
// Префикс списка объектов: $f_AdminCommon <div class='nc_list nc_news'> ... // Объект в списке: $f_AdminButtons <div class='news'><small>$f_Date_day.$f_Date_month.$f_Date_year</small><p><a href='$fullLink'>$f_Title</a></p></div> ... // Суффикс списка объектов: </div> ... // Отображение объекта (по умолчанию): <div class='nc_full nc_news'> <h2>$f_Title</h2> <div class='nc_full_text'>$f_Text</div> ".opt( $cc_settings[DateStyle]!='disable' , "<div class='nc_datetime'>". opt( $cc_settings[DateStyle]!='time' , "<span class='nc_date'>$f_Date_day.$f_Date_month.$f_Date_year </span>" ). opt( $cc_settings[DateStyle]!='date' , "<span class='nc_time'>$f_Date_hours:$f_Date_minutes </span>" )."</div>" ) .opt( $f_SourceTitle || $f_SourceLink , "<div class='nc_source'><span>Источник: </span>".opt_case( $f_SourceTitle && $f_SourceLink , "<a href='$f_SourceLink'>$f_SourceTitle</a>", opt_case( !$f_SourceLink,$f_SourceTitle , "<a href='$f_SourceLink'>$f_SourceLink</a>" ) )."</div>" )." </div> ".(nc_module_check_by_keyword("comments") ? "<div class='nc_comments'>".$nc_comments->wall($f_RowID)."</div>" : "")." |
Чтобы при вызове в макете дизайна:
<div class='type_block'> <h2>События</h2> <div class='nc_row'> ".s_list_class(15,5,'recNum=3&nc_ctpl=88')." </div> </div> |
получить блок новостей с датой и заголовком новости в виде ссылки на полную новость (15 — раздел, 5 — компонент в разделе, 88 — номер шаблона компонента).
Раньше (до версии 3.6) все было немного (совсем немного) сложнее:
В поле «Объект в списке» того же компонента («Пyбликaции: Hoвocти кoмпaнии») используем тернарный оператор получим следующее:
$f_AdminButtons // добавили проверку на существование и неравенство нулю переменной $isTitle и соответствуюищий шаблон вывода новостей если все ок ".($isTitle ? "<div class='news'><small>$f_Date_day.$f_Date_month.$f_Date_year</small><p><a href='$fullLink'>$f_Title</a></p></div>" : " <div class='nc_row'> ... То что здесь есть по умолчанию ... </div> ")." // добавили |
Теперь в любом месте любого макета дизайна можно показать новости в кратком формате так:
<div class='type_block'> <h2>События</h2> <div class='nc_row'> <!--".s_list_class(15,5,'recNum=3&nc_ctpl=88')." для сравнения--> ".s_list_class(15,5,'recNum=3&isTitle=1')." </div> </div> |
Отличий немного, а порядка в движке прибавилось. Отрадно.
Я читал что не нужно выводить информацию функцией s_list_class() из-за большого количества запросов к базе и что можно воспользоваться функцией listQuery(),
как с помощью этой функции можно организовать вывод?
Вариант навскидку:
".listQuery("SELECT title AS title, priority AS priority, date AS date FROM message22",<li><b>\$data[date]</b> <a href='companynews_\$data[priority].html' rel="nofollow">\$data[title]</a>")."
2 Юрий:
Большое кол-во запросов - это вы преувеличиваете.
Во-первых - есть модуль кеширование.
Во-вторых, можно посчитать:
— запрос к полям
— запрос к данным
— запрос к инфе о компоненте-в-разделе
— м.б. дополнительный запрос, если есть файлы
итого 3 — 5 запросов, не так уж и много для универсальной цмс
Предложение админам: выводить дату в «русском» виде 19.04.10, а не в буржуйском: «04.19.10»
2deniska:
1. Спасибо за дельные комменты.
2. Думал все даты перепилил с американского формата, а в архивах и шаблонах категорий остались — исправлено.
3. Спасибо за позитивную оценку блога, чертовски приятно.
Огромное человеческое спасибо,за толковую и грамотную статью.Очень помогли.
Спасибо!