ChartDirector Ver 3.1 (PHP Edition Edition)

Using Data Sources with ChartDirector


The ChartDirector API is designed to accept data values as array variables. This is the most flexible way of accepting data. This flexibility permits ChartDirector to accept data from all kinds of data sources. For example, ChartDirector can accept data from a database, a text file, XML, or as HTTP query parameters. All is needed is to read the data into array variables, and pass them to ChartDirector.

In this section

Using ChartDirector with Database in Web Pages
Describes the architectural options of where to perform the database query (in the HTML script or ChartDirector script), where to generate the chart, and how to pass data in between.

Database Sample Code Overview
Background information for running the database sample codes in this documentation.

Direct Database Access
Complete example demonstrating how to perform database queries and create charts in the same script in a web environment.

Pass Data as HTTP Query Parameters
Complete example demonstrating how to perform database queries in the containing HTML page, and pass data to the ChartDirector scripts as HTTP query parameters.

Database Clickable Charts
This is a link to an example in the Clickable Charts section. This example demonstrates creating clickable charts with data coming from a database.


Cross2Symbol9

Arguments

ArgumentDefaultDescription
symbol(Mandatory)One of the pre-defined symbol constants (see above) to specify the symbol to use.
size5The width and height of the symbol in pixels.
fillColor-1The color used to fill the symbol. -1 means the color of the data set will be used.
edgeColor-1The edge color used to draw the edge of the symbol. -1 means the edge color of the data set will be used.
lineWidth1The line width used for drawing the symbols.

Return Value

None


neLayer(); #Set the default line width to 3 pixels $layer->setLineWidth(3); #Add the data sets to the line layer $layer->addDataSet($data0, -1, "Enterprise"); $layer->addDataSet($data1, -1, "Consumer"); #Create the image and save it in a temporary location $chart1URL = $c->makeSession("chart1"); #Create an image map for the chart $chartImageMap = $c->getHTMLImageMap("xystub.php", "", "title='{dataSetName} @ {xLabel} = USD {value|0} millions'"); #Create an image map for the legend box $legendImageMap = $legendBox->getHTMLImageMap("javascript:doSomething();", " ", "title='This legend key is clickable!'"); #Obtain the image map coordinates for the title, mark, and copyright message. #These will be used to define the image map inline. (See HTML code below.) $titleCoor = $title->getImageCoor(); $markCoor = $mark->getImageCoor(); $copyRightCoor = $copyRight->getImageCoor(); ?>

Custom Clickable Objects

"> View Source Code

In the following chart, the lines, legend keys, title, copyright, and the "Merge with Star Tech" text are all clickable!

href='javascript:doSomething();' title='The title is clickable!'> href='javascript:doSomething();' title='The "Merge with Star Tech" text is clickable!'> href='javascript:doSomething();' title='The copyright text is clickable!'>
In the above code, the chart is created and saved in a session variable using BaseChart.makeSession. An <IMG> tag is used to retrieve the chart with "myimage.php?<?php echo $chart1URL?>" as the URL. "myimage.php" is a simple utility that comes with ChartDirector for retrieving images from session variables.

The image map in this example consists of multiple parts. The part for the line chart is produced using BaseChart.getHTMLImageMap with "xystub.php" as the handler:

$chartImageMap = $c->getHTMLImageMap("xystub.php", "", "title='{dataSetName} @ {xLabel} = USD {value|0} millions'");

For demo purpose, "xystub.php" simply displays information on what is clicked. It's source code is as follows.

[File: phpdemo/xystub.php".]
<html> <body> <h1>Simple Clickable XY Chart Handler</h1> <p><a href="viewsource.php?file=<?php echo $HTTP_SERVER_VARS["SCRIPT_NAME"]?>"> View Source Code </a></p> <p><b>You have clicked on the following chart element :</b></p> <ul> <li>Data Set : <?php echo $HTTP_GET_VARS["dataSetName"]?></li> <li>X Position : <?php echo $HTTP_GET_VARS["x"]?></li> <li>X Label : <?php echo $HTTP_GET_VARS["xLabel"]?></li> <li>Data Value : <?php echo $HTTP_GET_VARS["value"]?></li> </ul> </body> </html>

The image map for the legend keys is produced using LegendBox.getHTMLImageMap. In this example, a client side Javascript will be executed when the user clicks on the legend key.

$legendImageMap = $legendBox->getHTMLImageMap("javascript:doSomething();", " ", "title='This legend key is clickable!'");

As shown above, the "javascript:doSomething();" is used as the handler. ChartDirector will put the handler as "href" attributes in the <AREA> tags of the image map. The browser will interpret it as a client side Javascript statement to be executed when the <AREA> tag is clicked.

Note that the second argument to LegendBox.getHTMLImageMap is set to a space character. This argument specifies the HTTP query parameters get passed to the handler. If this argument is an empty string, default query parameters will be used. In this example, since the handler is a client side Javascript, no HTTP query parameter is necessary. So a space character is used.

The client side Javascript executed in this example is a function called "doSomething();". In this example, this just pops up a message.

<SCRIPT> function doSomething() { alert("This is suppose to do something meaningful, but for demo " + "purposes, we just pop up this message box to prove that " + "the object can response to mouse clicks."); } </SCRIPT>

Most text messages in ChartDirector are represented as TextBox objects, and their image map coordinates can be retrieved using Box.getImageCoor. This allows <AREA> tags for TextBox objects be created easily.

(For TextBox, there is no "getHTMLImageMap" method. It is because each TextBox object only has one hot spot. It is more convenient to enter the handler URL and tool tip text directly into the <AREA> tag, rather than generating them using getHTMLImageMap.)

In this example, the image map coordinates of the chart title, vertical mark label, and the copyright message are obtained using Box.getImageCoor:

$titleCoor = $title->getImageCoor(); $markCoor = $mark->getImageCoor(); $copyRightCoor = $copyRight->getImageCoor();

The image map coordinates are then used to make <AREA> tags as follows:

<area <?php echo $titleCoor?> href='javascript:doSomething();' title='The title is clickable!'> <area <?php echo $markCoor?> href='javascript:doSomething();' title='The "Merge with Star Tech" text is clickable!'> <area <?php echo $copyRightCoor?> href='javascript:doSomething();' title='The copyright text is clickable!'>


01', '959', '1018', '1102');