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

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

Основными требованиями к библиотеке для построения графиков были: (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();
  }

Добавить комментарий


XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">