Effective January 1, 2010, this site does not use Drupal and instead uses only WordPress. Some of the links below may not work.
I set up a little project for myself this weekend: how could I use Drupal to put together a catalog of my science fiction and fantasy books for my website, and do this as efficiently as possible? I also wanted to have the book information link to Amazon so people could learn more about the books and possibly purchase them. Note that this is in addition to my listing of Hugo and Nebula award winners for best science fiction and fantasy novels.
My experience with Drupal was basic but not completely elementary. All the non-blog content on my website is in Drupal and I know enough about looking for and using modules (addons) that can give me more functionality. However, not all the modules are well documented and using them together can be an interesting learning experience. I chose this project to provide that and to play with some ideas that might be the foundation of later projects. If you are looking at doing a similar project, I hope this gives you an idea where to start. I’m still early in this, so this final catalog may very well change in structure by the time I’m done. The way I make it will get better too.
Let me begin by thanking the people who pointed me in the right direction on Twitter: Amy Stephen, David Wheeler, David Lanier, Bob Morse and Dave Reid.
At the moment, by catalog listing is pretty basic:
To cut to the punchline: there is no ready-made solution, but it is not hard to build one using the CCK (Content Construction Kit), Views, and Amazon modules for Drupal. These are all very powerful, but of the the three, the Amazon module is the least well documented. I should also add that I’m using Drupal 6 here in September, 2009. Drupal 7 is on the horizon and I know that some things from CCK, at least, will be shifting into the core.
The basic idea is that you need to create a new content type to hold your book data. Drupal comes with several more or less built-in content types like blog entries, pages, and stories. (Drupal is infinitely flexible and wonderful, but some features and capabilities are not enabled by default.)
You create a new content type in
Administer > Content management. After playing around with this for a while and experimenting with the Amazon modules, I decided that I just needed four fields:
- ASIN: this is an Amazon unique identifier, and in the case of a book is the same as the ISBN-10 number
- Title: though I can get this from the extracted Amazon information, it is useful to be able to know which book I am editing since the ASIN is rather cryptic
- Category: this is the Amazon category of the book such as Entertainment, History, Politics, or, in my case, Science Fiction & Fantasy. The list is often displayed in the left column when browsing books in Amazon. This information is not available in the information retrieved via the ASIN, so I’m adding it manually.
- Status: this is “Read”, “Reading”, or “Unread”. I own all the books, so this simple scheme suffices.
If you look at the screenshot, all information other than the category and status are gotten via Amazon look-up based on the ASIN, including the book cover images.
Here are some of the things you need to do:
- Install Drupal and get a basic understanding for how it works.
- Install and enable the CCK (Content Construction Kit), Views, and Amazon modules for Drupal.
Administer > Content managementcreate a new content type called Book Information. The fields are listed above. The title is the default node title text; the ASIN is an Amazon item; the category is a text field using the checkbox/radio buttons with 1 value allowed; and the status is the same with the three values shown above. The title is always required and make the others required as well. I made the default value for category “Science Fiction & Fantasy” and the default status “Read.”
- Now go to
Create Contentand make a few nodes. That is, add a few books of Book Information content type. Look up the ASINs on Amazon and enter the title. As I said above, the ASIN for a book is the same as the ISBN-10 value. For titles, move beginning words like “The” and “A” to the end, as in “Curse of Chalion, The”. This will help the initial sorting.
- So now we can create the content and we have a dedicated type. We need a view and a page to show it. I’m still tinkering with this, but go to
Administer > Site building > Viewsto get started.
- Click on
Addon top and enter a view name and a description. Create the view as a Node (ignore the Amazon item option) and hit the
- Most of what you’ll be doing in
Defaultsbut create a page to
Displayin the upper lefthand corner. On the lower left where it says
Path: None, click the
Noneand add a name so that you can access your page. In the
Basic Settingsarea you click on the values to change them, just as you did with
None. While still on the page, change the
Titleto something interesting. I used “My Science Fiction and Fantasy Library”.
- Go back to the upper lefthand corner and click
- The most important thing to do, and the thing that took me the longest to figure out, is to click the “+” next to
Relationshipsin the top middle. Click the box next to
Save. This now makes a lot of extra fields available to you, all created via the ASIN from information retrieved from Amazon.
- You will now add seven fields in the middle
(field_asin_asin) Amazon: Product image (field_asin_asin) Amazon: Title Title (field_asin_asin) Amazon: Participant name Author (field_asin_asin) Amazon: Publisher Publisher (field_asin_asin) Amazon: Pages Pages Content: Category Default Content: Status Default
- The first 5 are all generated from the ASIN, and the category and status are our regular content fields. Note that I changed the display name of “Participant name” to “Author”. Again, you can see these in the screenshot above. I did not put a label on the small image since visually I associate that with the title. Note that I am not using the title field that we manually defined, I’m using the title as gotten from Amazon via the ASIN.
- Make sure you keep hitting
Saveas appropriate. If you don’t, your changes will not be preserved.
- Generally you use the “+” button in each of the sections and the up-down-arrows button to change the order in which information is displayed or processed.
- My Basic Information section looks like:
Name: Defaults Title: My Science Fiction and Fantasy Library Style: Table Use AJAX: Yes Use pager: Yes Items per page: 25 More link: No Distinct: No Access: Unrestricted Caching: None Exposed form in block: No Header: Full HTML Footer: None Empty text: None Theme: Information
- Click the little gear button after you have changed the style to
Table. This allows you to do fancy things with the columns (such as combine them) and make them sortable. All my columns except the image one are sortable.
- The pager option lets you put only a subset of the book entries on a page, and then adds “previous” and “next” clickable text at the bottom of the page. I have it set to show 25 items per page.
Sort Criteriasection looks like:
Node: Title ascand this is the only use in the view of our basic title content field. Since we moved the “The” and “A” words, the initial sort will be correct. If you start clicking the columns to sort, the definite and indefinite articles will be used in ordering the titles, unfortunately.
- Finally, I have three filters:
(field_asin_asin) Amazon: ASIN not empty Content: Category = Science Fiction & Fantasy (field_asin_asin) Amazon: Participant role contains author
This means that we only want entries that have Amazon items (ASIN not empty), in the “Science Fiction & Fantasy” category, and the participant we list is the author. Note that multiple authors or others such as illustrators will each be displayed in separate entries, by default. There is a more general participant field, but for some reason it is not sortable. I’m still working on this. My sense is that I should first be checking for the correct content type, but the ASIN being non-empty works for now. Note to self: fix.
I think that’s about it. Go the URL of the path you entered and look at your work. In fact, do this as you go along.
As I said, I’m just getting into this and will undoubtedly change things as I learn more. Suggestions for corrections and improvements in the comments are very welcome. I’ll eventually give an update when any new and improved version stabilizes.
Let me reiterate that the relationship connection to the ASIN was key to making this work.