Highchart

这个周末一直在寻找好用的 PHP Chart,不过基本是好用的贵,免费的连 document 都不全,可能是付费才能有 API Document 提供吧。

我想了下,对于 PHP Chart,基本要求是:

  1. 可以解析 Json;
  2. 可以 interactive,不只是一张图片,点击上面的点,可以显示数值;
  3. 可以双纵轴;
  4. customization 尽量多,API 文档清晰,例子多。
  5. 有动画效果,装逼用。
  6. 在手机和平板上依旧正常显示,这非常重要。

终于功夫不负有心人,搜到了一个不是基于 PHP 的叫 HighChart 的 JavaScript 库,打开官网 Demo,发现眼前一亮,至少图表很好看,也有动画,免费版几乎没有限制,只是在右下角会有一个 HighChart 的 link,我觉得完全不碍事,API 文档很全,基本符合我的要求。

既然没有 PHP 的部分,我就自己写呗。

刚开始创建了一个 PhpChartController,后来发现其实这东西可能不应该叫 Controller,应该就是个 Model,直接放在 App 下面。

调用实例,首先是 Controller 部分:

然后是 Views 部分:

突然意识到,这就是一个 MVC 的应用,之前一直不知道 Model 怎么用,现在居然自己就不知不觉地用上了,感觉真的很棒。

对于 PHP 输出 Json,是研究了很久,感觉这东西很玄乎,我还没有完全摸透。其中有个问题困惑了我很久,由于 PHP 是弱类型语言,JavaScript 是强类型语言,在数组中写入数值数据的时候,输出的 Json 默认会有引号,此时这个数值会被作为 string 也就是字符串处理,导致作图失败。那么怎么去掉这个引号呢,搜索了很久,原来在写入数组的时候,是可以声明元素类型的:

这样子输出的 Json 就不会有印好了,就是一个数字。

还有就是如果要给 Json 里添加新的元素,做法是 1)Json_decode,2)Add in element,3)Json_encode。

实际操作时,发现还是报错,感觉是因为 decode 是以 encode 为基础,而我实际上并没有 encode 过,所以真正的操作应该是 4 步,先 encode,然后才是后面的 3 步进行循环。

没有 encode 过的 Json,在 Chrome 上装一个 Json Formatter 插件,就可以看到很优美的 Json 排版。然而,如果要把 Json 传入 JavaScript 中进行输出,就必须 encode,否则会出现 array to string conversion 的错误提示。

在 laravel 中输出 encode 的 Json,跟直接输出普通变量不一样,要这么写:

直接 echo 是 e 不出来的,我也不知道为什么,不过能用就好。

HighChart 不好的地方是 API 文档中举例太少,很多参数我都不知道具体应该怎么用,导致现在有些图还是半残废状态,不过实际使用中应该不会遇到太多的奇葩 case。

我也想了下,我们公司的 BI 能不能直接接入到网站中呢?感觉不太行得通,BI Platform 必须是创建 BI-》导入数据-》输出 BI,而 BI 的创建和 BI 的配置都必须在 BI Platform 上进行,即便有 API 可以对外提供,实现参数的修改,也是必须先在 BI Platform 上先把模板和参数建好,也就是,整个方向是反的,我也不知道怎么表达比较好,总之是反的。

以上是周末折腾的心得体会。

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.