-
Simple Cloud API
A new initiative called Simple Cloud API aims to give PHP developers easier access to cloud technologies. The project will produce a new Zend_Cloud component for the Zend Framework.
From the FAQ:
The Simple Cloud API is an open source project that makes it easier for developers to use cloud application services by abstracting insignificant API differences. One of the design goals of the project is to encourage innovation. To this end, the Simple Cloud API can be used for common operations while users can easily drop down to vendor libraries to access value-add features.
-
Showing related articles in a WordPress blog
A few days ago I made a small change to the site. On pages showing a single article, the sidebar now shows a list of related articles on the site. By exposing these articles I hope visitors will find other interesting stuff to explore on this site.
The WordPress plugins to add related articles I found seemed a bit to complex to me, so I was glad I found some PHP code to do the same. This code looks for other articles with the same tags as the displayed article. I changed it a bit into a separate part that retrieves the articles and a part to display them.
The only thing I need to do now is to tag all the older articles, since I only started tagging recently.
-
Don’t forget __isset() with overloaded setters and getters
This post is mostly a marker for me to find the solution for this problem in the future. What problem? Well, a call using
empty()to test a class field always returned true even if the field wasn’t empty.The reason for this behavior is that the class overloads
__set()and__get()to do some extra checking on the fields. But overloading these functions also effectsempty(). To makeempty()behave normally__isset()must also be overloaded to test the used fields.And when implementing
__isset()think about__unset(), maybe you need to overload it as well.The PHP Manual contains an example of overloading these magic members.
-
PHP tip: omit ?> from PHP only files
Great tip from the Zend programmer’s Reference Guide:
For files that contain only PHP code, the closing tag (”?>”) is never permitted.
.This is useful as it prevents whitespace after the closing
?>from being accidentally added to the output. I always check PHP files for whitespace manually, but this technique solves that problem automatically. Great! -
MySQL STRICT_TRANS_TABLES mode and truncated text values
I just upgraded Apache, PHP and MySQL to their current versions on my development system. After that a unit test of one of my PHP classes failed on inserting a row in a MySQL table. The test inserts text with a greater length than the maximum column length of a
VARCHARcolumn.This test fails because the new server runs with
STRICT_TRANS_TABLESmode. It means that a inserted value must be equal to the stored value or the statement fails. Without the mode setting the inserted value is truncated to the column’s maximum length. -
Archives for a category WordPress plugin
For the new version of this website I wanted to show a list of monthly archives, limited to posts of a specific category. The software used to run this website is WordPress but the
wp_get_archives()function, to get a list of archives, does not have the ability to filter on category. So I created the ‘Archives for a category’ plugin that enhances this function to show archive links for a specific category.Installation
- Download the plugin zip file and unzip the file in a temporary directory.
- Put the
kwebble_archives_by_cat.phpfile in your WordPress plugin directory:
<your wordpress dir>/wp-content/plugins - Activate the plugin ‘Archives for a category’ on the Plugin Management page of the WordPress administration panel.
- Optionally disable the canonical URLs from the menu Settings | Kwebble.
A WordPress feature added in version 2.3, called canonical URLs, redirects browsers on certain URLs. This also happens with the URLs for the archives with a cat parameter. This causes the archive pages to contain posts which do not belong to the selected period.To solve this problem the plugin can disable canonical URLs. This uses the technique used in the Disable Canonical URL Redirection plugin Mark Jaquith made. So if you are already using that plugin you don’t need to change the setting for this plugin.
To disable canonical URLs go to the administration section of your blog, choose Settings and the Kwebble settings. On that page you will find a checkbox to disable canonical URLs.
Usage
After installing and activating the plugin the
wp_get_archives()function accepts a ‘cat’ parameter to specify the categories of posts to show in the list of archives. The value of the ‘cat’ parameter must be a list of one or more category ID’s, separated by comma’s.If you specify the value of a category ID the posts from that category will be used to create the list of archives. If you place a minus sign ‘-’ in front of an ID the posts from that category will be excluded.
Depending on the number of categories, your use of them and selection of categories to include in the archive list it may be easier to specify all categories to include or just those to exclude.
You need to make sure the template used to show each archive displays posts from the selected category. I’m using category specific templates on this site, like category-id where id is the ID of the category to display. You can use other templates in the template hierarchy, but make sure the template shows items of the categories you specify.
At some WordPress version the categories ID’s are no longer visible on the administration pages. You can find the ID of a category by opening the page to edit the category and inspect the URL of that page. The value after cat_ID= is the ID of the category.
Examples
Show the default monthly list of archives for category 1:
<?php wp_get_archives('cat=1'); ?>The same list, but with posts from categories 1 and 3:
<?php wp_get_archives('cat=1,3'); ?>Use posts from all categories except category 2:
<?php wp_get_archives('cat=-2'); ?>Use posts from all categories except categories 2 and 8:
<?php wp_get_archives('cat=-2,-8'); ?>Create a list of archives for category 1 as a dropdown box:
<?php wp_get_archives('format=option&cat=1'); ?>Limitations
This plugin does not work for weekly archives. The list with archive links is correct, but the links themselves do not include the category. So when used, WordPress will not filter the resulting page on the category. The technical reason is that WordPress does not apply filters when the links for weekly archives are generated, so the plugin can’t change them. Perhaps in a next version of WordPress…
This plug-in was developed and tested to work correctly with WordPress version 2.7.1, but it probably works with earlier versions back to 2.2.1.
Older versions
These are earlier versions of the plugin. Use them only if you have a specific reason for not installing the current version.
Version 1.4a
27-03-2009 Download
- Corrected post count when posts belong to multiple categories.
- SQL queries now respect the configured SQL table prefix.
- Templates with multiple calls to wp_get_archives(), with and without ‘cat’ parameter, generate correct URL’s.
Version 1.4
22-02-2009 – Added option to exclude categories. Download.
Version 1.3
6-01-2008 – Added support for multiple categories. Download.
Version 1.2
23-11-2007 – Added support for WordPress 2.3.1. Download.
Version 1.0
15-08-2007 – Initial version, works with WordPress 2.2.1. Download.
Copyright
Copyright 2007, 2008, 2009 Rob Schlüter. All rights reserved.
Licensing terms
- You may use, change and redistribute this software provided the copyright notice above is included.
- This software is provided without warranty, you use it at your own risk.
-
Putting the geo position in a Wordpress RSS feed
The last few days I’ve been looking at adding geographic information to articles on this website. For WordPress, the software this site is running on, I found the Geo plugin with which you can store geographic coordinates for an article. The plugin adds this information to the page of each article, but not in the RSS feed, so I made a function that does this, though not automatically.
To use it, start with adding the following function to the Geo plugin. I’m using version 1.0, don’t know if it works in earlier versions:
/** * Returns the tags with geo information for inclusion in RSS 2.0 feeds. * * Include a call to this function inside the <item> tag to * add tags with geo information if available. * To keep the feed valid add these namespace declarations to the <rss> tag: * xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" * xmlns:icbm="http://postneo.com/icbm" * xmlns:geourl="http://geourl.org/rss/module/" */ function get_the_rss_geotags() { global $wp_query; if(!get_settings('use_geo_positions')) return; list($lat, $lon) = split(',', get_post_meta($wp_query->post->ID, '_geo_location', true)); if ($lat == '' || $lon == '') { if (get_settings('use_default_geourl')){ // send the default here $lat = get_settings('default_geourl_lat'); $lon = get_settings('default_geourl_lon'); } } if ($lat != '' && $lon != '') { echo "<geo :lat>$lat</geo><geo :long>$lon</geo>\n" . "<icbm :latitude>$lat</icbm><icbm :longitude>$lon</icbm>\n" . "<geourl :longitude>$lon</geourl><geourl :latitude>$lat</geourl>\n"; } }Now you can add this line to wp-rss2.php, somewhere inside the <item> tag:
<?php echo get_the_rss_geotags(); ?>
Also remember to add these namespace declarations to the rss tag:
<rss version=”2.0” xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:icbm="http://postneo.com/icbm" xmlns:geourl="http://geourl.org/rss/module/">
That’s it.
-
PHP, caching and the flickr api
PHP, caching and the Flickr api is a simple example using PHP to access and cache requests to the Flickr API. This is the method used to create the flickr world map.
-
Practical PHP Programming
Paul Hudson wrote the book, that only exists online, Practical PHP Programming with the goal of
making the task of learning PHP something fun that you do not have to worry about
. -
Building a barebones CMS
The article Building a Barebones Content Management System: An Introduction is the start of a tutorial that explains how to put a barebones CMS together with PHP and MySQL using three available APIs:
- yaapi: a programming interface that makes displaying articles on your webpage easy.
- patTemplate: a versatile templating engine that supports a wide range of features.
- patUser: a user management class that helps you with authentication, group and permission management, statistics and more.