Get it All
Together

UPDATE: About that whole “Customizable Dashboard,” thing, someone already beat me to it, but I seconded the motion as well.  Good!  I hope this idea gains some traction and we get what we want.  In the meanwhile, I’m about to go check out “Dasher,” a plugin I found that’s supposed to do the same thing.
The WP Development Blog has announced a couple of new features for the WordPress world, WordPress Ideas and WordPress Kvetch, both aimed at more directly responding to the needs of WordPressers of the world. One is to suggest things, and the other is to complain about things, so I guess it’s kind of a question which you need to do more that determines where you post, eh?

Development Blog › Ideas and Kvetch!

If you could add anything in the world to WordPress, what would it be? If you could name the thing that frustrates you the most about WP, what would that be? Now you can tell us. We’re announcing new projects—two sides of the same coin.

Well, as soon as I get done posting this update, I’m going to put my two cents in at both places. Time to plead for a more liberal, less rigid Dashboard, for one.

Technorati Tags:

powered by performancing firefox

It is always worth considering what changing your web layout will do to your hit rate.  If you’ve been out there a while, you’re going to need to consider that there’s some guy out there with a page of yours either bookmarked or even linked on his page.  When you delete that content and don’t follow up with a redirect, you suffer dead links and dead leads no one will bother to follow.  Jaimie Sirovich picks up with the 301 “Permanently Moved” linking discussion:

SEO Egghead by Jaimie Sirovich » Cashing In With Legacy Link Equity

Your computer sucks. The Core Duo is dead – now you need a Core 2 Duo! Well, at least nobody is selling them. And if the web page was located at /Core-Duo.html, one can 301 redirect /Core-Duo.html to /Core-2-Duo.html. This channels the legacy equity to related updated content. This practice is superior to returning a URL not found (404) error, both because it transfers equity contained by that URL instead of dispensing with it, as well as refers any old links to relevant updated content.

Over at my political site, DragonFlyEye.Net, creating the latest version of the site required many of the same considerations.  My last setup was largely produced with independent pages for the home page and each of the section home pages, with each calling a specific article ID from the database through a GET request (“index.php?art_id=25,” etc.).  When I went to the new “Clean URLs” schema, I had to provide a way that old links to content did not go away.

Even more vexing, the reason for moving to the “Clean URLs” schema was largely a security issue, so providing for the old style links meant allowing a certain amount of risk.  Moreover, making the changes via Apache was going to be inefficient because I go through a web host and would therefore need to rely on htaccess directives, which are much slower than httpd.config mods.

My solution, while not giving away the farm, was to use a fair amount of regular expression comparisons so that only those variables whose format I could predict would be allowed to work unmolested and all other queries would be pushed back to the home page of their respective sections. 

Now I am beginning to realize that my current naming convention leaves something to be desired, inasmuch as the URL does not include the title, which is a helpful SEO tactic.  Still, this is not the biggest problem the website has ever faced, and doubtless there are bigger fish to fry.  Perhaps in some later incarnation, this issue will be addressed; perhaps by the time some newer incarnation is developed, Google will have grown bored of title-bearing links.

Only time will tell.

Technorati Tags: , , ,

powered by performancing firefox

At HolisticNetworking, we understand: you’re not a web developer and you’re not a web company. You need the web to do what you do best. But maybe the web has been taking too much of your time and not giving you what you need. Even worse, you may be paying for services you don’t need that used to support a project you are no longer working on. Dollars are flying out the back window, while trying to keep your eyes peeled out the front window.

But it doesn’t have to be this way. Those lost dollars can be recovered, if you just have an expert take the time to look over your web infrastructure and help you reorganize. One possible solution is to consider using WordPress for some or all of your web properties. If you’re thinking of ways to save your company money, here are five good reasons to take a second look at WordPress – and five good reasons to contact HN today to help you do it.

5. Many sites? Just one WordPress.

Most companies have, for one reason or another, several domain names under their ownership. Maybe you’d like to market directly to a very specific audience. Maybe you’re protecting your brand and registered trademarks by owning microsites for each of them. You have your reasons.

Where Did My Content GoBut they all need to be tracked, administered and occasionally updated. That costs time, and time costs money. In fact, literally every thing on this list can be multiplied by the number of sites you need to maintain. Is there an easier way?

Why, yes! Yes, there is! WordPress was developed to be capable of hosting several websites all at once. Different domain names, same WordPress. That means only one version of WordPress to be updated, ever. One set of plugins. One set of themes.

Say goodbye to multiple web hosting accounts and nickel-and-dime costs of doing business: with WordPress multi-domain, you can have just one bill for all your accounts.

Find Out How You Can Save on Web Hosting Today!


4. Updated content? No problem!

Maintaining and administering a website is one thing. Updating the content on the site is quite another. Do you really need to call in an expert every time you need to change a phone number?

Photo courtesy Diesel Demon @ Flickr.com

Why, no. No, you do not. With WordPress, you can grant users permissions to alter or post new content any time you need them too. Not just updating phone numbers, but posting new updates about products, sales or promotions. Whatever you’d like the world to know about what you’re doing, you can have your own people – the people you already pay to come up with marketing content – to update your site and leave the pros like me to work on something else.

But… doesn’t that mean a lot of chaos and potential damage to the site? Why, I’m glad you asked…

3. Who changed that? User control and tracking.

If you’re used to having developers like me alter pages by hand, then if nothing else, you’ve always known who was at fault if content was not correct. Now that you have WordPress running your sites, does this mean you lose that ability to pinpoint trouble?

….nnnnnope. WordPress has user accounts whose changes to content are always tracked. If a change is made, just look up the last person who altered the content and let them know it’s wrong!

Not only that, but you can actually control which users have access to which content. So, users who have no business updating marketing material never have to worry about potentially messing things up. It’s piece of mind for you and your employees!

Save Time. Save Money. Unburden Yourself!


2. Are we safe? Regular security updates.

Photo courtesy Sarah Joy @ Flickr.com

Don’t be fooled: even the best of us find ourselves checking our six, watching for the next hack or outbreak. That concern – along with a goodly dose of real-world experience – is what makes the good developer what he is. But for those without that real world experience, worrying about viruses, hacks and whatever “malware” is tends to just be an anxiety-ridden waste of energy.

WordPress takes the guess work out of security by featuring a regular update schedule and regular security checks: if developers discover a nasty, they take steps to fix it and roll out updates. The WordPress community also has award-winning security measures like iTheme’s Security suite that makes the already-secure WordPress even better.


1. Can we sell it online? Now making eCommerce even easier!

WooCommerce-LogoVeterans of WordPress development know that eCommerce never used to be an easy thing with a WordPress site. And since the WooCommerce plugin came along, it’s been almost every developer’s go-too eCommerce solution. Now WordPress has taken things to the next level and purchased the WooCommerce plugin from it’s parent company.

This means that an already highly-effective eCommerce solution just got even more effective, and that over the next couple years, will become native to the core. Now would be a great time to get ahead of the curve and start selling using the once-and-future WPe solution!

Get it SOLD. Start a WooCommerce store today!

I haven’t seen a definitive list of WPMU actions like there is of WP Actions and WP Filters. So, while I don’t have diddly in the way of information for most of these, I’ll go ahead and give you the current list of actions that I’ve found. I’ve included what are my best guesses at the needed arguments, based on context:

switch_blog($new_blog_id, $old_blog_id)
make_spam_blog($blog_id)
make_ham_blog($blog_id)
add_user_to_blog($blog_id, $user_id, $role) /* Adds user to specified blog, assigns role remove_user_from_blog($user_id, $blog_id) /* Removes user from specified blog, does not delete wpmu_activate_user($user_id, $password, $meta)
wpmu_activate_blog($blog_id, $user_id, $password, $title, $meta)
wpmu_new_user($user_id)
wpmu_new_blog($blog_id, $user_id)
wpmuadminresult()
wpmueditblogaction($blog_id)
wpmublogsaction($blog_id)
manage_blogs_custom_column($column_name, $value)
wpmuadminedit()
archive_blog($blog_id)
unarchive_blog($blog_id)
activate_blog($blog_id)
deactivate_blog($blog_id)
unspam_blog($blog_id)
make_spam_blog($blog_id)
mature_blog($blog_id)
unmature_blog($blog_id)
manage_users_custom_column($column_name, $value)

Obviously, there’s not a lot to go on, here. But at least it gives you some idea of what actions are available and how to use them. The names are usually quite straight-forward and intuitive.

Do you know of any more? If you do, please share and I’ll update the list.

I love my Droid Eris, it’s the neatest little toy I’ve bought myself in years and years. But it does have one disadvantage, which is that the high-power consumption means that the battery doesn’t last very long. And when you’ve got a job out here in the sticks, the phone starts roaming and you really lose battery power. At this point, its like I’m driving an “A Car,” with my phone running out of juice about 7pm every night.

What’s an A Car? Well, during the rationing of World War II, they assigned every car in the country with a letter, A, B or C, that dictated when the car was eligible to get gasoline. A Cars got gas on Monday and Tuesday, B Cars got gas on Wednesday and Thursday and C Cars got gas on Friday and Saturday. In those days, everything was closed on Sunday.

Well, as you can clearly surmise, those cars that got gas on Monday and Tuesday would be at their lowest point on Friday and Saturday, which meant A Car drivers generally got stuck at home or else had to tool around in someone else’s ride. C Cars were the cars to have.

But, this is just me talking. Interesting point of history, nothing more. But I really wish they would make a higher-capacity battery for this phone. Should I have bought that clunky Motorola model instead?

We’ve been introducing new life into the tank and I’ve noticed a trend which I thought I’d share with the blog. Feeding the tank is always a concern when working with reef aquariums. With fresh water aquariums, you can usually just throw a bit of food in every day and the tank will take care of itself, since there’s already a lot of algae and other natural growth associated with healthy fresh-water tanks.

But with salt water tanks, over-feeding the tank can have deadly consequences. It was the buildup of ammonias due to exactly this type of over-feeding that partially contributed to our melt-down. It was also this concern that led me to post my most recent post on “building from the bottom, up.” For the sake of water-chemistry alone, you need to avoid over-feeding.

But the trend I’ve noticed is that not only do you not want to over-feed, you actually want to go to some lengths to assure that there is always a need for more food. As concerned aquarists who’ve invested a lot of time and money into our tanks, it is entirely normal that we tend to want our tanks in optimum performance, and so the tendency is to want to assure yourself that everything in the tank is getting fed exactly the right amount.

This is a nice instinct, but not one that squares with the reality of a natural reef environment. Life is struggle, and for marine life, that struggle is the constant quest for the next meal. That’s as evidenced by the fact that there are so many more numerous species of heterotrophs, or animals, than vegetable autotrophs in the marine environment. Plants can make their own food by photosynthesis, but most things in the water need to actively seek out their next meal. They are geared towards this quest, their bodies optimized to go without food most of the time and feed when food is available.

So if they aren’t given that impulse to actively hunt for food, they aren’t going to be very healthy, actually. Precisely the opposite of what we tend to think. Since we’ve added in the new clown fish, we’ve not bothered to increase our feeding cycle at all. The result has been that our diamond goby has been much, much more active and looks a little better. The snails and crabs are constantly working overtime to get their own sustainence. The sand is constantly cleaned by the goby’s activity and the entire tanks is generally more enjoyable to look at.

Best of all, when the goby filters the sand, he kicks up a lot of uneaten food which the ocellaris gets a second crack at. This is the kind of semi-symbiosis that you’re looking for in a tank: let the life that’s there do the work of feeding itself.

So, how much is enough? Well, that’s not an easy question to answer. Another ripple in the current tank’s setup is the introduction of more copipods, which of course represent a constant, reproducing stream of food for the fish, and one that is basically invisible to us humans. How do we know we’ve got enough in the tank when we can’t see them?

You have to just go on what the fish look like, I suppose. If your fish are getting a little thin or if feeding time is particularly aggressive and includes a lot of fighting, then perhaps its time to increase the load slightly. Or perhaps the frequency of feedings should be increased and the amount per feeding decreased, but it’s all going to be instinct that guides you. It’s your tank and they’re your fish, so only you are really going to know how things really work in your little marine universe.

About the only potentially helpful guideline I could suggest would be to consider your tank in terms of those “bottom up” strata I discussed in my earlier post, along with considering a kind of “aggression strata” as well. High-swimming fish such as clowns, called pelagic fish, are going to get first-crack at the food, whereas bottom-feeding gobies, known as benthic fish, won’t tend to get the food till it’s on the bottom. That’s one strata. The other is aggressive fish such as tangs versus passive fish such as dragonettes.

If you have a mix of these types of species, you might want to consider feeding more than once a day so that the aggressive fish get their fill and the passive fish can feed later. You’d want to limit the amount of food in each feeding, of course, and put in just enough food to satiate both strata.

When considering these strata, you’re probably only going to need to consider the fish, not the inverts. Snails just eat algae or scraps, so do the hermit crabs and others. They’re used to catch-as-catch-can, so you don’t really need to worry about them too much.

Having spent a number of years as a hardware tech support guy, I get a whole lot of questions about basic PC stuff, generally the same question over and over again. A big one in these days where we are becoming more and more involved in the Internet in both our work and personal lives is the question of password security.

Used to be that the very fact that you knew how to turn a computer on was more or less proof that you had a need to use one. Now, every moderately important function of the computer seems to include password protection and identity verification. Simple passwords definitely do not cut it anymore, even if some systems will allow you to set such a password: once you’ve set ten or fifteen passwords – probably all as the same password – you leave yourself open to a world of identity theft if you don’t use at least a semi-complex password. Social engineering will also sting you, if there are people out there that want to get the best of you, so setting your password to your wife’s name + 99 to make it complex will not do.

So, here’s a simple process you can use to make a password that is by far-and-away a better, more complex password which has the extra bonus of being easier to remember than most strong passwords. This is not entirely original, but I’ve embellished on an old trick and am going to walk you through it:

Step One: choose a song

That’s right, a song. Any old song will do, but preferably one you really dig. Find a line of lyrics in it that you find particularly inspiring and select the first letter of each word. For an example, I’m going to use Close to the Edge by YES, my favourite line and the first line of lyrics after the solo:

The time between the notes relates the color to the scene

ttbtnrtctts
Hmm. . . Well, right off the bat, no one is going to social-engineer that unless it’s on the poster tacked inside your cube. Even then, it’s going to be a pretty good guess, indeed.

But a strong password is one that includes at least one character out of three of the following four character types: lower-case letter (b), number(7), special character (!) or capital letter(D). So, let’s go back and see if there isn’t something else we can do to gussy up our new password. Pick from the following three steps to get your password.

Step Two: pick a capital

No, I don’t mean Washington. I mean pick a letter in the chain of letters we’ve created and make it capital. This could be any one of the characters, but for memory’s sake, pick the most significant word in the sentence, if that’s possible:
ttbtnrtCtts
As you can see here, I’ve chosen to capitalize “Color,” since that’s the most significant word in the sentence, or at least one of them. You could use more than one capital, of course. Another option would be to do CAP-lower-CAP-lower if you wish, but this is predictable and defeats the purpose. Capitalizing the first letter is also cheating, so don’t do that! We’re almost there, let’s keep going.

Step Three: character substitution

There are two types of substitution you can use: one is to change homophones like “too/to” and “2,” the next is to change letters into numbers that sort of look like the letter. Let’s try it here:
tt6tnrtC2ts
In our current example, I’ve substituted the word “to” with the number 2. Those ones are easy, but I’ve also substituted the letter “b” in the word “between” for the number “6,” which would be harder to remember but not impossible.

Well, this is looking pretty good so far! In fact, I could easily stop right here and have a nearly unguessable password. But in case one of the above didn’t fit, let me mention something rather obvious.

Step Four: put the punctuation back!

The natural tendency would be to eliminate the punctuation when creating the password. Did you do that? If so, put it back! Those are special characters and qualify your password as being even more secure. In my case, there really isn’t any punctuation to speak of. However, since the end of a line of poetry should end in a comma or a period (according to my eighth grade English teacher!), I’ll go ahead and add it by way of example:
tt6tnrtC2ts,
Viola!! There’s your password, as good as it gets. Now, even if you use it for all your passwords (unrecommended, of course), its about as secure as you’re ever going to get under the circumstances. I hope this helps a few people and I hope you found it enjoyable! Actually, when you do it this way, making passwords is actually a lot of fun!

Because someone asked me and because I haven’t seen quite the same solution out there on the nets, I’m posting this really quick for the benefit of those who need a quick submit button confirmation. If, for example, you want to prompt users to confirm whether or not they wish to delete an item out of a form, you can use the below JavaScript function to get it done. The function is designed to serve as confirmation for many different types of events, so it’s quite flexible:
[javascript]
// confirmButton: simple function to test user response
function confirmButton(message) {
var conf = confirm(message);
if(conf) {
return true;
} else {
return false;
}
}
[/javascript]
To us it, I use my trusty Unobtrusive JS action loading function like so:
[js light=”true”]
addEvent(editsubmitbtnz[i], ‘click’, function() { return confirmButton(‘Are you sure you want to edit this feed?’); });
[/js]
You could also add the function directly to the button like so:
[html light=”true”]<input type="submit" value="Delete This" onclick="return confirmbutton(‘Are you sure you want to delete this feed?’);" />[/html]
The result is a JavaScript function that will halt all action on the screen when you hit the submit button that the function is assigned to. It prompts the user to say whether or not they agree with the statement passed as a reference to the function, then pass that value (true or false) back to the page and either submit the form as normal or cancel the operation.

When I started using FireFox, I discovered something truly amazing (to me at least) in the development world: the idea of separating basic functionality from advanced usage; the idea that a program could be continually improved upon in terms of security and stability without having to add on new features and gadgets, and new gadgets could be added as desired without danger to the core application’s stability.  This was something foreign to someone accustomed to downloading the latest Microsoft updates, which always blend fixes with new features in a confusing and often problematic way.

And since working with WordPress, I’ve come to expect roughly the same thing of that platform.  Plugins can be added at will with minimal risk to the core, and the core updates periodically with new bug fixes and improvements to stability, security and performance.  That is, until 2.3 came out, then 2.5.  And perhaps more importantly, until the new development schedule came out.

WordPress 2.5 is a great new interface that improves the back end and allows us plugin developers to hack what is probably the most important bit of WordPress: the author/administrator interface.  WordPress 2.3 expanded the role of what they now refer to as “terms” and introduced tagging, which I have to admit I love.  But these are radical changes to the core with far-reaching consequences – and they piggy-backed each other in the space of maybe six months.  Its one thing to say that we developers need to keep up, but these changes drastically affect the end user experience in complex ways that are sure to leave them in the dust.

What’s more, they want the development process to be this fast.  Indeed, they skipped right over 2.4 because the changes they wanted were so radical that there wasn’t time in the release schedule to come up with a stable 2.4.  That should be some indication of just how completely crazy their schedule is.  But I haven’t seen a whole lot of talk about it.  Rather, the impetus coming from the top seems to be that WordPress needs to remain competitive and therefore has to have a fast-forward development schedule.  Their release schedule is even planned on a time-based scenario, rather than the more logical needs- or at least design-based schedule.

But now we’re stuck with a Microsoft-esque problem, in that in order to maintain the security and performance enhancements of WordPress, we must of needs also accept new feature enhancements which we may not want or need.  This is not what I’d expected of WordPress at all.

I realize that some changes need to affect the core directly.  I accept that software needs to advance itself in order to remain relevant.  But I am hoping that the folks who push the levers at Automattic rethink their insane release schedule.

Summary:  These functions add, delete or update the given blog_option, respectively.

Detail:  All three of these functions use the switch_to_blog() function to navigate to the selected blog and switch it’s option values.  In fact, they’re all pretty good examples of how that function can be used to toggle between blogs.  Apart from the fact that one deletes and the other two set a variable, there really sn’t much difference between the functions.  All set their updated values to the wp-cache.

Only a very small handful of people from Rochester and the surrounding areas – those who like local music – will get the reference in the title of this post. Maybe a few people outside of the Rochester area. That’s OK. It’s a small homage to a favourite local band…

By now, most of us who are committed to social web development take it as a given that URLs should be as clean as possible for as much content on your site as possible[2. For a good discussion of clean URLs, their meaning and their use, see this article.]. Clean, clear URLs provide your audience with an intuitive way to understand the structure of your website, provide an easy method to return to favourite topics or sections of your site and not least-importantly, provide search engines with easily keyword-associated URLs to log and serve to their customers.

With CakePHP, clean URLs are part of the normal process of building pages, rather than an imposition. A URL to a given resource on your CakePHP website will have a format of domain.com/:controller/:action/:param/:param…[1. If you’re not familiar with this format, have a look at this page, which is our topic of discussion, anyway.] Without knowing how your site will be organized, this is a fairly intuitive way of organizing URLs. Your controller name should be fairly descriptive of what it works with, “posts,” or “teeshirts”; your action will probably be fairly descriptive of what its meant to do, “edit,” “view,” “index,” and so forth.

But not in all cases does the standard formatting work. In the case of the site that I’m in the process of developing, PotholePatrol.org, I needed to make some changes to the way CakePHP structured it’s URLs to make things slightly more intuitive to the layout of the website. For example, since the organization of data revolves around Metro areas containing one or more Towns having many Potholes, using /metros, /towns/ and /potholes didn’t make sense and wouldn’t have accurately reflected that organization.
Continue reading

Hey! Who remembers the “Scream Sheets” of William Gibson’s future? All those disposable computer screens that could bring you the latest in the news? Well, Amazon’s going to be the first one to try and market such a device with the new Kindle: a wirelessly-connected little PDA type thang that connects to their service for free.

Kindle will allow you to connect to Amazon, find the book or newspaper you want to read, buy it and read it from anywhere. You don’t need a wireless Internet connection service like Verizon or AT&T, because Kindle comes with its own “Whispernet” wireless network. Plus you get free access to Wikipedia:

Amazon.com: Kindle: Amazon’s New Wireless Reading Device: Kindle Store

# Revolutionary electronic-paper display provides a sharp, high-resolution screen that looks and reads like real paper. # Simple to use: no computer, no cables, no syncing.

OK, that’s cool. But now for the down side. . .

For one, this Whispernet is available through Sprint’s network, which is fine if you live in one of those “good zones” of Sprint’s network. But I bailed on Sprint for the simple fact that I had the worst time getting reception with them in Rochester. I could literally walk ten feet from my house in either direction and get a signal, but directly in front of my house, no go. Now, I realize there was probably some sort of microwave interference in the area, but my Verizon phone never had the same problem.

So, the network is a problem. A second problem is the volatility of the media. This may not matter to some, but I guess I’m old fashioned enough to want to be able to keep a book for a while, whereas if your Kindle becomes kindling, all those books you read are gone. I’ve never been able to quite comprehend the people who have music stored on their iPods without any kind of backup, now we’re going to do it with print media as well.

But the biggest thing is: that damned thing is $400! If you’ve got $400 to spend on something you can only read books on – and you really like reading books that much – knock yourself out. But it seems to me that the entire purpose of those “Scream sheets” of William Gibson’s fantasy was that they were cheap and disposable. If you left your scream sheet on the subway because you were too busy fiddling with your latest “Teach Yourself the Mambo” sub dermal chip, no biggie.

But unless your Paris Hilton on a bender, you’re probably going to want to keep your Kindle where you can find it.

I have had the privilege of working with Tom at Holistic Networking at multiple clients over the past 10 years. He has consistently provided web development, digital marketing and e-commerce solutions for many of these organizations while addressing a wide variety of challenges. Tom has always furnished his expertise to serve the needs of diverse types of businesses.

In the world of web design, I find one of the most difficult tasks is building a robust user interface for web applications. Front ends to news websites or blogs are one thing – and a challenge in their own right – but handling the complexities of managing data with the elegance of a WordPress backend is not nearly as simple as it seems. For a start, the developer needs to be intimately aware of the data, how it connects to various other data components and what it means to the end user. In addition, the decision has to be made: what goes on a single page? I am personally always lusting after the cleanest, simplest interface possible, which means among other things employing AJAX to keep page refreshes between alienatingly-different screens to a minimum; not letting the user get completely lost when switching between various elements of a single operation.

But as challenging as that all is, the situation becomes much more sticky when there is already a user interface in place. Such is the case with the current web project I’m working on. There is already a robust website in place and it has many facets being driven by backend user interfaces. I don’t necessarily agree with the layouts of the pages – many of the rules I’ve long-since taken for granted about what an efficient and useful UI looks like. But to change the layout means necessarily retraining the users on how the interface works.

There are also some restrictions and conventions of the platform I’m working with – CakePHP – that cause me to want to work in certain ways. I realize that the framework should not define the application, but when those conventions are ones that I agree with, it just adds more pressure to want to move to another interface.

I did not starting writing this post with any intention to arrive at conclusions, though I confess I did start with a thought that perhaps by writing down my ideas, something like the shape of a solution would appear to me. So far, no such luck. But I am learning to balance the needs of my audience with the modernization that I was hired to produce. I think for a start, laying out ideas and presenting them to my bosses – while time-consuming – is my best bet going forward. It both allows my bosses to object to things too far removed from their current experience and also hopefully loosens up their preconceptions enough to allow for some of my ideas.

It happens from time to time that we need to associate Models which do not share a common key. An example of this is when I needed to associate pages with templates in a complex join where the PageSettings Model has a primary key of pageid and the PageTemplate Model has a primary key of template_id. We cannot use the primaryKey index of the association array to indicate the relationship, so we need to bypass that index altogether and instead use ‘conditions’ to specify the relationship as follows:
[php]
var $hasOne = array(‘PageTemplate’ => array(‘foreignKey’ => false,
‘conditions’ => array(‘PageSettings.page_template = PageTemplate.template_id’)));
[/php]
Note also that the ‘conditions’ clause is set using explicit conditions, inasmuch as we are stating that the PageSettings.page_template in the current query should be the same as the PageTemplate.template_id value. I’ve personally been confused in the past, thinking that the ‘PageSettings.page_template’ => ‘PageTemplate.template_id’ formula would naturally be the preferred way of forming the condition in CakePHP. Certainly, that would make sense based on convention, but for reasons I’m not familiar with, this is not how they do it.