Note: this article is no longer maintained on this site.I got more than a little tired of having to format code using no-plugin WordPress, so I set up my own. For updates & submitting comments, please check www.active6.com/blog
PEAR is a framework and distribution system for reusable PHP components. The code in PEAR is partitioned in “packages”. Each package is a separate project with its own development team, version number, release cycle, documentation and a defined relation to other packages (including dependencies). Packages are distributed as gzipped tar files with a description file inside, and installed on your local system using the PEAR installer.PEAR contains PHP classes that are perfect for serializing data to be passed to a Flex application. Unfortunately, there is currently no package that would allow automatic installation for a Flex/PHP developer that wants to use the PEAR XML Serializer functionality.
In this article, I am going to describe how to do a local tweak and installation of the PEAR XML classes on a server that does not have PEAR pre-installed. Even if your server has PEAR installed, this approach will work.
Getting the Necessary PEAR Files
The PEAR files you will need for Flex are:
- PEAR.php
- XML_Serializer.php & XML_Unserializer.php
- XML_Util.php
You can obtain these from the PEAR Package listings, but I have attached the modified files for you here.
Modifying the Include Statements
If you do not wish to reproduce the PEAR Package folder structure, you must edit the XML_Serializer.php and XML_Unserializer.php files for the path of the PEAR library:
/**
* uses PEAR error management
*/
require_once ‘PEAR.php’;
/**
* uses XML_Util to create XML tags
*/
require_once ‘XML_Util.php’;
Introducing the Serializer Class
The XML_Serializer.php contains a class definition that allows for a wide range of XML files to be generated from PHP variables, arrays and objects. The generation mode is controlled by passing an array of parameters that is passed to the constructor of the class.
The most important parameters you should include are the overall container tag of the XML data and the item tag name.
Application Example
Let’s take an example. I’ve been working on something like this for the MySpace Page of a record label. Let’s say you want to display a list of your MySpace friends in your Flex application. You have a MySQL table with all your friends data, such as:
- Friend Number
- Friend Name
- Image
- etc
Getting the Friends data From MySQL
We would load this data into an array of objects in a PHP script called getfriends.php using the following code:
//Connect to MySQL, assuming we have already
//defined the Database Login Parameters as constants
$dbLink = mysql_pconnect(DB_HOST, DB_USER, DB_PW);
//Create an array to hold the friends query result
$friendsList = array();
//Execute the MySQL Query and process into an array
$sql = “SELECT * FROM friends”;
$result = mysql_query($sql, $dbLink);
if ($result)
{
while ($row = mysql_fetch_object($result))
{
array_push($friendsList, $row);
}
mysql_free_result($result);
}
Creating the Flex Request and Tile Display
We would create a HTTP Request tag in our Flex application like this:
<mx:HTTPService id=”friendslist”
url=”http://localhost/MySpace/php/getfriends.php”
useProxy=”false”
method=”GET”
result=”friendHandler(event)”>
</mx:HTTPService>
And create a TileList to display the friends data:
<mx:Panel id=”FriendsListPanel” title=”MySpace Friends”>
<mx:TileList direction=”vertical”
columnCount=”1″
rowHeight=”120″
dataProvider=”{friendslist.lastResult.friends.friend}”
id=”FriendsTileList”
itemRenderer=”FriendListItem” />
</mx:Panel>
Where it comes together: the dataProvider
As you can see, the TitleList uses the following dataProvider:
friendslist.lastResult.friends.friend
This means the expected XML format would be something like:
<friends>
<friend>
<id>51930230</id>
<userid>Derrick May</userid>
<fullid>derrickmay</fullid>
<fullname>Derrick May</fullname>
<styles>Techno / House / Club</styles>
<friendcount>14536</friendcount>
<visitcount>64247</visitcount>
<lastlogin>2006-10-11</lastlogin>
<image>http://myspace-728.vo.llnwd.net/01007/82/77/1007837728_s.jpg</image>
<city>DETROIT</city>
<state>Michigan</state>
<country>US</country>
<joined>2006-01-27</joined>
</friend>
<friend>
<id>63740153</id>
<userid>Plastikman</userid>
<fullid>plastikman</fullid>
<fullname>Plastikman</fullname>
<styles>Techno / Electronica / Ambient</styles>
<friend>1</friend>
<friendcount>12955</friendcount>
<visitcount>52482</visitcount>
<lastlogin>2006-10-11</lastlogin>
<image>http://myspace-786.vo.llnwd.net/00577/68/77/577847786_s.jpg</image>
<city>Windsor</city>
<state>Ontario</state>
<country>Canada</country>
<joined>2006-03-18</joined>
</friend>
</friends>
Getting the PEAR XML Serializer to generate the expected XML
In order to have the XML class generate code from our getfriends.php result array we initialize a Serializer with the following options and have it generate the XML based on the $friendsList array:
$options = array(
XML_SERIALIZER_OPTION_XML_DECL_ENABLED => false,
XML_SERIALIZER_OPTION_DOCTYPE_ENABLED => false,
XML_SERIALIZER_OPTION_INDENT => ” “,
XML_SERIALIZER_OPTION_LINEBREAKS => “\n”,
XML_SERIALIZER_OPTION_TYPEHINTS => false,
XML_SERIALIZER_OPTION_XML_ENCODING => “UTF-8″,
XML_SERIALIZER_OPTION_ROOT_NAME => “friends”,
XML_SERIALIZER_OPTION_DEFAULT_TAG => “friend”
);
//Instatiate the serializer object
$serializer = new XML_Serializer($options);
$serializer->setErrorHandling(PEAR_ERROR_DIE);
//Serialze the data
$result = $serializer->serialize($array, ‘friend’);
$xml = $serializer->getSerializedData();
//Return the xml to the Flex application
echo( $xml );
And that’s all there’s to it.
December 12, 2006 at 6:21 pm
Modified PEAR files are missing; please update the link. Thanks.
March 25, 2007 at 5:18 am
Can you please describe the friends table? I would like an efficient way to store friends.
It appears that the table above has, and id, userid, fullid … joined, but how would you create a table that has users with the id of 2 that has 4 friends.
Would the rows be user_id and friend_id ?
And the table would look like this:
|user_id | friend_id |
—————————
1 2
1 3
1 4
2 3
2 4
2 5
6 1
6 3
Then the select would be:
SELECT friend_id, user_id from friends
WHERE user_id = 2 OR friend_id = 2;
I would want the answer to be: User # 2’s friends are 1, 3, 4, and 5.
Maybe I need to add “DISTINCT” to the select so I wont get duplicate ids?
I think that would work, BUT is that how sites like myspace do it?
Thanks
March 25, 2007 at 5:22 am
oh, that example above wont work because the user_id will have more that one instance and that should be the primary key. I don’t know how to create the proper table.
March 25, 2007 at 5:47 am
I figured it out.
CREATE TABLE `friends` (
`pri_key` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default ‘0′,
`friend_id` int(11) NOT NULL default ‘0′,
`updated` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`pri_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
SELECT friend_id, user_id from friends WHERE user_id = 86 OR friend_id = 86;
+———–+———+
| friend_id | user_id |
+———–+———+
| 53 | 86 |
| 17 | 86 |
| 58 | 86 |
| 86 | 90 |
+———–+———+
August 15, 2007 at 6:54 am
Wizards of the Coast
Useful, thank you!
December 2, 2007 at 1:17 am
Kevin,
Thanks for this. I was wondering if you’d be interested in doing some consulting for us – we are working on porting our app over to ec2.
Please contact me via email (wscholar@getabby.com) or phone (412-855-8765)
Thanks,
Wayne
February 5, 2008 at 7:01 pm
naked Paris hilton sex tapes
Recently leaked footage of the new Paris Hilton sex tape
September 1, 2008 at 4:15 pm
myspace trains…
Your MySpace page is not one of the TV channels. I know how to use YouTube. I have not come here to watch videos. I want to know who you are and what you do, so that I will know whether to (and how to) interact with you. If you represent more than one …
October 3, 2008 at 3:06 pm
[...] heavy traffic. Also would like to note that there is a Pear XML Serializer class as pointed out in this post that does the same conversion but with the peace of mind of being an actual part of the library. [...]
October 26, 2008 at 1:19 pm
This is really cool… Are you tuned in to my lucid spur A joke for you peoples! What’s happening when you hear “woof…splat…meow…splat?” It’s raining cats and dogs.
April 15, 2009 at 3:11 pm
After reading the article, I feel that I really need more info. Could you share some more resources please?
June 10, 2009 at 2:09 am
[...] heavy traffic. Also would like to note that there is a Pear XML Serializer class as pointed out in this post that does the same conversion but with the peace of mind of being an actual part of the [...]
September 4, 2009 at 3:42 am
[...] Also would like to note that there is a Pear XML Serializer class as pointed out in this post that does the same conversion but with the peace of mind of being [...]