Флешовые блинчики. Code Igniter + Open Flash Chart.

Флешовые блинчики. Code Igniter + Open Flash Chart

Сижу и смотрю как моргает курсор на пустом экране и не придумаю как начать пост… «Понадобилось мне…», или: «в нашем супер-пупер проекте потребовалось…», и прочая дребедень — скучно. А смотрение на курсор склоняет к философским размышлениям. Поэтому первый абзац пропускаем и идем сразу к делу.

Основными требованиями к библиотеке для построения графиков были: (1) умение рисовать круговые диаграммы, (2) умение рисовать красивые диаграммы, и (3) опенсорсность, прости Господи. Нашлось куча всяческих библиотек. Все они умеют рисовать круговые диаграммы, но остановился на одной. О ней и речь.

Open Flash Chart 2. Как видно из названия графики у нас рисуются во флэше. А данные для их построения передаются в формате JSON. И хотя этого из названия не видно, мне библиотечка понравилась, тем более, что для тут же нашелся способ быстро встроить ее в CI.

Налюбовавшись демками на сайте разработчика я взялся за дело и в общем-то довольно быстро соорудил то, что нужно было, но…

То ли из-за расхождения в версиях, то ли из-за чего-то еще возникли проблемы с подписями к секторам моей круговой диаграммы. Пришлось лезть в исходники. Безрезультатно… Решение в исходниках не нашлось.

Пришлось думать… Система работает следующим образом: есть флэшка, которая умеет рисовать всяческие графики и диаграммы, ей только данные подавай. Данные подаются в формате JSON. Данные готовит скриптик на php. Но вот незадача. В демках все работает, а у меня — нет.

Таким образом, имеется какая-то нестыковка между флешем и php-скриптом. Поэтому, тупо берем пример из демки (точнее данные, которые передаются флэшу) и подставляем его в наш скрипт. Получается что-то вроде: echo '{ "elements": [ { "type": "pie", "alpha": 0.6, "start-angle": 35, "animate": [ { "type": "fade" } ], "tip": "#val# of #total#

#percent# of 100%", "colours": [ "#1C9E05", "#FF368D" ], "values": [ 2, 3, 4, { "value": 6.5, "label": "hello (6.5)" } ] } ], "title": { "text": "Pork Pie, Mmmmm" }, "x_axis": null }';

Тупо смотрим на правильно отрисованную диаграмму после чего распечатываем свой JSON и начинаем сверять.

И вот она нестыковка: у авторов: «value»: 6.5, «label»: «hello (6.5)»; у меня: «value»: 6.5, «text»: «hello (6.5)».

Та-а-ак. Что такое JSON? Некий JavaScript Object Notation. В копаных ранее исходниках присутствовал файлик JSON. php в котом имеется класс, умеющий превращать объект в эту самую нотацию. Ну а дальше все просто. Рисовал я круговую диаграмму, поэтому открыл сразу же OFC_Charts_Pie. php и тут же нашлось несоответствие.

Class OFC_Charts_Pie_Value { function OFC_Charts_Pie_Value( $value, $text ) {

$this->value = $value;

$this->text = $text; // <<<<<<<<< Смотреть сюда

}

}

Собственно решение простое: меняем $this->text на $this->label и все работает.

Резюме (это метод контроллера, возвращающего данные для диаграммы): public function getPieData() {

$this->load->library('Ofc2factory', NULL, 'ofc2');

// start creating objects

$title = $this->ofc2->create('OFC_Elements_Title', array("Общая статистика"));

$pie = $this->ofc2->create('OFC_Charts_Pie');

$stat = $this->documentList->getUsageStatistic();

$pie->values = array();

$pie->colours = array(); foreach ($stat as $key => $item) {

$pie->values[] = new OFC_Charts_Pie_Value($item, $key);

}

$pie->tip = '#label#<br>#val# из #total#<br>#percent#';

$pie->radius = 100;

$chart = $this->ofc2->create('OFC_Chart');

$chart->set_title($title);

$chart->add_element($pie);

$chart->set_bg_colour('#FFFFFF'); echo $chart->toString();


Карта сайта


Информационный сайт Webavtocat.ru