Оглавление

[^] Информация о скрипте

Strawberry - это мощная и несложная в обращении система публикации новостей,построенная на оригинальной разработке CutePHPTeam и его ветки AJ-Fork, использующая в качестве базы данных текстовые файлы или СУБД MySQL. Системныетребования для работы скрипта минимальны, а возможности неограниченны!Вы можете использовать Strawberry для ведения новостной ленты, как онлайн-дневник(блог) или как настоящую систему управления контентом.

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

Вы можете поддержать проект Strawberry:

[^] Системные требования

Take it, use it, love it! (это тонкий юмор)

[^] Установка Strawberry

Внимание! path/to это путь до директории сStrawberry.

Установка Strawberry несложная, следует лишь соблюдать следующие инструкции:

  1. Скачайте последнюю версию скрипта
  2. Распакуйте архив во временную папку
  3. Загрузите все файлы из временного каталога на сервере
  4. При помощи FTP-клиента выставьте необходимые права на чтение файлов
  5. Откройте http://example.com/path/to/index.php в любом браузере иследуйте инструкциям

При установки могут возникнуть проблемы. Если инсталяция прервалась (выпоймёте это, страница не загрузится до конца :)) это, конечно, плохо.Это значит что у вашего хостера стоит Safe Mode включённым.
Вам нужно вручную создать папку base в директории data/db/и поставить на base CHMOD 777. Теперь снова попытайтесь проинсталироватьскрипт.

[^] Переезд с CuteNews.RU 02x, CuteNews и AJ-Fork

Переезд для версий CuteNews.RU 024, 025, 026, 027, 028, 029, оригинального CuteNews и AJ-Fork. Если AJ-Fork версии 168, то Вам сначало нужно запустить tools/anticonvert.php (входит в дистрибутив AJ-Fork) и только потом использовать наш переезд.

  1. Проинсталируйте скрипт
  2. Скиньте в папку path/to/convert/02x свою старую папку data
  3. На все файлы *.tmp проставьте CHMOD 777
  4. Наберите в браузере http://example.com/path/to/convert/
  5. Выбирайте "02x series to 03x series"
  6. Выбирайте чего переносить из старой базы (некоторые пункты будут недоступны, пока не перенесены новости)
  7. После перенесите шаблоны в папку data/tpl, папку с картинками и юзерпиками тоже переместите на новое место

Для версий CuteNews.RU выше 030 или версий Strawberry скрипт делает всё сам, если понадобится. Вы просто должны зайти в админку.

[^] Обновление скрипта

  1. Сделайте бекап базы и папки data/
  2. Распакуйте дистрибутив во временный каталог
  3. Удалите из временного каталога папку data/
  4. Залейте всё из временного каталога на сервер
  5. Зайдите в админку

При апгрейде, помимо папок inc и plugins, обновляйте и директорию skins. Не забывайте и про все файлы в главной директории скрипта, файлы в ней (head.php, show_news.php, xmlrpc.php и т.д.) меняются постоянно, если вы не можете изменить их вручную, т.е. довести до "кондиции" новой версии, то перезаписывайте. В противном случае могут возникнуть проблемы.

Чтобы не возникло разного рода проблемпосле обновления скрипта, делайте бэкап. Вобще всегда при удобном случае делайте бэкап и качайте его, либо посылайте на e-mail. В крайнем случае, оставляйте лежать архив на сервере. Таким образом вы сбережёте себе нервы и волосы в разных забавных местах.

[^] Миграция с txtSQL (тектовой версии) на MySQL

  1. Сделайте бекап директории data/ и базы
  2. Наберите в браузере http://example.com/path/to/convert/
  3. Выбирайте "txtSQL to MySQL"
  4. Следуйте инструкции

Будьте осторожны, миграция работает хреново, например, если вы установите плагин "Кейворды", то считайте кирдык, работать нормально не будет.

[^] Бэкап

Периодически следует делать бэкап данных, потому что в случае сбоя работы сервера вы можете потерять данные. Для этого существует директория backup/. Вам нужно набрать в браузере http://example.com/path/to/index.php?mod=backup и выбрать что бэкапить. Лучше всего сразу делать резервную копию и базы, и папки data/. Вы всегда можете удалить бэкап, скачать его или выслать на e-mail (тот, на который приходят комментарии).

Бэкап данных рекомендуется делать инимум раз в месяц, а также перед апгрейдом скрипта.

[^] Маркировка версий

Нынешняя маркировка сделана исходя из следующего: версия точка сборка точка билд. Например версия 2 сборка 3 билд 2 = 2.3.2.Если билд не указан, значит он равен нулю (2.3 = 2.3.0).

У версий, которые на релиз явно не тянут есть буквенная приписка определяющая статус: alfa, beta.

Версии в статусе альфы использовать крайне нежелательно. На них мы не даем никакой гарантии. У новой сборки альфы может меняться всё. Беты использовать можно, но на свой страх и риск. И после релиза нужно апгрейдиться в обязательном порядке!
Версии у которых есть какая-либо из вышеперечисленных добавлений служат первым делом для тестов и устранения ошибок.

[^] Переменные

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

$static['переменная'] = ЗНАЧЕНИЕ; // даётпонять скрипту, что полные новости открываться не будут. Этополезно использовать для нескольких подключений. переменнаяэто одна из нижеперечисленных только без знака доллара ($) в начале. Например$static['number'] = 4;

$template = 'ШАБЛОН'; // позволяет подключитьопределённый шаблон. Например $template = 'Headlines'. Если вы хотитеиспользовать шаблон Default, то определять эту переменную не нужно. Шаблонставиться по умолчанию.

$category = 'ID КАТЕГОРИИ;' // этой переменнойвы показываете новости какой категории должны выводиться. Можно указыватьнесколько категорий: $category = '1,4,7' это значит выводиться новостибудут только из категорий с ID 1, 4 и 7. ID категорий можно посмотретьв админке -> Категории.

$number = КОЛ-ВО; // этим вы указываетесколько должно выводиться новостей за раз. К примеру, $number = 7.

$year, $month, $day,$user (или $author) похожи на переменную $category,только указать можно лишь одно правило. То есть вывод новостей определённогопользователя ($user/$author), за определённый год ($year), месяц ($month),день ($day). Конечно, всё можно использовать "вкупе": показатьновости определённого пользователя из нужной категории (категорий), некогогода, месяца и дня.

$skip = КОЛ-ВО; // эта переменная должнаиспользоваться только, если задействована переменная $number. Переменная переменная $skip позволяет показыватьновости пропуская энное количество, которое и указывается в переменная $skip.

$post // работает только если какая-то новость открыта. Это массив содержащий в себе всю информацию из открытой новости ($post['title'], например, заголовок новости).

$sort = array('поле', 'порядок'); // сортируетновости по "полю" по "порядку".

$link = 'ФАИЛ'; // заставляет новости (календарь, категории, etc.) открываться в ФАЙЛЕ. Если $link не указан, то подразумевается home (домашняя страница сайта). Обратите внимание на то, что это не абы какой фаил, а "фаил" прописанный в urls.ini. Подробнее об этом читайте в rUFUs / Управление УРЛами

Существует так же несколько уже определённых массивов.

$users - содержит в себе всю информацию о всех пользователях. $users[username]['icq'], где username это логин пользователя, даст ICQ юин пользователя.

$categories - содержит всю информацию о категориях. $categories[id]['parent'], где id это ID категории, вернёт "родителя" категории.

$member - содержит всю информацию о авторизированном пользователе. $member['icq'] вернёт ICQ юин пользователя.

Доступные значения у переменных $sort и $post:
date - дата новости
author (не user) - пользователь (его логин)
title - заголовок
short - кол-во знаков в короткой новости
full - кол-во знаков в полной новости
category - категория (в базе категории идут как id1,id2и т.д.)
url - заголовок в транслите или слово указанное в поле"УРЛ" при добавлении/редактировании новости
id - идентификационный номер новости
views - счётчик просмотров
comments счётчик комментариев

Порядков сортировки у $sort всего два (но зато каких! :)):
ASC - (ASCENDING) сортирует по возрастанию
DESC - (DESCENDING) сортирует по убыванию.

Например $sort = array('comments', 'DESC') - будет сортировать комментариив порядке "новые сверху".

Обратите внимание. Всё вышеуказаное может быть расширено плагинами, такими как Keywords, например.

[^] Подключение новостей

Это очень простой процесс. Нужно лишь наверх файла, в котором будут отображатьсяновости написать:

include 'path/to/head.php';

Обратите внимание. path/to/ это путь к директории,где расположен скрипт.

"Верх" файла это самый-самый верх. Если есть DOCTYPE, то до него:

<? include 'path/to/head.php';?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Теперь вы поняли что такое "верх". Да? ;)

А там, где вы хотите видеть сами новости:

include rootpath.'/show_news.php';

Все указанные выше переменные нужно писать до подключения (include)show_news.php:

$number = 7;
include rootpath.'/show_news.php';

Можно подключать любое количество show_news.php, просто не забудьте использоватьпеременную $static для подключений, которые не должны показывать полную новость.

Вы можете вместо переменной $cutepath использовать константу rootpath:

include rootpath.'/show_news.php';

[^] Примеры

Конечно, самый лучший пример это http://ваш-сайт.ру/example/, так как он "боевой":).

Обычное подключение. Выведет абсолютно все новости, из всех категорий,с сортировкой по умолчанию (сортировка по дате, по убыванию (DESC), т.е. новыесверху):

include rootpath.'/show_news.php';

Теперь нам нужно вывести 5 новостей из категории "Вася" (унеё ID, предположим, 1) и Гриша (ID этой 4) с шаблоном Headlines:

$number = 5;
$category = '1,4';
$template = 'Headlines';
include rootpath.'/show_news.php';

Отлично. Сейчас задача следующая: если кто-то открыл полную новость,надо снизу (можно и сверху - без разницы) вывести несколько (7) новостей из той же категории, что и открытая.Шаблон будет Headlines:

$number = 5;
include rootpath.'/show_news.php';

if ($post['category']){ // узнаём, открыта ли какая-то новость и в категориили она вообще
   $static['skip'] = 0;
   $static['template'] = 'Headlines';
   $static['number'] = 7;
   $static['category'] = $post['category'];
   include rootpath.'/show_news.php';
}

Если не нужно выводить из той же категории, а просто 7 заголовков, то делать это следует так:

$static['skip'] = 0;
$static['template'] = 'Headlines';
$static['number'] = 7;
include rootpath.'/show_news.php';

[^] Оптимизация скрипта

Плагины и некоторые функции лишний раз обращаются к базе и создают нагрузку, плюс есть функция создающая ужасное PGT (время генерации скрипта)(я работаю над её оптимизацией). Для ускорения работы скрипта и снижения нагрузки на сервер нужно использовать кэширование. По умолчанию оно выключено, включить можно в настройках системы -> закладка "система" -> поле "Кэш".

[^] rUFUs / Управление УРЛами

С помощью rUFUs вы можете настраивать УРЛы скрипта исходя из личных предпочтений.

Обратите внимание! Все примеры ниже предпологают домашнюю страницу сайта http://example.com/index.php, а "Полный путь к директории, где установлена Strawberry" это http://example.com/path/to

В дистрибутиве по умолчанию идут УРЛы следующие:
для новостей http://example.com/index.php?id=ID
для категорий http://example.com/index.php?category=ID
и так далее.

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

К примеру, есть у нас биография господина Ремарка: "Эрих Мария Ремарк. Биография". УРЛ http://example.com/index.php?id=128 об этом ничего не говорит. А вот http://example.com/bio/remark (bio это категория) или http://example.com/remark.html - да. Согласитесь, это логичные УРЛы. Пользователь набирая первые буквы вашего сайта и видя все странички, которые посетил сразу поймёт что про что и зачем. Это называется ЧПУ (человеко-понятные УРЛы).

Выучить синтаксис труда не составит, тем более, если вы ковыряли когда-нибудь ini-файлы, а вот с пониманием и моим объяснением проблемы возникнуть могут. Я попробую как можно проще и доходчивея объяснить что к чему и почему. Чтобы не показывать на пальцах, советую проинсталировать скрипт и для начана поработать с http://example.com/path/to/example. Так же советую сделать бэкап файла data/urls.ini на всякий случай. Если в процессе вылезет ошибка 500, то просто удалите фаил .htaccess из http://example.com/path/to/example (да, он сохраняется в домашнюю директорию сайта).

Итак, для начала разберём дефолтные настройки.

[home]
post = "?id={id}"
category = "?category={category-id}"
user = "?do=users&user={user}"
day = "?year={year}&month={month}&day={day}"
month = "?year={year}&month={month}"
year = "?year={year}"

[rss.php]
post = "?id={id}"
category = "?category={category-id}"
user = "?user={user}"

[print.php]
post = "?id={id}"

[trackback.php]
post = "?id={id}"

post, category, user, day, month и year это стандартные ключи их описание можно посмотреть чуть ниже. Описание {тегов} рядышком со значениями :). Я думаю, с этим, более менее всё понятно. Есть ключ post мы делаем ему маску.

?id={id} в итоге даст http://example.com/index.php?id=128 (128 это пример, конечно же).

Странные штуковины в квадратных скобках это файлы через которые идёт обработка. [home] это "Домашняя директория сайта", сейчас она у нас http://example.com/index.php (это тут, в ридми), а [rss.php] это http://example.com/path/to/rss.php, [print.php] - http://example.com/path/to/print.php, [trackback.php] - http://example.com/path/to/trackback.php.

Если нужно чтобы обработка шла не через аддон (файлы в директории скрипта типа rss.php) или какой-то ваш фаил в директории скрипта, а в директории сайта, то нужно писать так:

[home/file.php]

эта штука поможет сделать ссылку на http://example.com/file.php.

Такая:

[home/folder]

на http://example.com/folder.

А такая:

[home/folder/file.php]

на http://example.com/folder/file.php.

Вызывать сгенерированные УРЛы нужно через $tpl['post']['link']['ключ'], например $tpl['post']['link']['post'] в таком случае ссылка будет формироваться за счёт переменной $link (см. переменные), либо через $tpl['post']['фаил/ключ'], например, $tpl['post']['home/post'] это фиксированный выбор, переменная $link не сможет ничего изменить. Впрочем, это работает только в шаблонах, я имею в виду переменную $tpl. В друших местах сайта нужно вызывать функцию cute_get_link(). Работает она схоже:

cute_get_link(массив, ключ, фаил)

К примеру, делаем выборку из таблицы news и выводим заголовки, которые ещё и ссылки работающие через home/file.php и ключ post:

foreach ($sql->select(array('table' => 'news'))) as $row){
echo '<a href="'.cute_get_link($row, 'post', 'home/file.php').'">'.$row['title'].'</a><br />';
}

Все примеры далее полностью работают, если ваш хостер поддерживает mod_rewrite. Спросите у него и если это верно, то зайдите в настройки системы и в пункте "mod_rewrite" поставьте "Да".

Итак. Давайте попробуем сделать ЧПУ для постов, нужно сделать вид год/месяц/день/заголовок.html и выводить через домашнюю страницу сайта). Сделать это просто. Сначало следует зайти в "Управление УРЛами". В окне .htaccess следует в [home] заменить:

post = "?id={id}"

на вот это:

post = "{year}/{month}/{day}/{title}.html"

Теперь нажать "Сохранить urls.ini", а затем "Создать .htaccess". Всё. Теперь откроте сайт и тыкните на УРЛ. Если вылезла ошибка 404, то поробуйте зайти в домашнюю страницу сайта по FTP и проверить, есть ли .htaccess. Если нет - не беда. Создайте его и поставьте права 666 или 777. Теперь снова сгенерируйте .htaccess. Если и сейчас 404, то спросите хостера ещё раз про mod_rewrite. Может наврал гадюка?

Сейчас попробуем переделать имя файла. К примеру, чтобы наш RSS был по адресу http://example.com/rss.xml, а не http://example.com/path/to/rss.php. Вы ведь можете сменить директорию скрипта, переименовать и т.д., да и просто хочется сделать более симпатичный УРЛ.

Под [rss.php] пишем:

post = "{year}/{month}/{day}/{title}.html"

Сохраняем urls.ini, генерируем .htaccess и заходим на http://example.com/rss.xml. Какая прелесть, работает и кто бы мог подумать?

Обратите внимание, мы сделали новый ключ с иминем feed. Это имя произвольно. Вы можете называть как хотите, главное чтобы ваше имя не перебивало стандартные ключи (post, category, user, day, month и year).

Всё оки, а что делать, если сайт раотает через какие-то переменые, т.е. их нужно передать скрипту? Всё оки-доки. Передать свои переменные можно двумя путями: скрытым и публичным. К примеру, есть у нас переменная kartman. Если она равна news (kartman=news), то открываются новости, иначе кукиш, не будут выводиться. Делаем так.

Первый путь. Путь ниндзя скрытый. В {тег} можно добавлять данные.

Так {тег:kartman=news}:

post = "{year}/{month}/{day}/{title:kartman=news}.html"

или так {тег}{add:kartman=news}:

post = "{year}/{month}/{day}/{title}.html{add:kartman=news}"

Если нужно передать несколько параметров, то пишим не kartman=news, а например kartman=news&some=thing&and=more - в этой строке передаём переменные kartman, some и and.

В УРЛ эти данные не попадут. Поэтому способ и именуется скрытый. В бубличном всё капельку иначе:

post = "{year}/{month}/{day}/{title}.html?kartman=news"

?kartman=news попадёт в УРЛ.

Иногда нужно делать статичные файлы. Например, по адресу http://example.com/category иметь список категорий, а по http://example.com/archives список архивов. Загляните в фаил exapmle/index.php (лежит в директории со скриптом) и увидите как там реализовано:

if ($do == 'search'){
// выводим поиск (аддон)
$number = 12;
include rootpath.'/show_search.php';
} elseif ($do == 'users'){
// выводим список юзерей (аддон)
include rootpath.'/show_users.php';
} elseif ($do == 'category'){
// выводим список категорий (плагин CN Functions)
echo cn_category();
} elseif ($do == 'archives'){
// выводим список архивов (плагин CN Functions)
echo cn_archives();
} else {
// выводим семь новостей
$number = 7;
include rootpath.'/show_news.php';
}

По-русски это звучит так: если переменная do равна search, то делаем это, если равна users... и так далее до несовпадения ни с чем, тогда выводим новости. Но зачем нам УРЛ http://example.com/index.php?do=category, когда можно http://example.com/category? Правильно, незачем.

Поэтому определяемся с файлом (в примеру будет домашняя страница сайта), берём все свои do и пишем под [home]:

doIt = "(search|users|category|archives){add:do=$1}"

Сохраняем и генерируем. Всё. Теперь у нас есть виртуальные папки. Ну не крутатня ли? :)

Видимо, нужно немного пояснить. Дело в том, что {add:что-то}добавляет ?что-то в конец, т.е. что мы будем реврайтить. (что-то|что-то другое) говорит мод_реврайту "или", т.е. что-то или "что-то другое". Знак цифра со знаком доллара определяет последовательность. Вот смотрите, если у нас есть:

(что-то раз|что-то другое раз)(что-то два|что-то другое два)

то всё что между первыми скобками это $1, всё что между вторыми это $2.

Вот пример, он не рабочий (из-за кирилицы), это просто пример:

чтоТо = "(что-то раз|что-то другое раз)(что-то два|что-то другое два){add:чтоРаз=$1&чтоДва=$2}"

Соблюдать последовательность необязательно:

чтоТо = "(что-то раз|что-то другое раз)(что-то два|что-то другое два){add:чтоРаз=$2&чтоДва=$1}"

чтоТо = "(что-то раз|что-то другое раз)(что-то два|что-то другое два){add:чтоДва=$2&чтоРаз=$1}"

чтоТо = "(что-то раз|что-то другое раз)(что-то два|что-то другое два){add:чтоДва=$1&чтоДва=$2}"

Лучше всего, конечно, почитать что-ибудь про regexp`ы. Если вы имели дело с каким-то языком программирования или непосредственно с mod_rewrite, то сталкивались с регулярными выражениями.

Список ключей:

post - ссылка на новость (переменная id)
category - ссылка на категорию (переменная category)
user - ссылка на пользователя (переменная user)
day - ссылка на день (переменная day)
month - ссылка на месяц (переменная month)
year - ссылка на год (переменная year)

Переменные указаные в скобочках говорят какой, собственно, переменной передаются параметры срипту.

Список тегов:

{id} - ID новости (цифры)
{year} - год публикации новости (1980, 1983, 2004, 2005 и т.д.)
{month} - номер (от 01 до 12) месяца публикации новости
{Month} - имя месяца (от jan до dec) публикации новости
{day} - день (от 01 до 31) публикации новости
{title} - заголовок новости(в транслите или присвоенное ей название в поле "УРЛ")
{user} - автор новости
{user-id} - ID автора новости (цифры)
{category-id} - ID категории (цифры)
{category} - имя категории (в транслите или присвоенноеей название в поле "УРЛ")
{categories} - категория со всеми parent`ами, т.е. /категория/суб/наша-категория (цифры)

[^] Возможные ошибки rUFUs

Первая и самая распространённая ошибка - не создаётся .htaccess. Вам нужно самостоятельно в "домашней странице сайта" создать .htaccess с CHMOD 666. А потом снова создать его из админки.

Вторая. Если вы захотите написать УРЛ для категорий:

category = "{categories}"

Будут некоторые проблемы. Они связаны с mod_rewrite.Тег {categories} оставляет следующее условие для реврайта:

([/_0-9a-z-]+)

Оно подходит почти под всё: тут и цифры разрешены, и буквы, и минус снижмим подчёркиванием, и даже слэш. Что может помочь? Иерархия, конечноже.

[home]
post = "{year}/{month}/{day}/{title}.html"
user = "users/{user}.html"
day = "{year}/{month}/{day}"
month = "{year}/{month}"
year = "{year}"
category = "{categories}"

[rss.php]
post = "{year}/{month}/{day}/{title}.xml"
category = "category/{categories}/rss.xml"
user = "users/{user}.xml"

[print.php]
post = "{year}/{month}/{day}/{title}.phtml"

[trackback.php]
post = "{year}/{month}/{day}/{title}.tb"

Видите, пункт category перемещён как можно ниже, mod_rewrite (именно, как мод Апача, а не пункт в настройках :)) будет егообработать в последнюю очередь и возможно(!) это позволит избежать ошибоки неожиданностей.
updданная ошибка была исправлена в версиях выше 2.5.4, но подобная ошибка может встречатся и с правилами пользователей, которые я, к сожалению, предвидеть не могу. Поэтому "на заметку" оставляю.
upd2 вот пример чего я не могу предвидить:

[home]
post = "{categories}/{title}"
category = "{categories}"
user = "users/{user}.html"
day = "{year}/{month}/{day}"
month = "{year}/{month}"
year = "{year}"

Посмотрите на post и category. Такие правила вызывут "Новость не найдена" при просмотре категории с большой вложенность. Исправить ошибку просто, нужно поменять местами post и category:

[home]
category = "{categories}"
post = "{categories}/{title}"
user = "users/{user}.html"
day = "{year}/{month}/{day}"
month = "{year}/{month}"
year = "{year}"

Для очень умных людей: скрипт формирует правила для mod_rewrite, скрипт обрабатывает то, что даёт ему мод Апача.

Третья. Если вылезет ошибка 500, то нужно зайти по ftp и удалить .htaccess. Потом обязательно необходимо проверить категории. Скорее всего, одна из них без имени! Или вы гсохраняете .htaccess с УРЛами вида "как в старые добрые времена. Этого не допускается.

[^] Плагины

Хочу рассказать о плагине "Приблуды" (CN functions - с недавнего времени, мультиязычность, извините). Он включает в себя четырефункции: cn_calendar(), cn_title, cn_archives() и cn_category(). Первое это календарь,второе - список архивов и третье - список категорий.

Если вы раньше работали с CuteNews версий 02x, то должны помнить этифункции, только не с префиксом "cn_", а "rufus_".Они имели не много функций и достаточно сложно настраивались (в визуальномплане). С тех пор всё несколько изменилось (это не относится к календарю:)).

Обратите внимание! Это php-функции. Выводить их надо так:

<?=cn_category(); ?>

Со своими настройками так:

<?=cn_category('настройка1', 'настройка2'); ?>

cn_archives():

cn_archives([шаблон [, сортировка]])
- шаблонэто внешний вид, доступны теги:
  {count} (кол-во новостей за месяц), {date} (например Апрель 2005),
  {link} (ссылка, например /2005/04/,настроить вид ссылки можно в urls.ini фаил - [home], тип - month).
-сортировка
это, собственно, сортировка, аналог переменной $sort

С cn_category() всё куда сложнее, но и интереснее и разнообразнее:

cn_category([префикс [, шаблон [, нет-префиксу [, уровень]]]])
- префикс это то, что будет идти перед шаблоном,но, будет повторяться в зависимоти от вложенности категорий
-нет-префиксуважная штука, она говорит делать ли префикс для категорий-родителей откоторых и начинается вся цепочка подкатегорий
- шаблон- как и в cn_archivev() это внешний вид. Теги следующие:
   {id} - ID категории
   {name} - имя
   {url} - имя в транслите, либо слово указаное в поле "УРЛ"
   {icon} - иконка категории
   {prefix} - это префикс, который вы указали в поле "префикс".
  [php][/php], между этими тегами можноставить php функцию. Вот для примера (это и шаблон по умолчанию): <ahref="[php]cute_get_link($row, category)[/php]">{name} ([php]count_category_entry({id})[/php])</a><br/>. уровень говорит от какого ID категории показывать.Будут показаны все подкатегории указаного ID.

Заметим, что cn_categoy() построена на функции category_get_tree() (о ней можно почитать ниже). Функции для понимания сложной, но в использовании крайне полезной.

cn_title():

cn_title([разделитель [, направление]])
- c разделителем
-направление указывает "откуда куда" сначала в конец значение false, с конца в начало - true

Ф-ия cn_calendar() выводит календар записей. CSS для календаря:

#calendar - это id всей таблицы календаря
.month - класс заголовка месяца и ссылок на предыдущий/следующий месяц
.weekday - класс названий дней недели с понедельника по пятницу
.day - класс самих дней с понедельника по пятницу
.weekend - класс названий дней недели субботы и воскресенья
.endday - класс самих дней субботы и воскресенья

Для примера CSS можно привести пример:

#calendar {text-align: center;}
#calendar .month, #calendar .month a {font-weight: bold;color: #ccc;}
#calendar .weekday {color: #ccc;}
#calendar .weekday a {color: #ccc;font-weight: bold;}
#calendar .day, #calendar .day a {color: #ccc;}
#calendar .weekend {color: #c60000;}
#calendar .weekend a {color: #c60000;font-weight: bold;}
#calendar .endday, #calendar .endday a {color: #c60000;}

[^] Функции

Все нижеприведенные функции крайне полезны.

cute_get_link() - про неё вы уже знаете: cute_get_link(массив [, типссылки [, фаил]]).

Не менее полезая - category_get_tree() (за счёт этой функции работаетcn_category()). Её пример можно увидеть в search.php. Синтаксис прост:

category_get_tree([префикс [, шаблон [, нет-префиксу [,уровень]]]]) всё абсолютно схоже с cn_category()
+1 запрос к БД. cn_category() кэшируется, следовательно, запросов нет, а эта функция не кэшируется

Помимо упомянутой выше есть ещё несколько полезных функций для работы с категориями.

category_get_link(id) - id это номер категории. Функция даст ссылку со всеми родителями

category_get_children(id) - даст список всех дочерних категорий в виде приемлемом для скрипта ("1,2,3")

category_get_title(id [, разделитель]) - получает названиее категории из её ID, учитывая все категории-родители. разделитель это то, что будет стоять между названиями категорий

category_get_id(категория) - функция даёт номер категории исходя из её названия или УРЛа. категория - это, собственно, имя категории или её УРЛ

Остальные функции вы можете посмотреть в inc/functions.inc.php или в документации.

[^] Шаблоны

Скрипт работает за счёт двух шаблонов. Первый это шаблон самого сайта, т.е. ваш. Куда угодно вы можете сувать подключение новостей. Второй это шаблон новостей. Все они хранятся в папке data/tpl/. Одна директория внутри это один шаблон. Например, Default это шаблон по умолчанию. active.tpl, full.tpl и т.д. это на самом деле PHP-файлы, которые подключаются в коде скрипта и выводят ту или иную информацию. Со всеми переменными вы можете ознакомится в админке -> шаблоны. Хочу заметить, все переменные для полной/короткой новости ($tpl['post']) работают и для комментариев, и для формы.

Существует так же шаблон mail, он содержит в себе шаблоны всех писем отправляемых скриптом (плагины не в счёт, у них свои шаблоны, определяет их автор плагина и парсятся (обрабатываются) они так же через плагин). По сути, этот шаблон вынесен для перевода пользователями отличными от русского языков.

[^] Полезные ссылки