Генерация картинок на Drupal-сайте

19 Июн 2008
Опубликовано VladSavitsky

Задача

Написать PHP-скрипт, который генерирует картинку.

Решение

Варианты

  • Отдельный файл
  • Модуль Drupal

Отдельный файл

Создадим в корне сайта файл с названием image.php. Попробуем вывести картинку с числом материалов размещенных на нашем сайте.

Код очень простой:

<?php
/*
Подключаем Drupal и загружаем его.
После вызова функции drupal_bootstrap доступны все функции
и системные переменные Drupal.
*/
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

//Отправляем браузеру заголовок типа контента: изображение в формате PNG.
  drupal_set_header("Content-type: image/png");
//Создаем изображение
  $image = imagecreate(88, 31);
//Определяем цвета фона и текста.
  $background_color = imagecolorallocate($image, 2, 122, 198);
  $text_color = imagecolorallocate($image, 255, 255, 255);
//Заливаем фон изображения.
  imagefill($image, 0, 0, $background_color);
//Запрашиваем из таблицы нод количество материалов сайта.
  $query = "SELECT COUNT(`nid`) FROM `{node}`";
  $result = db_result(db_query ($query));
//Выводим результат в картинку
  imagestring($image, 5, 5, 7, $result , $text_color);
//Отдаем картинку в браузер.
  imagepng($image);
//Освобождаем ресурсы в оперативной памяти сервера.
  imagedestroy($image);

Модуль Drupal

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

function testimagepng_menu() {
 $items['testimage.png'] = array(
    'type' => MENU_CALLBACK,
    'page callback' => 'testimagepng_image',
    'access arguments' => array('access content'), );
 return $items;
}

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

function testimagepng_image() {
  drupal_set_header("Content-type: image/png");
  $image = imagecreate(88, 31);
  $background_color = imagecolorallocate($image, 2, 122, 198);
  $text_color = imagecolorallocate($image, 255, 255, 255);
  imagefill($image, 0, 0, $background_color);
  $query = "SELECT COUNT(`nid`) FROM `{node}`";
  $result = db_result(db_query ($query));
  imagestring($image, 5, 5, 7, $result , $text_color);
  imagepng($image);
  imagedestroy($image);
//Прерываем выполнение скриптов, чтобы Drupal не посылал в конце картинки своего вывода.
  exit();
}

Достоинством этого метода генерации картинок состоит в том, что в HTML она вставляется при помощи кода, который ничем не отличается от кода для вставки обычного PNG-изображения в виде файла:

<img src="http://mysite.ru/testimage.png">

Картинка выглядит как статичный файл, но генерировать ее вы можете каким угодно способом внутри функции testimagepng_image().

Использованные материалы

Авторы решений:
Версия Drupal:
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>