The Rake Magazine's home pageGorton Studios is proud to announce the relaunch of The Rake Magazine as a Drupal site. The Rake is an arts and culture magazine based in Minneapolis/St. Paul. The magazine is known for its strong storytelling focus as well as its unapologetic brand of humor, style, and personality.

The main goals of this new site were to expose The Rake’s rich resources (about 7,000 nodes) and help visitors find interesting content quickly. It features a wealth of carefully highlighted and cross-connected articles, integration with the organization’s pre-existing Event and Restaurant database (still managed outside of Drupal) and a bevy of blogs.

Simplifying administrative overhead was a key mandate from the outset. The old system was an unwieldy mix of Movable Type blogs and custom CMS content. Updating and featuring content had become an overwhelming process that was preventing The Rake‘s online edition from growing into something more fluid and community-oriented. The new site has enabled much more frequent updating, thanks to easily edited content and a robust permissions system.

Read on for some of the modules and techniques involved in building this site.

A Whole Lot of Custom Block Regions

The Rake Magazine's custom block regionsThe site design, provided by Kraig Larson of Ciceron, called for four to six columns of content on every page. After our team (ronan - developer, themer and estenrick - project manager, configurer) examined all of the layout variations and identified major commonalities, we defined eight different block regions for our template—shown as blue highlights in this image.

The Theme Developers Guide has a very nice Regions in PHPTemplate write up on how to do this.

Content Type Templates

The Rake Magazine homepage - deconstructedWe considered several ways to handle the “main content”—the inner columns of each landing page. Top contenders included the Panels module or a custom content type (via CCK). Although Panels allowed us to cover a lot of ground quickly, we eventually settled on custom content types, because we liked the extra control it allowed. Our decision resulted in quite a few content types, but it did the trick.

For example, the 'homepage' content type consists of a title field and a variable number of features (using field_feature—a CCK Node Reference field—set to multiple). The features are then themed as teaser views of highlighted nodes.
The bottom portion of the homepage content type follows a defined set of rules:

  • The first column displays the most recently-reviewed restaurants.
  • The middle column has upcoming events.
  • The last column shows the latest promotions.

These rules are written directly into the theme file (node-homepage.tpl.php) - see this image for a visual breakdown. The restaurant and event content is provided by an XML feed from the client’s ASPX system, which is cached and refreshed on an hourly basis. The latest promotions column is populated by a view that we embedded directly into the theme file. (See a good description of that technique in the Views Documentation, under Inserting Views).

Lots of Little Details

The Rake Magazine's home page, 20% sizeEach of the content types was constructed in a similar manner. Straightforward, perhaps, but all told this site has 30 content types, 40+ fields, 5 themes (4 of which are for generating HTML for email newsletters), 70+ template (*.tpl.php) files, 30+ views, 40+ blocks and over 7,000 nodes.

Most every page, therefore, has quite a few different moving parts. For an example, see this image for a breakdown of the 24 separate pieces that went into making the "Eater's Digest" page.

Challenges

Every project has its challenges. The major hurdles we faced with this site were generally due to the depth and breadth of the content combined with a short timeline.

  1. The Migration of Existing Content
    The Rake has been online since early 2002 and has amassed a large amount of content. The challenge? The content was not all coming from one place. Over the years, the magazine had been through several versions of a custom CMS (ASP + SQL Server), had incorporated Movable Type for their blogs (CGI and MySQL on IIS), and had developed a custom Restaurants and Events system (ASPX). We quickly moved all that disparate data—very little of which was cleanly separated—into the appropriate Drupal locations, content types, and fields. As an added bit of fun, we also imposed the laws of grammar on old content—parsing for proper title capitalization and making sure all those special characters like em-dashes and ellipses came along for the ride. (It is a magazine, after all). The old URLs were added as Drupal redirects, and the previous HTML contents were parsed to find, save and store all images referenced in content.
  2. So Many Rules
    The individual pieces of this site are not exceedingly complex, but there are a lot of pieces. Each content type has very particular rules about how its data should display, and those rules change depending on where the data appears. Not to mention, as with most projects, these carefully crafted rules shifted and evolved during development.

Modules Used

The Rake Man

Site Structure
  • Content Construction Kit - the backbone of just about everything, along with Date, File Field, Image Field, Link, and the CCK core Fieldgroup, Node Reference, Number, Option Widgets and Text
  • Views - used all over to expose lists and groups of content, along with Views core RSS, Theme Wizard and UI with custom cache wrapper for performance
  • Pathauto - providing good, meaningful URLs
  • Token - sharing info with other modules
  • Content Templates - templating the outgoing RSS feeds
  • Node Hierarchy - released with the launch of this site. A module for managing hierarchical relationships and generating menus, paths, views and controlling access based on the same.
  • Path Redirect - handle all those redirects from the old site to the new locations
  • Global Redirect - redirecting multiple node addresses to one
  • Webform - providing contact forms
  • Drupal Core: Aggregator, Comment, Help, Menu, Search, Path, Statistics, Taxonomy
Presentation and User Experience
  • Signwriter - generating graphic headers from TTF files (e.g. creating Block titles that are shown to the visitors as graphics via CSS)
  • SWFObject - embedding Flash content
  • Image Cache - generating multiple sizes of the same image
  • Thickbox - jQuery goodness for nice image galleries
  • Similar by Terms - facilitating relationships between content based on similarly 'tagged' taxonomies
  • Suggested Terms - helping keep those tags manageable
  • Paging - breaking nodes into multiple pages
  • Forward - email the page's content to a friend
  • Printer-Friendly Pages - cleaning the display for printing (e.g. spelling out the URLs behind links)
  • Javascript Tools (JS Calendar) - picking dates faster
Site Administration
  • Automatic Nodetitles - simplify content type creation and improve consistency at the same time
  • Meta Tags - setting meta tags per node (and more)
  • TinyMCE - WYSIWYG editing goodness
  • IMCE - image management goodness, also in conjunction with TinyMCE
  • Filter Default - giving different roles different default input filters
  • Captcha - SPAM policing the user-submitted comments (and more)
  • User Comment - giving content authors control over comments on their content
  • Search Keywords - a quick lookup on search terms
  • Google Analytics - tracking site usage
Development Tools
  • Devel - helping deconstruct and optimize everything
  • Backup and Migrate - released with the launch of this site. A module for moving data en-masse from server-to-server as well as doing things like scheduled backups.

Giving Back to Drupal: an Idea and a Donation

Finally, we’re using this occasion to so some good. With this site's launch, we are committing at least 1% of a project's gross every single time we launch a Drupal site. We have gained so much from the Drupal Community (knowledge, support, and a fantastic tool) that we feel compelled to regularly give something back. We’re guessing that other developers may feel the same way, so we’re inviting you to join us in making a formal commitment. You can read more about that idea in this forum post: http://drupal.org/node/191605

Comments

yelvington’s picture

Very nice work, and a great writeup. I look forward to poking around in the "backup and migrate" module.

kulfi’s picture

Great writeup! Could you elaborate your data migration process some more. Was this through SQL scripts? Import/export module? Manual? Time consuming?

dgorton’s picture

I can speak best to the export process - Ronan is the guy to talk about the import side of things. The custom CMS was exported to a text file using ASP / SQL. It was a bit hairy to nail down, though, as the multiple versions of the system had left some inconsistencies in the way the data was handled. Nothing terribly fancy there, though, just some logic to work out the different cases and put it out in a regular fashion.
The Movable Type export was hugely facilitated by the Migrating from Movable Type post. Ronan did the job right on the other side (as in - he cleaned up the hacks I posted that thread) - but again, that's his thunder, not mine.
And, yes, it was time consuming, just by virtue of the amount of content and the number of times it needed to be done during development and before the final launch.

ronan’s picture

For the import I used SimpleXML to parse the files generated from the old CMS and Movable Type. I then looped through the entries and created a node for each one. It took about 15 minutes to write the first draft of the importer.

Then came the hard part...

The old CMS stored authors as plain text (often including an art or illustration credit) In the new systems authors are nodes so that they can have biographies and images and a page to list all of the work by a given writer. (http://rakemag.com/authors/tom-bartel) Art credit's are free text for flexibility. This needed to be parsed from the old system (including misspellings, extra commas, etc.). Similar deal with magazine issues.

The old CMS did not have a notion of subsections, so they were added to the title (eg: "Features }} The Death of the American Imagination") with a wide variety of styles and punctuation separating them.

The visual style of the old design called for uppercase on a lot of titles which I had to convert to proper title case for the new system.

Images and file attachments needed to be grabbed from the old server, embedded ads needed to be placed, etc., etc. The import module is about 2000 lines of mostly special case handling and parsing. Combine this with the fact that with ~7000 nodes to import, it took 3-4 hours to run through the entire import process for testing.

The big picture is that importing data from XML is really simple, but the devil is in the details.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

rovo’s picture

Thanks for so quickly making clear how you handled the migration.

I am trying to import a bunch of articles from my old mediawiki site into my new drupal site. I can export them as XML. I'm trying to learn everything I need to be able to do this, but want to make sure I am heading in the right direction. If you were importing XML from mediawiki to Drupal, would you still use simpleXML to parse them into nodes? Just hope you can provide a suggestion on this, so I don't head down the wrong road.

Also, thanks for your guys terrific write up. Such tremendous help.

dgorton’s picture

I haven't used Mediawiki and I don't know what the size / scope /structure of your export looks like. XML is basic stuff, though, so importing an XML file produced by Mediawiki should be quite similar to importing an XML file produced by Movable Type.

Drew Gorton
Gorton Studios

JohnForsythe’s picture

This is an amazing project, nice work! Integrating all those data sources must have been a huge job. Probably the best writeup I've seen on Drupal.org, I especially like your diagram showing where the content is coming from.

--
John Forsythe
Need reliable Drupal hosting?

dgorton’s picture

I saw this comment right away, of course, but I'm still not quite sure how to react. (You've seen other writeups, right?) We certainly spent some time trying to make it relevant, informative and interesting, but that's pretty high praise indeed.

Not much else to say other than - Thank You.

theborg’s picture

Very nicely done!

Many thanks for this extremely useful writeup.

The 1% idea is great!!

----------------------------------------------------------------
Your site will be assimilated. Resistance is futile

caetemh’s picture

Very nicely!

toma’s picture

Nice work, do you use panels 2 ?
---
Biladi US Morocco
http://www.biladi.us

ronan’s picture

I weighed Panels as a possibility for creating the landing pages, but ultimately decided that it gave us a little too much flexibility. I was very impressed with the functionality and interface of Panels and would recommend anybody interested in a quick and easy way of accomplishing a complex panel-like layout should check it out.

We wanted the editing interface to be a little more streamlined and simpler for the end user. That is why we decided to create a different CCK type for each landing page with fields for each of the things that can be edited (featured articles etc.) and to place the layout and non-editable functionality in the tpl files for those node types.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

saulovacerat’s picture

Nice text, enjoyed reading it- thanks

themegarden.org’s picture

Really impressive work and excellent writting.
Very useful.

Also, your "Giving Back to Drupal" idea is very nice.

---
Drupal Theme Garden

Sree’s picture

really an excellent work & a wonderful writeup!

-- Sree --
IRC Nick: sreeveturi

Prodigy’s picture

Beautiful website and Congratulations on completion! :) Thanks for the write-up as well!

lolfreeman’s picture

Ideed , Great work

-------------------------------------
My drupal site: http://life.j0575.com,
j0575

Info4BeingRich’s picture

I think the content migration task was a big challenge, specially when you have to integrate it from different sources! Congrats guys for handling it successfully.

------------
Info4beingrich - Blog Tips To Make Money

jcnventura’s picture

I just love the way that the PF link (and the forward link) have this icon next to them..

Can you provide more details on how you did it? I am trying to document this in the PF module documentation, but I would prefer a real-world description...

Thanks for the excellent writeup! The site feels and looks great!

João Ventura
(Printer-friendly module maintainer)

João Ventura
Venturas.org

ronan’s picture

It's actually incredibly easy to do with CSS since the links have descriptive classes:

<div class='links-item-link forward_links'>
  <a href="/rake/forward/7328" title="Forward this page to a friend" class="forward-page forward_links">Email this page</a>
</div>

So it's trivial to add a background image to the links:

.links-item-link a {
	padding: 5px 10px 5px 17px;
	background-repeat: no-repeat;
	background-position: left center;
	display: block;
}
a.comment_add {
	background-image: url(images/icons/icons-comment-add.gif);
}
a.comment_num {
	background-image: url(images/icons/icons-comments.gif);
}
a.permalink {
	background-image: url(images/icons/icons-page.gif);
}
a.print {
	background-image: url(images/icons/icons-print.gif);
}
a.forward-page {
	background-image: url(images/icons/icons-mail.gif);
}

Non blocking items (like 'a') will not take the left padding unless you make them blocking (see display: block; above). This is perfect if you want them stacked vertically like on the Rake site. If you want them inline like normal, you will need to float them. I add the icon to the a tag rather than the surrounding div, because I want the icon itself to be clickable.

Also, the icons themselves are derived from FAMFAMFAM's excellent silk set (http://www.famfamfam.com/) which is released under a Creative Commons licence so they're free to use if you credit the creator.

Hope this helps

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

level02’s picture

Thanks for the write up and modules, the site looks very nice, easy to navigate and structured well with many options to click per node to find relevant content. I have a question about...

authors are nodes

What's in these nodes? Views? Arguments? The list with images and links to articles written by the author looks really nice and clean.

What is the relationship between articles and authors? I started a thread here about that topic.

Again thanks for the write up and comments, kudos for all your work.

ronan’s picture

The fields on the nodes are simply First Name, Last Name, Bio and Image. Articles have an Author node reference field as your thread describes.

The Author article listings are created by a view which is embedded in the tpl file for the Author node type. The view has an argument for the Author node reference, and the Author's nid is passed into the views_build_view function when it is embedded:

in node-author.tpl.php:

<div class="author-nodes">
  <?php echo _rake_get_authors_nodes( $nid ); ?>
</div> 

in my custom module (can be placed in template.php):

function _rake_get_authors_nodes( $author_id ) {
  $view = views_load_view( 'authors_nodes' );
  $out = views_build_view( 'embed', $view, array( $author_id ), true, $view->nodes_per_block );
  return $out;
}

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

level02’s picture

{Ah ha moment}

Might take me a while to figure this one out but thanks for the code examples and direction.

Also using content types as sections is a great idea for workflow and easy updating without down time. Thanks.

andyatkinson’s picture

Hi Ronan. If you are presenting any of the development of the Rake website to a developer community, please let me know, I'd like to attend (I'm in midtown minneapolis). I'm assuming you are local in the twin cities, disregard this if not. Nice work, I check the mag periodically, I'll start checking the site more now.

Andy

dgorton’s picture

This next one is going to be done by someone else - I don't recall the topic - but I know it's the week after Thanksgiving. Watch http://groups.drupal.org/twin-cities for specifics, though. The following meeting time falls right in the middle of Christmas week and so that one isn't going to happen, I believe.

The following meeting, however, we're planning on presenting. This site will probably be the major topic, but we might also talk about some aspects of some of our other Drupal projects. It's a bit loosy-goosy at the moment - but - hey - it's months away, too.

Drew Gorton
Gorton Studios

jdcllns’s picture

I always enjoy these articles. It really helps to see what modules people are using. What they never mention is how long it takes to complete a project like this. My clients are always asking me for time estimates, but as somewhat of a drupal newbie, I have problems guestimating.

jdcllns

dgorton’s picture

I'm probably safely qualified as a Not-A-Newbie. It doesn't necessarily help. As Ronan noted in one of the above posts, the devil is in the details. Sure - you want to import your Movable Type blogs? Proof of concept in a day. You want to properly parse, re-categorize, punctuate, preserve images, files, redirect URLs and generally tidy up while we're at it? That's a whole order-of-magnitude larger.

I tend to be an optimist. Ronan's joke around here is that you take my estimate, double it and then add a zero. (Ronan's the pessimist counter-weight). Denise and Erika put up with both of us and somehow calculate a real number based on our crazy inputs. [So that probably means I shouldn't be answering this.... Erika?]

In life terms, though, the first programming task was sorting out the import madness, and that started August 6th. The site launched on November 1, so that looks like 12.5 weeks of build. I think Erika was up and running the week before, getting things like content-types worked out. In terms of hours, the order-of-magnitude was 500 - 1000 (I'm not sure it's fair to the client to reveal that number exactly).

In any case, it was a crunch. The client really wanted to push, however, and we did our best to accommodate. We had two other 1,000+ node sites overlap this project (one of which launched yesterday) - so that basically amounted to a busy fall. It was a lot for the client as well - they had to turn around decisions quickly and organize lots of input in extremely short timeframes.

Every project is unique, though - so it's hard to generalize. There won't ever be a project with exactly the same parameters, people, circumstances and decisions ever again. There are a lot of places the project could have gotten either simpler or more complex.

How's that for a sort-of answer?

Drew Gorton
Gorton Studios

jdcllns’s picture

That really helps. No one seems to believe me when I do time estimates. They just can't see how it would take that long. Your build time helps me to believe that my estimates are fairly close.

Thanx

www.deancollinsonline.com

jdcllns

mohamedn’s picture

Firstly, excellent site and excellent write-up!

I'm very interested in how you created the "homepage". I get the theory of how you used CCK Node Reference field but would appreciate a bit more detail. Say you wanted to create a spot on the homepage like the one you have for resturants, events and promotions using a couple of basic content types (eg. News, Events, Blogs). What are the basic steps to achieve this?

Thanks for sharing!

-
Qatar - A Community Site

ronan’s picture

In this case, the restaurants and events are fed from an external tool via XML and I wrote code to parse and display the information. The promotions piece is a view which i embedded directly into the tpl file for the homepage node type. That template contains the html to structure the columns (nested divs, heavily inspired by (read: stolen from) the templates provided with the panels module -- which we used in an early prototype). Inside these divs I call custom theming functions like echo _rake_get_latest_promotions() which simply loads a view and renders it. See my comment above (http://drupal.org/node/191608#comment-630983) for more details on how to embed a view.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

nikoport’s picture

I am impressed !
Very nice work, and very detailed description, guys !
The idea of giving something back to the drupal community is quite impressive.

Keep up the good work.

bsuttis’s picture

Really great example of how Drupal can be used, thanks guys.

I'm curious about the 'Most Popular' nodes in the sidebar -- I can see via source that they are embedded views, but I'm interested in the filter that's used to determine 'popularity'. My first thought was maybe 'Comment: Comment Count'...

ronan’s picture

Actually, the core statistics.module provides the 'Node: Total Hits' and 'Node: Recent Hits' sort orders for this very purpose. The 'most emailed' block is provided by the Forward module itself.

A word of warning about the statistics sorting. Due to the nature of the join required to sort by hits, the SQL to get the popularity views is very slow. These 2 queries between them were accounting for as much as 2/3 of the total SQL fetch time for the home page. Since this block appears on every page that kind of resource use was unacceptable, so I created a custom block which wrapped these views and implemented caching (via cache_get and cache_set with a 1 hour minimum cache time.

The block cache module seemed to provide similar results, but I was unable to get it working properly in our environment and as it was an 11th hour addition, we decided to implement our own caching (3 lines of additional code) rather than spend the time to figure out why.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

omnyx’s picture

this is a great website and an awesome writeup!
a quick question. Ronan - would you mind sharing your code for caching a specific view? How does one actually create a block in a module that links to some views and implement caching? i'd really like to see this as it seems like it would speed up my website significantly.

thanks!

dgorton’s picture

I just spotted this question, have some down time so I'm going to take a stab at the answer. I also don't have the code near me, so that's an impediment, but the basic tools are
http://api.drupal.org/api/function/cache_set
http://api.drupal.org/api/function/cache_get

And the basic process is to grab your data and then stuff it into the cache (cache_set) it for re-use (cache_get). And, noting that I don't actually have the actual code, I did a smidge of Googling and came up with this gem: http://www.lullabot.com/articles/a_beginners_guide_to_caching_data -- which looks like a great description of the process.

Drew Gorton
Gorton Studios

dgorton’s picture

I just spotted this question, have some down time so I'm going to take a stab at the answer. I also don't have the code near me, so that's an impediment, but the basic tools are
http://api.drupal.org/api/function/cache_set
http://api.drupal.org/api/function/cache_get

And the basic process is to grab your data and then stuff it into the cache (cache_set) it for re-use (cache_get). And, noting that I don't actually have the actual code, I did a smidge of Googling and came up with this gem: http://www.lullabot.com/articles/a_beginners_guide_to_caching_data -- which looks like a great description of the process.

Drew Gorton
Gorton Studios

duntuk’s picture

great writeup!

just curious on one thing... why use signwriter module for just a handful of fundamentally static block headings? why not just save the overhead processing and just hard code it?

these are the signwriter headings i've spotted by briefly looking at your excellent site:

most popular
rake blogs
restaurants
events
promotions

I would understand using it for node headings--that would get created on a regular basis (e.g. news articles), however, i don't get why use it on something that's not going to change often at all.

dgorton’s picture

Decent question. All of the above are reasons -

Consistency - in a site that pays attention to visual presentation, it's good to have the same processes produce the images. Even with the same TTF file producing the font, the renderings can change between servers and programs - enough so that it can be noticeable (at least if you look carefully). (So a Mac running Photoshop produces very different text aliasing than a linux server does).
Likewise, once something like this is put into your theme layer (e.g. block.tpl.php), you're set to use it everywhere unless you deliberately add exceptions -- and exceptions are places bugs (I mean issues) happen.

Flexibility - several titles - including things we thought could be considered 'static' - changed throughout the development process, and will probably continue to be adjusted in the future. It's good to have the ability to adjust things easily - good for the client, good for the developers.

Simplicity: It works well, and again, once it's up and running, it's simpler to let it run everywhere than to modify behavior if (X == true).

Caching: There's very little downside to pay for the above benefits - the images aren't generated at run time, they're cached -- so it's not a big performance hit.

Drew Gorton
Gorton Studios

Prodigy’s picture

I also was going to pose the "Signwriter" question. Someone beat me to it, and your answer does make sense. At least until after a few months you realize they won't change, but in the early stages I see the need.

Quick question, how many queries does the homepage produce? (non-cached) Also, what module did you use for caching? Any contributed? Thanks!

ronan’s picture

I don't see us ever moving away from singwriter, actually. The overhead is minimal, and the client absolutely must have the ability to rename and create new sections etc. Also, as Drew mentioned, a combination of signwriter and hand generated text images is not visually consistent enough for our needs.

The homepage produces ~450 queries with a total query time in the range of 400ms under most loads. We use the built in caching and some custom code to reduce the frequency of the most resource consuming queries. We do not use any contributed caching modules.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

duntuk’s picture

Interesting about the caching. What were the limitations you experienced with the contributed caching modules that made you write your own?

dgorton’s picture

We had some perturbing results with Block Cache - which looks like an otherwise great module. In particular, we had blocks jumping around the page when we were enabling the cached versions - we weren't able to figure the pattern at all - just random blocks being enabled in different regions. We tried it as a possible low-hanging-fruit gain and stepped back from it when we got those odd results. We may go back and revisit that module and possibly others as well, but it's really on an as-needed basis for performance gains - which is something we're watching closely.

Most of the caching we're doing right now is around the complexity / specificity of the theme... and therefore they're being dealt with in the site-specific theme and module files.

Drew Gorton
Gorton Studios

totalsense’s picture

cool and very helpful information. Thanks!

bsuttis’s picture

I'm interested in how you guys handled the ads in your nodes (i.e. http://www.rakemag.com/blogs/yo-ivanhoe/2007/11/man-goes-long-journey-st...)

Did you write some code to split up the node.tpl.php $content, or use multiple textfields, or something even smarter?

ronan’s picture

Pretty simple actually.

I wrote a filter which converts a simple tag [rakead:middle1] inserted in the body into the javascript needed to embed the ad code.

I also wrote code to automatically embed the code into the body on update if it is not there already (it embeds at the first paragraph break which is at a point greater than X characters). This allows the author to move the ad around if needed but does not allow them to forget the ad altogether. This was a specific requirement, as the client did not want their bloggers to have to deal with the ad embedding, but wanted full control over ad positions if needed.

------------------------------------
Ronan - Gorton Studios - http://www.gortonstudios.com/

------------------------------------
Ronan
Founder - NodeSquirrel - https://www.nodesquirrel.com/
Agency Tools Lead - Pantheon - https://www.pantheon.io/

gaijinu’s picture

Great job guys! Congrats!

--
Muay Thai Singapore
Sailing Singapore

rainer_f’s picture

Thanks for that showcase. I found some new and pretty good modules here.
Not speaking about the cool noderef tips!

Rainer

azoho’s picture

Thanks for the write up, very helpful

Can I ask, how did you setup the system for issues of the magazine?

And how did you do your homepage for the issue contents, eg:
http://www.rakemag.com/issues/2008/03

dgorton’s picture

Issues are just a content type - short description, thumbnail, date and perhaps a few other tidbits. They are then linked to via nodereference(s) from applicable articles. Being a content type, and therefore a node, theming the magazine issue page is a straightforward theming task via the usual node-CONTENT-TYPE.tpl.php.

Drew Gorton
Gorton Studios

Morten_P_Andersen’s picture

Can you name them for me?

:)
Morten
www.lille-web.dk

dgorton’s picture

There's a list of everything used up there, under the title:

Modules Used

Did you have a specific question, though?

Drew Gorton
Gorton Studios

andrewblack’s picture

thanks for sharing

giggler’s picture

Nice!! How do you do the "Sign up for Newsletter" box (and newsletter) - is it from the simplenews module?

dgorton’s picture

That form currently ties into the Restaurants/Events (ASPX) system, which was already handling email functions. Drupal produces the content and templates it - the actual sending of email is handled by that system, however.

Drew Gorton
Gorton Studios

dgorton’s picture

I just made the discovery that I incorrectly attributed one of our Modules in the Module list. We did not use the 'SWFObject' module, but rather the SWFObject API module to embed Flash content.

Apologies!

Drew Gorton
Gorton Studios

ravi_9793’s picture

Great work...... I am just searching for few great Drupal sites.
Thanks for sharing.
http://www.techhunt.org

dgorton’s picture

Thanks! We're proud to be one small example of all the great sites. You probably found a bunch of others, but here are some other good places to check:

I'm sure there are oodles of other good lists, but those are where I would start a hunt for 'good' sites.
Drew Gorton
Gorton Studios

alihammad’s picture

Beautifully done!

Ali Hammad Raza
WordsValley

Mbird’s picture

Now it is a WordPress site - interesting.

dgorton’s picture

Sadly, The Rake was closed and then blended with several other websites in the years since this site was originally built. A lot of changes have happened, and now 'RakeMag.com' is forwarding to what looks like a newsy blog with some Rake branding on it. The site has gone through a few iterations and face-lifts since it stopped being a magazine/publication and although it continued to run our Drupal core site through at least a few of those changes, it looks like that, too, has changed.