Текст книги "CMS Drupal: система управления содержимым сайта"
Автор книги: Виктор Ромашов
Жанр: Программы, Компьютеры
сообщить о неприемлемом содержимом
Текущая страница: 14 (всего у книги 19 страниц)
▪ возможность поменять столбцы таблицы местами;
▪ возможность указать столбцы, по которым разрешена сортировка информации;
▪ возможность указать столбец, по которому информация сортируется по умолчанию;
▪ возможность использования плавающего заголовка таблицы (который всегда будет отображаться в верхней части экрана).
Осталось только сохранить внесенные изменения, а также сравнить между собой вариант вывода таблицей и списком (рис 2.24).
Рис. 2.24. Представление публикаций списком (вверху) и таблицей (внизу)
Отображение алфавитного указателя
Еще одна возможность представления Views – это отображение списка публикаций в виде алфавитного указателя. Иными словами, изначально вверху страницы будут отображаться символы алфавита. При щелчке кнопкой мыши на символе появятся все публикации, значение определенного поля которых начинается с данного символа (рис. 2.25).
Чтобы сделать алфавитный указатель, нужно воспользоваться разделом Аргументы. Нажмите кнопку с изображением знака +, расположенную на заголовке раздела Аргументы.
Вы увидите список сведений о публикации, по которым можно выполнить группировку. Для примера выберите в этом списке значение Материал: Title.
Рис. 2.25. Алфавитный указатель и список публикаций, отображаемый при щелчке на одном из символов
Далее вам будет предложено настроить новый аргумент.
1. Выберите положение Сводка, сортировка по возрастанию переключателя Если аргумента нет, то.
2. Установите флажок Словарный режим.
3. В поле Ограничение символов введите значение 1.
4. В раскрывающемся списке Регистр в адресной строке выберите пункт Привести к нижнему регистру.
Однако это еще не все. В следующей области вам будет предложено настроить стиль Сводка. Выберите в этой области значение Без форматирования.
В следующей области установите флажок Показывать встроенные элементы и в поле Разделить введите значение —. Так вы укажете разделитель, который будет отображаться между символами алфавита.
Настройка вывода Блок
Вы научились создавать новые страницы сайта. Однако это еще не все возможности модуля Views. Помимо страниц, он позволяет создавать блоки (с той же функциональностью, что и страницы).
Для создания блоков используется вывод Блок. Проще всего создать отдельное представление с выводом Блок, вместо того чтобы создавать в одном представлении и работающий вывод Страница, и работающий вывод Блок. В дальнейшем настройки двух этих выводов могут конфликтовать между собой, и вместо разных настроек вам придется выбирать общие настройки для двух выводов.
Итак, вывод добавлен. Единственное, на что следует обратить внимание при настройке блока, – это значение настройки Постранично раздела Основные настройки. Как правило, в блоке отображаются сведения о последних публикациях на сайте.
Это значит, в нем не нужны ссылки на следующие страницы в списке публикаций, поэтому присвойте данной настройке значение нет.
После того как вы сохраните представление, в разделе Управление → Конструкция сайта → Блоки появится созданный вами блок.
Настройка вывода Прикрепленный файл
И последний вывод, который мы рассмотрим, – Прикрепленный файл.
При его использовании в первую очередь следует обратить внимание на настройки раздела Настройки вложения.
▪ Наследовать аргументы – присвойте данной настройке значение нет, если вы не хотите, чтобы данный вывод использовал настройки раздела Аргумены вывода Страницы. Это нужно в том случае, если вы хотите задать другие настройки аргументов для вывода Прикрепленный файл.
▪ Наследовать раскрытые фильтры – присвойте данной настройке значение нет, если вы не хотите, чтобы данный вывод использовал настройки раздела Фильтры вывода Страницы. Это нужно в том случае, если вы хотите задать другие настройки фильтров для вывода Прикрепленный файл.
▪ Позиция – позволяет определить расположение дополнительного вывода на странице – до или после основного вывода.
▪ Прикрепить к – позволяет выбрать вывод, к которому будет добавлен вывод Прикрепленный файл. Обязательно воспользуйтесь этой настройкой, так как по умолчанию вывод ни к чему не прикреплен.
Итак, мы рассмотрели основные настройки системы Drupal. В следующей главе вы узнаете, как более тонко и профессионально настроить эту систему.
Глава 3
Drupal для программистов
▪ Drupal и PHP: расширяем возможности сайта
▪ Разработка собственных компонентов
▪ Дополнительные программы для CMS Drupal
▪ Структура CMS Drupal
▪ Работа с базой данных MySQL
▪ Хаки Drupal
▪ Работа с поисковыми системами
Прочитав первую часть книги, вы полностью научились работать с CMS Drupal и теперь можете с легкостью поддерживать работу своего сайта. Заметьте, что для этого нам не понадобилось ничего «специального» – мы даже ни разу не воспользовались языком PHP или какими-либо другими «профессиональными» сведениями, что, однако, не означает, что это знать не обязательно.
Конечно, вы с легкостью сможете управлять CMS Drupal и расширять свой сайт, зная только язык разметки HTML, – и в этом огромный плюс Drupal. Тем не менее, если, помимо языка HTML, вы знаете хотя бы PHP и JScript, у вас появится намного больше возможностей улучшить свой сайт. И сейчас мы попробуем узнать, какие же возможности предоставляют «дополнительные» знания и умения.
Drupal и PHP: расширяем возможности сайта
Как вы уже знаете, при создании публикаций любого типа можно использовать формат ввода PHP code. Он позволяет использовать на странице публикации возможности не только языка HTML, но и PHP. Пришла пора подробнее поговорить о данной возможности.
Добавление кода PHPПримечание
Не забывайте, что формат ввода PHP code по умолчанию доступен только в пятой версии CMS Drupal. В шестой версии для создания данного формата ввода необходимо включить специальный модуль PHP filter.
Итак, для того чтобы создать публикацию, содержащую PHP-код, необходимо воспользоваться подразделом раздела Создать материал, который соответствует типу нужной публикации. На странице создания публикации установите переключатель из области Формат ввода в положение PHP code. После этого можно начинать вводить текст публикации в поле Содержимое. При этом PHP-код вводится между тегами <?php и?>, а весь остальной код, который не находится между этими тегами, считается HTML-кодом.
При создании публикаций, содержащих PHP-код, разработчики CMS Drupal рекомендуют придерживаться специальных правил форматирования такого кода. Эти правила будут описаны в следующем разделе.
Код PHP можно использовать не только при создании новых публикаций, но и при добавлении комментариев, если у вас имеются соответствующие права доступа. Это делается точно так же, как и при создании новых страниц публикаций.
Не стоит также забывать о возможности использования PHP-кода при добавлении новых блоков. Кроме того, в некоторых случаях вам может понадобиться возможность использования PHP-кода для определения, будет ли виден блок на конкретной странице (положение Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов) переключателя Показывать блок на определенных страницах на странице настройки конкретного блока).
Создание своих страницОтдельно хотелось бы рассмотреть возможность создания своих страниц сайта на основе CMS Drupal. В этом случае вы, естественно, также можете использовать код PHP.
Итак, как обычно, создание новой страницы должно начинаться с создания текстового файла (в каталоге вашего сайта или в одном из вложенных в него подкаталогов), которому впоследствии будет присвоено расширение PHP. После того как файл создан, в его начало необходимо добавить следующие строки кода:
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
Далее вы можете вводить свой PHP-код либо другое содержимое страницы. Обратите внимание, что указанная выше строка require_once. / includes/ bootstrap.inc'; будет верна только для файлов, которые находятся в корне вашего сайта. Если вы поместили файл в какой-либо подкаталог, следует изменить эту строку в соответствии с вашим расположением файла.
В качестве примера попробуем создать PHP-файл, который будет возвращать динамически сгенерированное изображение, определяющее количество публикаций, которые есть на вашем сайте. Например, присвоим этому файлу имя image. php:
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//Отправляем браузеру заголовок, определяющий
//тип содержимого, возвращаемого сценарием.
drupal_set_header(«Content-type: image/jpeg»);
$query = «SELECT COUNT(`nid`) FROM `{node}`»;
$result = db_result(db_query ($query));
$pic = ImageCreateFromJPEG(«img/code.jpg»);
$color=ImageColorAllocate($pic, 0, 0, 0);
ImageString($pic,5,20,25,$result,$color);
ImageJPEG($pic);
ImageDestroy($pic);
?>
Как можно заметить из сценария, изображение формата JPEG, которое возвращается сценарием, создается на основе изображения code.jpg, расположенного в каталоге img на вашем сайте. Если вы будете использовать данный код, не забудьте создать этот каталог и изображение в нем.
Таким образом, сценарий берет изображение code. jpg и поверх него выводит количество публикаций, созданных на вашем сайте.
Стандартные переменныеЗнание языка программирования PHP поможет вам расширить возможности публикаций, однако, зная только его, вы никогда не сможете создавать страницы, интегрированные с CMS Drupal, то есть создавать PHP-код, который выполнял бы то или иное действие в зависимости от определенных настроек CMS Drupal или определенных сведений о публикации. Однако это не значит, что поставленная задача невыполнима.
Система Drupal для своей работы использует несколько стандартных переменных (а также массивов, объектов, констант и т. д.), имена которых всегда одинаковы. И вы всегда можете воспользоваться содержимым этих переменных для своих целей. Причем делать это можно при создании не только публикации, блока или комментария, но и своих собственных модулей, тем оформления и любой другой задачи, связанной с CMS Drupal.
Далее в книге мы рассмотрим эти переменные. Но это будет еще не скоро – пока просто возьмите на заметку, что такая возможность существует.
СниппетыОгромный плюс CMS Drupal заключается в том, что в Интернете можно найти множество готовых «элементов» для данной системы управления содержимым. Вам нет необходимости разрабатывать собственные элементы – можно просто воспользоваться уже существующими. Не обошла эта тенденция и PHP-код для создания публикаций, блоков или определения видимости блоков – так называемых сниппетов.
Например, готовые сниппеты можно найти на странице http://drupal.org/handbook/
customization/php-snippets. Достаточно просто выбрать на этой странице нужный код, после чего создать публикацию на основе найденного кода (либо сделать его частью своей публикации), не забыв выбрать формат ввода PHP code.
Сниппеты – это идеальный учитель, который поможет вам понять, как именно создаются публикации на основе формата ввода PHP code, и научит с легкостью создавать свои собственные подобные элементы. Поэтому сейчас возьмем несколько уроков у этого учителя.
Отображение блока на странице. Отдельно от остальных стоят сниппеты, предназначенные для определения, будет ли блок отображаться на странице. Напомним, что их необходимо вводить на странице настройки блока в поле Страницы после установки переключателя Показывать блок на определенных страницах в положение Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов). Чтобы отобразить страницу настройки блока, перейдите к разделу Управление → Конструкция сайта → Блоки, после чего воспользуйтесь ссылкой настроить, расположенной напротив нужного блока.
▪ Показывать блок только на странице собственного профиля пользователя: <?php
<?php
global $user;
if (arg(0) == 'user' && $user->uid == arg(1)) return TRUE;
return FALSE;
?>
▪ Отображать блок только на страницах профилей пользователей:
<?php
global $user;
if (arg(0) == 'user') return TRUE;
return FALSE;
?>
▪ Показывать блок только для зарегистрированных пользователей:
<?php
global $user;
return (bool) $user->uid;
?>
▪ Выводить блок только администратору:
<?php
global $user;
if (is_array($user->roles) && in_array('admin', $user->roles)) {
return TRUE;
} else return FALSE;
?>
▪ Не показывать блок на страницах тем форума:
<?php
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$node = node_load(arg(1));
if ($node->type == “forum”) return FALSE;
}
return TRUE;
?>
▪ Не показывать блок при просмотре и редактировании топика:
<?php
if (arg(0) == 'node' && arg(1)){
$result= db_fetch_object(db_query(“SELECT n.type FROM {node} AS
n WHERE n.nid=%d LIMIT 1”, arg(1)));
return ($result->type!= 'forum');
}
?>
Содержимое блока. Стандартными переменными CMS Drupal можно пользоваться и в тексте блока. Для этого установите переключатель области Формат ввода в положение PHP code, после чего вводите PHP-код.
▪ Отображать разное содержимое блока для разных пользователей:
<?php
global $user;
if (isset($user->uid)) {
if ($user->uid == 1){
echo 'Это будет отображаться для администратора';
}else{
echo 'Это будет отображаться для зарегистрированных пользователей';
}
}else{
echo 'Это будет отображаться для анонимных пользователей';
}
Не забывайте также, что вы можете пользоваться значением стандартных переменных CMS Drupal. Но перед этим необходимо «подключить» их для блока, то есть воспользоваться строкой global объект. Например:
<?php
global $user;
echo '<br />Пользователь: ', $user->name;
echo '<br />E-mail: ', $user->mail;
?>
Разработка собственных компонентов
Если вы умеете программировать на PHP, то можете попробовать разработать собственный модуль для CMS Drupal либо же изменить некоторые возможности уже существующих модулей. Последнее, правда, делать не рекомендуется.
В любом случае, чтобы создавать модули и темы оформления CMS Drupal, одного знания PHP недостаточно. Следует также изучить используемую в этих элементах структуру. Этим мы сейчас и займемся. Но поскольку разработка модулей и тем оформления не является основной темой нашей книги, мы изучим ее лишь поверхностно, чтобы вы имели хотя бы общее представление о процессе создания модулей и тем и могли самостоятельно создать самый простой модуль или тему.
Правила программирования на языке PHPРазработчики CMS Drupal настоятельно рекомендуют всем программистам, которые собираются заняться расширением возможностей этой системы, использовать один и тот же стандарт программирования. Конечно, вы можете не прислушиваться к их мольбам и писать код на PHP так, как вы привыкли. Но все же…
В первую очередь следует заметить, что правила написания кода PHP, которые применяют разработчики Drupal, основаны на PEAR Coding Standards. Послушавшись разработчиков Drupal и изучив их рекомендации, вы, фактически, изучите один из мировых стандартов, знание и использование которого может помочь в вашей карьере (если, конечно, она как-то связана с PHP и языками программирования).
Итак, правил оформления PHP-кода не так уж и много, и они не так уж и сложны, поэтому мы перечислим их ниже в виде коротких заметок.
▪ Отступы в коде создаются не табуляцией, а двумя пробелами.
▪ Операторы языка PHP (например, if, for, while, switch и т. д.) должны отделяться от круглой скобки одним пробелом, то есть if (…). Благодаря этому их сразу можно будет отличить от функций.
▪ Нужно использовать следующую структуру оператора switch:
switch (переменная) {
case значение1:
действие1;
break;
case значение2:
действие2;
break;
default:
действие_по_умолчанию;
break;
}
▪ В аргументах функции нужно ставить пробел между запятой и параметром. Кроме того, пробел должен ставиться слева и справа от знака равенства.
А вот между названием функции и скобкой пробел ставить нельзя (иначе мы опять начнем путать операторы с функциями). Кроме того, пробел не нужно ставить между последним параметром и закрывающей скобкой. Например:
my_func($var1, $var2, $var3 = «fi rst»);.
▪ Несколько однородных команд, идущих друг за другом, можно выравнивать между собой с помощью пробелов. Например:
$txt = my_func(1, 2);
$tmp_txt_1 = my_func(1, 2, “temp”);
▪ Желательно, чтобы создаваемые вами функции всегда возвращали что-нибудь (чтобы всегда выполнение функции завершалось выражением return).
▪ Функции и методы должны именоваться в нижнем регистре.
▪ Желательно начинать имя каждой функции с префикса, соответствующего тем группе или модулю, в которых она используется. Префикс и основное имя функции нужно указывать через знак подчеркивания.
▪ Имена внутренних функций, которые должны использоваться только внутри вашего модуля, необходимо начинать со знака подчеркивания. Например:
_my_func().
▪ Глобальные переменные также нужно начинать со знака подчеркивания. После него нужно не забыть указать префикс, соответствующий тем группе или модулю, к которым относится глобальная переменная.
▪ Имена констант всегда нужно писать в верхнем регистре. Причем начинаться они также должны с префикса, соответствующего тем группе или модулю, к которым константа относится (префикс также указывается в верхнем регистре). Префикс и основное имя константы нужно указывать через знак подчеркивания.
▪ Если вы используете оператор указания => в массивах, следует с каждой стороны данного оператора ставить по одному пробелу. Например:
$my_mass = array('foo' => 'bar');.
▪ Желательно не использовать строки кода длиннее 80 символов. Такие длинные строки кода следует записывать в нескольких строчках с отступом в один уровень. Например:
$my_mass = array('temp', 'temp', 'temp', 'temp',
'foo' => 'bar', 'temp', 'temp', 'temp', 'temp',
'temp', 'temp', 'temp');
▪ Формируя массивы с помощью функции array, желательно всегда завершать строку аргументов запятой. В дальнейшем, если вам понадобится увеличить
▪ количество переменных, передаваемых функции array, лишняя запятая всегда подскажет, куда нужно вставлять новые переменные. Например, вместо ar ray (temp, 'temp', foo => 'bar') нужно использовать array('temp', 'temp', 'foo' => 'bar',).
▪ Комментарии в своем PHP-коде нужно указывать в формате Doxygen. Можно использовать следующие виды комментариев, однако комментарии, начинающиеся с символа #, желательно не применять:
/**
* Многострочный комментарий
* в стиле C.
*/
//Однострочный комментарий в стиле C++.
# Однострочный комментарий в стиле Perl.
# Его использование возможно, однако нежелательно.
▪ Для определения границ PHP-кода желательно всегда использовать стиль XML. Другими словами, начало кода PHP должно определяться тегом <?php, а окончание кода PHP – тегом?>.
▪ Если создаваемый сценарий завершается кодом PHP, то в конце этого кода лучше не указывать закрывающий тег?>. Использование данного тега в конце файла не обязательно, более того, оно может вызвать проблемы в работе вашего кода на некоторых системах.
▪ Все сценарии, которые вы создаете для CMS Drupal, должны начинаться со специального комментария // $Id$, который при использовании CVS будет автоматически расширен (например, до // $Id: CODING_STANDARDS.html,v 1.7 2005/11/06 02:03:52 webchick Exp $). Данный комментарий должен находиться в самом начале кодового файла, сразу на следующей строке после открывающего тега <?php.
▪ Если вам нужно указать пример URL-адреса в комментарии или вашем коде, то желательно указывать адрес example.com или его разновидности example.net, example.org. Данная рекомендация описана в RFC 2606.
▪ Все файлы документации должны иметь расширение TXT.
Как было сказано выше, комментарии в коде должны соответствовать стандарту Doxygen. И все потому, что данный стандарт используется в самой системе CMS Drupal.
Стандарт Doxygen – это уникальный стандарт генерации документации, который позволяет автоматически создавать документацию из комментариев, которые вы разместили в коде.
В соответствии со стандартом Doxygen каждый файл должен начинаться со строки вида // $Id$, и вы должны помнить об этом, создавая свои модули. Этот тег будет автоматически заменен основной информацией о файле.
Желательно писать комментарии для каждой функции, которую вы создаете. При этом комментарии данного рода необходимо указывать непосредственно перед создаваемой функцией.
Кроме того, не следует забывать комментировать назначение форм и описывать назначение переменных, которые передаются этими формами.
Стандарт Doxygen – это намного больше, чем просто стандарт комментирования. Например, комментарии в этом стандарте могут содержать различные переменные, которые будут автоматически заменяться тем или иным текстом, в зависимости от создаваемого файла. Более подробно об этом стандарте можно узнать на странице www.stack.nl/~dimitri/doxygen/manual.html.
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.