drupal

Устройство файловой системы Drupal 6

Посмотрим, что мы увидим открыв корневую папку нашего уже работающего проекта сайта (для компактности изображения, некоторые системные папки и README-файлы удалены).

Начну с файлов внизу изображения.

Коротко о Drupal 6

Drupal 6 - это гибкая модульная система управления содержанием сайта, написанная на PHP. Для хранения данных применяются БД MySQL или Postgre SQL. Механизмы кеширования могут использовать базу данных (по умолчанию), файловую систему сайта или кеширование в оперативной памяти сервера (memcached и пр.) как по отдельности, так и в комбинации в зависимости от вида кеша. На Drupal 6 легко реализуется многоязычность (включая разные домены), мультисайтинг (как с общим кодом, так и с общей БД), а также общие пользователи для разных сайтов. Бэкэнд в ядре системы не отделен от фронтэнда, обработка запросов к сайту происходит одинаково, но формально путь http://example.com/admin является заглавной страницей административной части. Drupal поддерживает на одном функционале несколько разных дизайнов сайта или тем в местной терминологии. Практически всегда используется перезапись путей на сайте (так называемые "чистые URL") через модуль Apache mod_rewrite. Возможна работа с nginx, часто применяется связка обоих серверов. Возможна работа и на веб-серверах других типов.

Вводный курс Drupal 6 для разработчика

Потребовалось ввести пару человек в работу над моими проектами на Drupal 6, которые были до этого с ним незнакомы. С друпалом. Поэтому решил написать для специалистов уже хорошо знакомых с веб-разработкой и программированием на других CMS/CMF, но новичков в Drupal. Эта статья поможет вам войти в курс дела и узнать с чем вы столкнетесь на любом большом или не очень Drupal-сайте, если вам вдруг привалило счастье его поддерживать. А также узнать, как все это работает. А для меня это обобщение своего опыта, связанного с поддержкой и разработкой как своих, так и чужих проектов. Написанное, во многих моментах относится и к Drupal 7, но новшества и особенности семерки я затрагивать не буду. В следующий раз. :) Все ссылки даны на официальную англоязычную, документацию, она наиболее полна, либо на статьи некоторых разработчиков системы. А найти соответствующие топики на русском, вы сможете сами, вбив соответствующие ключевые слова в поиске. Часть документации Drupal, переведённую на русский язык, можно найти на сайте русскоязычной поддержки Drupal, который посещают более 100 тысяч посетителей ежемесячно.

Быстрый способ оптимизации параллельных загрузок на Друпал и nginx

Однажды разглядывая «водопадный» дисплей работы сети в Опере по мере того, как в него грузился один из моих проектов, я понял, что пора и на нем сделать оптимизацию того типа, который указан в заголовке статьи. При довольно быстром в пол-секунды получении кода страницы, полсотни вставленных в нее картинок секунд на пять оттягивали заветное событие DOM loaded, да и разница между DOM loaded и Page loaded тоже была того же порядка. Растём-с.

Спецификация HTTP 1.1 рекомендует браузерам запрашивать не более двух соединений на хост одновременно. Принята спецификация довольно давно, еще когда деревья были кустарниками, а интернет приходил в дом с телефонного коммутатора, и тогда это имело смысл. Сейчас интернет изрядно потолстел и большинство разработчиков браузеров эту рекомендацию уже давно не соблюдают. Но тем не менее типичные умолчания болтаются где-то в районе 4-х коннектов на хост, а простых пользователей интернета, что способны ускорить его себе, просто увеличив это значение до доступного максимума, я пока не встречал. Так что рекомендации увеличить количество параллельных загрузок, доступных для клиента на серверной стороне, если число объектов веб-страницы превышает десятки штук, уже давно прописались во всех руководствах по оптимизации сайтов. Достигается это довольно простым способом: часть внедряемого контента страниц размещается на других поддоменах вашего сайта и соответственно меняются ссылки в его страницах. Физически эти файлы или скрипты могут располагаться на том же сервере, что и сайт, более того, в той же самой корневой папке.

Вкладка Добавить в типах материалов

Попросили тут вкладочку сделать в типах материалов, чтобы можно было срану новые добавлять.

Люблю простые решения:

/**
 * Implementation of hook_menu().
 */

function mymodule_menu() {
// Вкладки Добавить в типах материалов.
// Получаем список типов
  $types = node_get_types();
// Перебираем его
  foreach($types as $type) {
// Формируем адрес страницы рядом с вкладками Управления и Отображения полей
    $items['admin/content/node-type/'. str_replace('_', '-', $type->type) .'/add'] = array(
// Заголовок с плейсхолдером для функции t()
      'title' => 'Add new @name',
// В параметры для t() добавляем имя типа
      'title arguments' => array('@name' => $type->name),
// Собственно, вкладка меню
      'type' => MENU_LOCAL_TASK,
// Вызываем системную функцию перенаправления на страницу
      'page callback' => 'drupal_goto',
// Формируем для drupal_goto() адрес страницы добавления материала
      'page arguments' => array('node/add/'. str_replace('_', '-', $type->type)),
// Права доступа на добавление контента этого типа
      'access arguments' => array('create '. $type->type .' content'),
// Размещаем вкладку после всех имеющихся
      'weight' => 20,
    );
  }
// PROFIT
  return $items;
}

Модуль клонирования типов страниц (нод, контента, содержимого) в Drupal 6

Модуль дополняет функционал CCK, связанный с экспортом настроек типов нод в пределах одного Drupal-проекта. Функционад импорта-экспорта в модуле Content copy довольно неудобен для конечного пользователя, которому хочется одной волшебной кнопки, вместо копирования кода из окошка в окошко. Для того и сделан этот модуль. Я весьма удивился, что не нашел подобного функционала на www.drupal.org. Плохо искал?

Модуль Content clone при включении добавляет ко всем типам содержимого (кроме заблокированных от удаления и от модификации системного имени) дополнительную вкладку Clone (Клонировать). Перейдя по ней, администратор сайта может указать новое уникальное машинное имя типа контента, новое уникальное человекочитаемое имя и опциональное описание. После подтверждения формы и валидации, новый тип ноды создаётся со всеми настройками, полями и группами полей CCK.

Думаю данный модуль будет полезен для разработчиков.

Скачать модуль

Хитрости hook_menu()

В Drupal всегда радует возможность лаконично и просто разработать иногда очень серьезные вещи.

Пусть в вашем модуле требуется отобразить на отдельной странице некий объект хранящийся в базе данных, например, Gorilla. Идентификатор объекта передается в строке запроса. Модуль, соответственно тоже называется gorilla.
А теперь, 10 строк очень универсального кода в студию:

function gorilla_menu() {
  $items = array();
  $items['gorilla/%gorilla'] = array(
    'title' => 'Gorilla item',
    'page callback' => 'theme',
    'access arguments' => array('view gorilla'),
    'page arguments' => array('gorilla_view', 1),
  );
  return $items;
}

Произойдет тут следующее...

CCK поле вида «Величина-Значение»

В процессе работы над одним проектом родился модуль CCK-поля с примерно таким выводом данных в ноду:

OpenLayers 2.x Documentation

The OpenLayers 2.x Documentation Book includes documentation of the module for end-users as well as the API provided for developers.

New users should take a look at Getting Started with OpenLayers to build their first map.

Please post bug reports, support requests, and feature  on the issue tracker instead of using the comment area in the documentation pages.

 

Документация по OpenLayers 2.x включает в себя, как справку для конечных пользователей, так и олписание API для разработчиков.

Начинающие пользователи могут сразу смотреть Быстрый старт с OpenLayers, чтобы сделать свою первую карту.

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

TAPIr - Dynamic Tables API

A baby tapir.A tapir is a funny animal that happens to be this project's mascot. TAPIr is an API developed for Drupal developers to allow the easy creation and configuration of dynamic tables. In fact, we've made it so dynamic, that even the name is flexible! It stands for Tables API, and you get to decide what the r means. Eye-wink (Our favorites include by Ryan, rocks, and renegades.)

Так случилось, что именно такое смешное животное, как тапир стало маскотом этого проекта. TAPIr - это интерфейс, предназначенный для разработки под Drupal и позволяющий создавать и конфигурировать динамические таблицы. Фактически, мы сделали его настолько динамическим, что даже его название изменяемо. Это сокращение от Tables API, но вам самим решать, что означает r на конце. Eye-wink Наиболее популярными расшифровками являются Ryan, rocks, и renegades.

The Tables API mimics the Forms API by building tables based on a Table ID. For now, the Table ID refers to the function used to build the table, though it's not impossible for TAPIr to define a hook like Drupal's hook_forms. The builder function operates on an $op variable to first build the fieldset and then grab the data for the rows for each field. The term fields refers to a column in the table. Fields will be configurable from a settings page for each table so the user can adjust the title of a column, its order in the table, and whether or not it should be shown when the table is rendered.

Синдикация материалов