Предлагаемый PHP класс позволяет собирать и выводить Ваши данные в виде диаграмм - "столбиков" не используя графические библиотеки типа GD, что позволяет уменьшить нагрузку на сервер и размещать свои страницы у провайдеров, не обеспечивающих поддержку gd.
Ниже дается инструкция по встраиванию модуля в Ваш сайт и его использованию.
var $bt_total = 'Totals'; // localize here or include into separate file var $imgpath = '/img/'; // place all 'diagram' images in this "folder"
Выводить диаграммы можно как на основе заранее подготовленного двумерного массива данных, (предварительно вызвав необходимые SQL-запросы к своим таблицам или другим способом), так и передавая в класс CAsBarDiagram текст SQL запросов для того, чтобы данные были собраны силами самого класса.
$graph = new CAsBarDiagram; $graph->bwidth = 15; // ширина одного "столбика" в пикс. $graph->showdigits = 0; // отключить вывод таблицы с числовыми значениями (по умолч. включено) $graph->bt_total = 'Итого'; // текст для заголовка итоговой колонки $graph->precision = 0; // сколько знаков после дес.точки выводить в таблице числовых значений $graph->showtotals = 0; // если не нужно выводить колонку итогов
$legend_x = array('розничные продажи','оптовые продажи', 'продажи через интернет'); $legend_y = array( array('01','январь'),array('02','февраль'),array('03,','март'), array('04','апрель'),array('05','май') );
$data = array( array(200,300,120), array(450,500,100), array(650,200,300), array(380,200,90), array(750,340,200)); $graph->DiagramBar($legend_x, $legend_y, $data, 'Результаты продаж');
$graph->InitData($legend_x, $legend_y); // внутренний массив заполняется нулями $graph->GatherData($sql_query, $legend_x, $legend_y); // ... можно вызвать многократно, наполняя массив постепенно $graph->DiagramBar($legend_x, $legend_y, 0, $data_title);При работе по второму методу данные, полученные в SQL-запросе, заносятся во внутренний массив класса, и для их отображения вызывается метод DiagramBar() с пустым значением или скалярной переменной вместо массива (3-ий параметр метода).
InitData($legend_x, $legend_y) - выполняет очистку внутреннего массива накопленных значений для вывода. Необходима, если нужно многократно выводить диаграммы, пользуясь при этом одним и тем же экземпляром класса CAsBarDiagram. Размерности массива становится равными длинам переданных массивов "легенд" $legend_x, $legend_y
GatherData($sqltext, $legend_x, $legend_y [, $position_y]) - заполняет внутренний массив данными из
переданного SQL-запроса. При наличии необходимых таблиц можно получить все данные
в одном агрегирующем запросе.
Для этого первое поле полученного курсора должно соответствовать значениям в legend_x,
второе - $legend_y, а третье - быть искомым числовым значением, заносимым в массив.
Пример агрегирующего запроса (MySQL)
SELECT MONTH(sale_date) AS mnt, product, SUM(sales_val) FROM sales WHERE YEAR(sale_date)=2005 GROUP BY mnt,productЕсли нужно с помощью запроса заполнить только один "столбец" массива, (возвращаемый запросом курсор имеет два поля - ключевое значение по legend_x и искомое числовое значение), то в четвертом параметре ($position_y) необходимо указать номер заполняемого столбца данных (начиная с 0). В случае, если в курсоре, возвращаемом запросом, три и более поля, параметр $position_y игнорируется.
DiagramBar($legend_x, $legend_y, [$data|0, [$data_title]]) -
отображение диаграммы. Если в третьем параметре передан массив, его значения используются для
отображения. Если передано любое скалярное значение, используются данные, накопленные
с помощью предыдущих вызовов метода GatherData();
$data - двумерный массив данных. $data[x][y] - значение "столбика № "y"
внутри выводимой колонки X.
$showdigits - включение/отключение вывода "цифровой" части диаграммы (таблицы с числовым представлением данных, использованных для отрисовки столбиков)
$ShowPercents - Назначив любое непустое значение элементам этого массива, вы включите
формирование строк "процентного отношения". Эти строки будут содержать отношение значений
в строке N-1 к строке N, умноженное на 100.
В этой строке (выводимой в "цифровой" части) будут выведены отношения значений ячеек,
выраженные в процентах - $data[n-1]/$data[n]. Эта функция была введена, когда
понадобилось отображать процент выполнения плана, и при этом одна строка данных содержит
значения фактических показателей, а следующая - соответствующие плановые данные.
Как использовать :
Допустим, есть строка данных "факта", имеющая заголовок "Факт 2005" в соответствующей строке заголовков $legend_y,
и строка с планом, (заголовок в $legend_y - "План 2005").
Чтобы в цифровой области после строки плана были выведены показатели выполнения в процентах,
перед вызовом метода DiagramBar() сделаем присвоение:
$graph->ShowPercents['План 2005'] = '2005/Выполнено, %';Если присвоенная строка состоит из одного символа (1 или '*'), заголовок для строки процентов формируется из заголовков соответствующих строк данных, в противном случае ее содержимое и будет использовано в качестве заголовка (как в нашем примере)
$graph->ShowPercents[План 2004'] = 'Выполнение плана 2004'; $graph->ShowPercents[План 2005'] = 'Выполнение плана 2005'; // Будут выведены две строки с процентными показателями! $graph->DiagramBar($legend_x, $legend_y, 0, $data_title);Если массив ShowPercents непустой к моенту вызова DiagramBar(), цифровая область будет выведена независимо от значения переменной showdigits. Если переменной $graph->ShowPercents задано непустое значение, "цифровая" часть диаграммы будет выводиться независимо от значения в переменной $graph->showdigits.
$drawempty_x, $drawempty_y - переменные задают режим отрисовки "пустых" колонок (с нулевыми значениями) и строк (в цифровой части) соответственно. По умолчанию равны 1, т.е. отображаются все колонки, даже с одними нулевыми значениями, и все строки. Переменные нужно установить до вызова DiagramBar(). Для установки режима "скрывать пустые колонки,строки" можно воспользоваться методами HideEmptyXY($Hide=1),HideEmptyX($Hide=1),HideEmptyY($Hide=1)
$grarh->drawempty_y = 0; $graph->HideEmptyY(); // оба оператора имеют одинаковый эффект
Следующие три переменные класса служат для превращения заголовков "легенды" в HTML-ссылки.
$grarh = new CAsBarDiagram; $graph->legendx_url = 'detailedinfo.php?info_id={ID}';После задания этой переменной все наименования столбцов в выведенной диаграмме будут <A HREF>-ссылками
$graph->legendx_onClick = "window.open('details.php?id={ID}', '_blank','height=300,width=400');";
require_once('as-diagrams.php'); // включить в тело своего скрипта ! //... $data_title = 'Test bar diagram'; // title for the diagram // sample data array $data = array(); $data[] = array(900, 1300,1600); $data[] = array(1200,1800,2500); $data[] = array(1400,2000,2800); $data[] = array(1900,2900,3900); $data[] = array(2500,3500,4500); $legend_x = array('Yanuary','February','March','April','May'); $legend_y = array('pens','pensils','staplers'); $graph = new CAsBarDiagram; $graph->bwidth = 10; // set one bar width, pixels $graph->bt_total = 'Summary'; // 'totals' column title, if other than 'Totals' // $graph->showtotals = 0; // uncomment it if You don't need 'totals' column $graph->precision = 0; // decimal precision // call drawing function $graph->DiagramBar($legend_x, $legend_y, $data, $data_title);
"var $autoshrink = 1024;"Либо задайте здесь свое значение максимальной ширины "экрана".