LHA is probably the most complex website that I've set up. They are a craft group with a long history - back to the early 1970's - who have had a website since about 2006. That's where the problems start.
I've come up with a motto for this kind of thing:
Now, that's not meant as a complaint, just as a description of harsh reality for a small co-operative group. They are too small to be able to pay commercial rates for a multipage website with editing facilities designed just for them (which is what they need), and as seems usually to be the case, such websites get set up either by a volunteer who later moves on, or a website developer who's just starting out and does it for too little money (and also then moves on).
Either way, after a while, and despite the best of intentions, updates never get done.
Problems first emerged when the 2006 website got no updates of new items for sale, because despite the developer's best intentions, no member could master the admin interface to do it. In fact part of the interface was broken, and nobody knew. This became a problem when the group changed from a 6-day-a-week shop (where updates didn't matter so much) to running sales a few times a year, hence creating the need for regular updates of the main pages. At first these were done by getting the developer to make changes - over and over - which soon became impratical, so we got him to add TinyMCE as a content editor. Along the way, the Flash slideshow on the homepage was becoming increasingly inappropriate too, with many craft people being the kind who use Apple hardware that doesn't run Flash, and so I changed it (by myself in this case) to a jQuery slider (choosing Responsive Slides due to both its don't-try-to-do-everything simplicity and its compatability all the way back to IE6).
Over time this because inadequate, still with the problem of far too few item & people updates getting done, and the design becoming increasingly out of date as the world changed to mobile-friendly (responsive) designs. With the database-manipulating code written in 2005-vintage ASP.NET version 2 approaching its use-by date as well, it eventually got to the point where it was time for me to take the whole thing over myself, and the obvious solution was to migrate to a CMS.
Being hosted in the USA, with overnight maintenance downtime being in our evenings, wasn't too great either - so setting up on Australian hosting was the simple way out, enabling everything to be tested before changing over the DNS. As well, getting rid of tailored Google advertising by competing sellers wasn't a bad idea - you don't really need it at $3 per month hosting cost if I'm not being paid.
So I migrated the site to CMS Made Simple hosted in Australia, doing all the usual things you do with a 2006 design - migrating from HTML4/CSS2 to HTML5/CSS3 with the traditional replacement of all those tiny GIF files for the borders & corners to CSS3 borders (and bad luck to IE users who no longer see rounded corners on the borders), rearranging as a fluid layout for responsive behaviour, and changing to a nice flat, user-friendly plain-English URL structure (for example, /Mary rather than something like /members.aspx?&memberID=43).
Not wanting to freak out the customers with change, I cloned the original site as best I could, apart from subtle colour adjustments to improve the contrast (because craft customers tend to be older and you need higher contrast design to allow for their eyesight). Apart from going responsive, the major change was that I got really annoyed with having vast areas of white space on the pages, and hence replaced the one-column layout of the craft items with a 2-column layout, to fill the page with colour. It was a nice idea in principle but then caused more work, because only two images could be displayed per item, so I had to set up a pop-up slideshow as well. Finding a fully responsive public domain plug-in turned out to be difficult. I tried to get it working with Lightbox 2 but eventually found that the older Colorbox was better, after reading up on Github the 2012-vintage never-implemented details of how to modify it to make the pop-up properly responsive (i.e. shrink to viewport).
Replacing the old site has also got rid of a nasty little search engine problem, that pages for members who had left the group - and whose data had been removed from the website - were still being generated and being indexed by Google - with empty content.
One really odd thing that I've never solved is that the new site is shifted horizontally a bit from the old one in your browser. I know that what I've done is right, because it centres itself properly as the screen width drops - including being more or less centred for different widths of vertical scroll bars, which is hard to do (hint: it needs nested div's). Thank goodness for StackOverflow as a source of inspiration for the idiosyncracies of CSS3.
The really difficult part was setting up the database of items for sale. On the original site, they had attributes of the person's name and the craft technique. This allowed a page for each person, a page for each craft technique, and overview pages for all people and for all crafts. And each item could have one of more pictures.
We'd already decided to replace craft techniques with product categories, on the assumption that this is what customers are actually interested in. But that has nothing to do with the problem that had to be solved, which is that there just wasn't any straightforward way of indexing by two different attributes (person and product category) in CMS Made SImple. The Products module is generally suggested for this sort of thing, but it only allows for a single image per item.
What I eventually did was to use the Gallery module instead, with a subGallery for each person, and within that, a subGallery for each item. This makes the pages for the people fairly straightforward, but contributes nothing for listing by craft.
To indicate the craft, attributes can be added at the subGallery level. It would be nice to do this with a dropdown list, but unfortunately this is limited to 255 characters for the entire contents of the list, so it had implemented as lots of individula tickboxes. For what comes next, the saving grace is that CMSMS lets you nest its Smarty templates - which turns out to be a really powerful design tool.
So for the individual people pages template, it's really easy - just loop across their item subgalleries. For the crafts pages, it's not too much harder, one template to loop across all people, which calls another that loops across all items for the person, looks at the craft attributes per item, and then only call a third template to display the item if the attribute matches. Ugly maybe, but it works well and the design approach is easy to understand.
For the page of all people, CMSMS Gallery makes it really easy, because there's a gallery call available to display a specific number of pictures in all subGalleries, and it can be called with the selection being random. So far so good.
The tricky one is the page of all crafts, and the only viable solution here was rather more complex - setting up an array to contain image filenames, running through all the subGalleries to populate it with the craft as a parameter, then randomising the array and displaying the first two images for each craft. It's an ugly solution that would have been much better handled by writing my own extension, but does have the advantage that because I'm using standard functionality of mainstream modules, it should be robust against future patches of the CMS.
CMSMS doesn't have a current sitemap plugin, but the old one from v1.x still works if you install it manually (which I did), and there is documentation in the support forum on how to modify it for a flat URL structure.
The standard page content fields of CMSMS are useful to store page-specific metadata. With a bit of careful page template design, the Description field of each page is used in three places - as the Description metatag of the page for Google to pick up, as the description text in the sitemap webpage, and as the individual descriptions in the page-of-all-crafts and page-of-all-people. It saves having to write the same stuff three times, at the price of carefully constrained length.
All in all, it works, updating of craft items is straightforward, and that's all that is needed. And for good measure, I added permanent redirects from the old URLs.
Old website: Click here to see it on the Wayback Machine
New website: http://www.handcraftshop.com.au