Разбивка на страницы

Главные вкладки

Аватар пользователя Tankha Tankha 31 августа 2008 в 12:04

Разбивка на страницы с помощью CCK и Contemplate.
Это НЕ АВТОМАТИЧЕСКАЯ разбивка - т.е. страницы формируются вручную.

1. Необходимо установить модули CCK и Contemplate. Включить их и настроить разрешения.

2. В разделе "Типы материалов" (САЙТ/?q=admin/content/types) напротив каждого типа (страница, страница подшивки, новость...) появляется две новых ссылки "add field" и "manage fields".
Нажимаем напротив нужного типа (например напротив "page") - "add field". Добавляем машинное имя (маленькими буквами) и "человеческое" имя. Я назвал поле соответственно: filed_next_page - Следующая страница.
Жмем "Продолжить", - выбираем параметры поля. Для Widget type - Text area (multiple rows). Опять нажимаем "Продолжить". Здесь важно назначить в параметрах поля два пункта: выбрать для "Обработка текста:" - фильтрованный текст, а перед ним "Number of values:" - неограниченно. Остальное можно оставить как есть.
Теперь в режиме редактирования материала "page" (страница) увидим новые текстовые поля. Их сразу два и если заполнить не только первое, но и второе поле, то после сохранения появится третье новое и т.д. - в неограниченном количестве.
В разделе: САЙТ/?q=admin/content/node-type/page/fields можно настроить внешний вид страницы в режиме редактирования так, чтобы новые поля появлялись под полем ввода основного содержания.

3. Теперь переходим к Contemplate.
Выбираем в разделе Content templates в админ-меню: САЙТ/?q=admin/content/templates, напротив соответствующего типа (в нашем случае page-страница) - "edit template".
Здесь для группы "Содержимое" ставим пометку напротив "Affect body output" и редактируем соответствующее текстовое поле (обязательно отключаем текстовый редактор для этого поля).
Теперь удаляем код который там прописан и всместо него вставляем свой.
Первым делом необходимо отловить содержмое URL. Дальше будем исходить из того что своих "дополнений" в URL нет и всё содержимое строки - стандартно. Т.е. там присутствует переменная "q", которую мы отловим и вернем наместо. К ней добавим свою - с нумерацией страниц. Пусть она будет называться "p".

Итак, - удаляем содержимое и вставляем свой код.

<?php
$q = $_GET['q'];
$p = $_GET['p'];

if ($node->field_next_page[0]['value']) {

$pages_c = count($node->field_next_page);
$pages_cx = 0;
$pages_lpre = ' <a href="/?q=' . $q;

  if ($p > 1) {
  $pages_l = $pages_lpre . '&p=1">1</a> ';
  }
  else {
  $pages_l = '<font color="#сссссс"><b>1</b></font> ';
  }

 while ($pages_cx < $pages_c) {
 $pages_cx = $pages_cx + 1;
  $pages_cxl = $pages_cx + 1;
  if ($p == $pages_cxl) {
  $pages_l = $pages_l . '<font color="#993300"><b>' . $pages_cxl . '</b></font> ';
  }
  else {
  $pages_l = $pages_l . $pages_lpre . '&p=' . $pages_cxl . '">';
  $pages_l = $pages_l . $pages_cxl . '</a> ';
  }
 }
echo '<p align=right>Страницы: ' . $pages_l . '</p>';
}
else { /* Это можно убрать */
echo '<br>'; /* Это можно убрать */
} /* Это можно убрать */

if ($pages_c) {

  if ($p > 1) {
  $par = $p - 2;
  echo $node->field_next_page[$par]['value'];
  echo '<br>';
  }
  else {
  echo $node->content['body']['#value'];
  }

echo '<br><p align=right>Страницы: ' . $pages_l . '</p>';
}
else {
echo $node->content['body']['#value'];
}

?>

Из своего кода (для Drupal 6) я удалил свои не относящиеся к теме строки и проверил - должно работать.

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

P.S.
Есть один минус - страдает ссылка "Версия для печати". Но, например, у себя я все равно собирался ее переделывать...

Комментарии

Аватар пользователя Ромка Ромка 31 августа 2008 в 13:36

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

Аватар пользователя Atl Atl 31 августа 2008 в 14:55

Не то чтоб интересная, а жутко интересная. Выложите хотя бы подробнее описание. И скриншоты.
Пжлст!