Создаём тему для Drupal
Довольно подробное описание создания темы для Drupal в трёх частях.
Создаём тему для Drupal. Часть 1
Создаём тему для Drupal. Часть 2
Создаём тему для Drupal. Часть 3
Довольно подробное описание создания темы для Drupal в трёх частях.
Создаём тему для Drupal. Часть 1
Создаём тему для Drupal. Часть 2
Создаём тему для Drupal. Часть 3
UPD: Владимир Гарвардт указал на модуль Features, генерирующий подобный каркасный модуль автоматически.
CCK довольно удобен в работе, но не очень удобен в развёртывании: хоть и есть импорт-экспорт, но хочется всё-таки поставить один раз модуль и получить при его установке необходимые настройки. Конечно, можно отказаться от CCK и использовать node api, но во-первых потеряется довольно большое количество приятных возможностей (та же интеграция с Views), а во-вторых — использовать такой модуль параллельно с CCK будет проблематично. CCK захватывает стандартные hook_load(), hook_view() и другие.
К счастью, создать новый тип CCK программно при установке модуля не так сложно.
Читаем
Очередное обновление Drupal закрывает несколько дыр в безопасности и исправляет неплохой набор найденных ошибок.
Официальный анонс
Drupal 6.16
Drupal 5.22
Как только будет выпущена седьмая версия CMS, Drupal 5 перестанет поддерживаться, так что всем, кто его использует, рекомендуется задуматься о переходе на шестую версию.
Получить текущую отображаемую ноду в блоке Drupal довольно просто:
if(arg(0) == 'node' && is_numeric(arg(1))){
$node = node_load(arg(1));
// …
}

Анонс уже был сделан на хабре, но считаю, что ради такого события можно и повториться. Итак, вышел первый пилотный номер электронного журнала о Drupal. Первые блины обычно бывают комом, но в этот раз всё получилось очень и очень достойно.
Читаем
Drupal позволяет поработать со своим API из внешнего скрипта. Ну или почти внешнего.
Покажу на примере, как можно организовать импорт данных в Drupal.
Читаем
Достаточно полный чеклист по знаниям, необходимым для любого Drupal-разработчика, и ссылками на материалы для изучения.
Читаем
Чтобы при включенном для анонимных пользователей кэшировании не включать в кеш определённый URL, можно воспользоваться следующим трюком:
function mymodule_init(){
$no_cache_pages = array(
'cart/add*',
'cart/remove*',
'cart/list*',
);
if (drupal_match_path($_GET['q'], implode("\n", $no_cache_pages))){
$GLOBALS['conf']['cache'] = false;
}
}
Абсолютно необходимо, например, при реализации анонимной корзины для магазина или создании анонимного голосования.
Замечательные статьи, рассказывающие об особенностях WordPress тем, кто хорошо знает Drupal
Затронуты:
- Админка.
- Шаблоны и переменные.
- Условные теги.
- Виджеты.
- Локализация.
- Шорткоды.
- Плагины (модули).
- Крон.
Часть 1
Часть 2
Довольно типичная для Drupal задача, которая частенько ставит новичков в тупик.
// Пишем SQL без LIMIT. Не думаем о постраничной разбивке вообще.
$sql = "select title, type from {node}";
// Заголовок таблицы
$header = array(
t('Заголовок'),
t('Тип')
);
// pager_query добавит в SQL LIMIT без нашего непосредственного участия
$result = pager_query($sql, 10);
// собираем данные для таблицы из результата запроса
$rows = array();
while($row = db_fetch_object($result)){
$rows[] = array(
$row->title,
$row->type
);
}
// выводим таблицу
echo theme('table', $header, $rows);
// выводим постраничную навигацию
echo theme('pager');