Skip to main content

Updating on the fly

I thought this was a moderately clever solution to a problem, so I thought I'd share it here.

A client wanted to add thumbnails for every entry on their huge movable-type powered blog site. They already had full-size pics for most posts, they just wanted a preview thumbnail version associated with each post for use in the xml feed, search results, etc.

This is a static movable type powered site with thousands of entries. The standard solution would be to create a new field using RightFields and store the filename of an image their, and then somehow go through all those thousands of entries and create thumbnails, then save the thumb filename in the new field. And do a full rebuild of the site.

This would work, but it was going to take forever!

The first thing to figure out was how to automatically create those thumbs. I knew that the first image in each post was the one to use, so it was pretty easy to set up a little php script that would find that image tag in the entry body, and then use imagemagick to create a thumbnail for it. I then had it save the thumb using the blog id number and the entry id number, into a special folder. This way each image for each post would have a unique file name, and I wouldn't have to mess with saving the filename into the database. The image is either there or it's not, and it's easy to check.

So I could at that point have just written a script to cycle through all the entries and create thumbs. I started to do so, but realized it wasn't going to solve the other part of the problem - how to keep it up to date. The client writes many new entries a day, so there needed to be some sort of automated way to create the thumbnail. A cron would work, except that obviously the new posts show up on immediately the homepage and on the xml feeds - which is exactly where the thumbs need to be. The cron would have to run like every minute, and look for entries in the last few minutes or something to create thumbs for. Still doable, but I thought there was a better way.

I decided to write a little php script that would check for the existence of a thumb, and if needed create it. I added this as an include at the bottom of the templates for the main index and the individual story archives. This way whenever a post is viewed, the thumbnail is created. The key is to make sure it looks for the thumb's existence, otherwise you'd have the system creating thumbs on every page view (multiple ones for the homepage!) which would not be a good thing for the server!

Now whenever a new entry is posted, as soon as someone sees it the thumb is created, and is available for use in the feeds and search results. Even better, their only created as needed, which cuts down on the load on the server - no need to have a cron running queries every minute or anything like that. It's also handy that if a change needs to be made to the format of the thumbnails, I can simply dump the ones that have been created so far, and the system will begin creating them again as needed!

Comments

Popular posts from this blog

Using FIle FIlters in FileZilla

Here's a handy tip for situations when you want to download a large number of files - but only of a certain type. For example, perhaps you want to download all the PHP files from a largish website, scattered through many subdirectories. Perhaps you're making a backup and don't want any image files, etc. FileZilla (still the best FTP in my opinion) has a handy feature called filename filters - located under the Edit menu. Here you can set various filters that filter out files based on their filename. Took me a minute to figure that out - you're saying show only PHP files, rather you're saying filter out files that do not have ".php" as their suffix. For some reason, that seems a little backwards to me, but whatever. It works quite well. You can also check whether the filter applies only to files, only to directories - or both. In this example, you'd want to check only files, as otherwise you won't see any directories unless they happen to end in...

Great google article

Over on Maximum PC - there were a few things I didn't know you could do with the various Google apps. One is uploading files to google docs - any file. Which ties in well with my previous post about storing passwords - I uploaded a copy of my password safe file to google docs as a backup. Can't hurt, right? Also, I wasn't aware that you could set up forms in google docs that act as surveys, and then store the results in a google docs spreadsheet. This is a little alarming, as a decent amount of my work involves coding up custom surveys similar to this...

Cleaning content from OpenOffice using Perl

Open office is great software for a number of things - I use it as my office software instead of paying a premium for Microsoft office. But one thing it's not so hot at is converting documents to clean HTML. And one of the main things I use it for is adding content to sites that clients send me in word files or excel spreadsheets. Of course, you can always cut and paste, but that loses a lot of formatting. For example, if the content uses a lot of italics, bold text, etc. it can be a huge pain to go back and put all that back in. Another common situation is a client sending some sort of tablular data in a spreadsheet - for example a list of events. It's the kind of data that can change a lot, and it also needs to be in a table with some decent formatting to be usable. Doing it manually is a lot of grunt work. But grunt work is what computers excel at, and I'm not very good at. So I've developed a number of perl scripts to help streamline this kind of job. I'll go ...