Category Archives: Life

Twitter Weekly Updates for 2010-01-10

Twitter Weekly Updates for 2010-01-03

Twitter Weekly Updates for 2009-12-27

Twitter Weekly Updates for 2009-12-20

Use PHP and the GD Library to make CSS Sprites

I came across some neat free Icons a couple of day’s ago. I found 178 free icons by WooThemes.

They suited my needs for some navigation icons I was after, so after a quick download, I have them all. Great.

Now, when I code, I’m all about speed of page loads with our reducing quality of course. So more and more and with that I have been using CSS sprites for images, the Less requests, the faster a page loads. there are hundreds of articles explaining this sort of thing, like only use 1 CSS file, putting your Javascript at the bottom, I use them, I even have written a Mootools extensions for embedding Google Analytic in to my sites, that secretly embed the GA code after the page has loaded so its doesn’t slow down the rest of your site from loading, tracking external links and form submits, but any how that is for another post.

178 PNG icons

After extracting the ZIP, I found 178 separate icon files, and I wanted a gray-scale version of each for a hover state, that would mean up to 356 requests plus all of the rest of the images on that page.
Now of course I’m not going to use every Icon, but you never know !

Using PHP & the GD Library to make my Sprite

I must Credit Sandy for his awesomeness and contribution to this script.

< ?php
		function spriter($dir = '*.png', $dest = 'sprite.png', $spacing = 0) {

			// define icons sizes
			$icon_width = 32;
			$icon_height = 32;

			// start height of my sprite canvas
			$height = 0;

			// select all the icons and read theri height to build our canvas size.
			foreach (glob($dir) as $file) {
				list($w, $h) = getimagesize($file);
				// make sure out icon is a 32px sq icon
				if ($h == $icon_height)
					$height += ($h + $spacing);
			}

			// double our canvas height to allow for a gray-scale versions.
			$height = ($height * 2);

			// create our canvas
			$img = imagecreatetruecolor($icon_width, $height);
			$background = imagecolorallocatealpha($img, 255, 255, 255, 127);
			imagefill($img, 0, 0, $background);
			imagealphablending($img, false);
			imagesavealpha($img, true);

			// start placing our icons from the top down.
			$pos = 0;
			foreach (glob($dir) as $file) {
				$tmp = imagecreatefrompng($file);
				if (imagesy($tmp) == $icon_height) {
					imagecopy($img, $tmp, 0, $pos, 0, 0, $icon_width, $icon_height);
					$pos += ($icon_height + $spacing);
				}
				imagedestroy($tmp);
			}

			// place all of our icons on again, but this time convert them to gray-scale
			foreach (glob($dir) as $file) {
				$tmp = imagecreatefrompng($file);
				if (imagesy($tmp) == $icon_height) {
					imagefilter($tmp, IMG_FILTER_GRAYSCALE);
					imagecopy($img, $tmp, 0, $pos, 0, 0, $icon_width, $icon_height);
					$pos +=  ($icon_height + $spacing);
				}
				imagedestroy($tmp);
			}

			// create our final output image.
			imagepng($img, $dest);
		}

Sample Usage

< ?php
// IMPORTANT:  REMEMBER TO MAKE SURE THE WEBSERVER HAS WRITE ACCESS TO YOUR DESTINATION DIRECTORY.

spriter('icons/*.png', 'icons/sprite.png', 10);

Show our Sprite

icons/sprite.png

CodeIgniter & SPAW Editor Tabs

A few months ago, I updated a great SPAW editor plug-in for CodeIgniter to use the most recent version of SPAW at the time, that included Safari Browser fixes and some CSS tweeks.

Well over the weekend I look at getting multiple tabs working.
It was pretty easy, with a couple of modifications to the SPAW wrapper class, I have create some sample usage, and examples for you to download.
I have made the CSS fixes from my previous post, and included some sample usage.

SPAW and CodeIgniter

SPAW and CodeIgniter

I am only going to explain how to create the SPAW instance within CodeIgniter, If you are unfamiliar with CI, you should first follow the Online Code Igniter Tutorial Videos.

Creating the SPAW instance

In my download, you will find a ‘pages’ controller.

function index() {

	// Define our first tab
	// 'name' == field name,
	// 'caption' == button caption,
	// 'content' == editor content
	$config = array(
		'name'    => 'content',
		'caption' => 'Content',
		'content' => !empty($_POST['content'])?$_POST['content']:'

CodeIgniter & SPAW Tabs

SPAW Editor Class for CodeIgniter, Sheldon Lendrum

' ); // start our SPAW instance $this->load->library('spaw', $config); // Add our secondary tabs $this->spaw->addTab('description', 'Description', !empty($_POST['description'])?$_POST['description']:''); $this->spaw->addTab('summary', 'Summary', !empty($_POST['summary'])?$_POST['summary']:''); // load our view $this->load->view('template'); }

SPAW Class

I have modified the SPAW class with 3 functions.

function Spaw($config) {}

The Spaw function initiates the Spaw editor. you pass in an array of the default Tab.

function show() {}

This returns the SPAW instance in to your view. It will return a string, so you will need to echo this in your layout.
EG;
< ?php echo($this->spaw->show()); ?>
You must call this ONLY IF SPAW is called in your controller previous.

function addTab($name, $caption, $value) {}

This is to add additional tabs to your spaw instance.
Your default tab is defined when you create your SPAW instance, so this is how you can call additional tabs.
$name == your field/$_POST name
$caption == your button title
$value == the SPAW editor default value.

Installing SPAW & CodeIgniter

I have included a full copy of CodeIgniter 1.7.1 with SPAW 2.0.8.1,
If you want to move the SPAW plugin to your own copy of CI, move the;
'system/application/libraries/spaw2' directory and the
'system/application/libraries/spaw.php' file.

If you are on an APACHE server and using MOD REWRITE url rules, make sure you have the included .htaccess file in the spaw2/ dir.
'system/application/libraries/spaw2/.htaccess'

Download and Install

[download#9]