Drupal in Libraries


Published on

Overview of Drupal for use in libraries

Published in: Technology, Education
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Drupal in Libraries

  1. 1. Drupal in Libraries Cary Gordon, MLIS The Cherry Hill Company http://chillco.com
  2. 2. Agenda <ul><li>A short chat about Drupal </li></ul><ul><li>Modules (4849 at last count) </li></ul><ul><li>A brief library tour </li></ul><ul><li>Drupal as application framework </li></ul><ul><li>Your reality check is in the mail </li></ul><ul><li>Reading the manuals </li></ul><ul><li>Making good decisions </li></ul>
  3. 3. But First… <ul><li>The Cherry Hill Company </li></ul><ul><ul><li>Library focused development and system integration </li></ul></ul><ul><ul><li>Developed the California State Library website </li></ul></ul><ul><ul><li>Integrated and developed 24/7 Reference (now rolled into OCLC’s QuestionPoint) </li></ul></ul><ul><ul><li>Pre-Drupal, mostly ColdFusion and Java </li></ul></ul><ul><ul><li>We provide a full range of support and development services for Drupal in libraries. </li></ul></ul><ul><li>Active in the local, US and World Drupal communities. </li></ul><ul><ul><li>Board member of the Drupal Association </li></ul></ul><ul><ul><li>Events Manger for Drupal events worldwide </li></ul></ul><ul><ul><li>Drupal evangelist </li></ul></ul><ul><ul><li>Drank the KoolAid </li></ul></ul>
  4. 4. Drupal is different <ul><li>Free and Open Source </li></ul><ul><li>Simple – based on the blogging idiom </li></ul><ul><li>Content Management Framework </li></ul><ul><ul><li>Designed to be a development platform </li></ul></ul><ul><li>The hook system </li></ul><ul><li>Drupal CVS contributions </li></ul>
  5. 5. A Small Corner of the CMS Universe And about 1085 others (http://www.cmsmatrix.org/matrix)
  6. 6. Drupal is designed by the community <ul><li>About 800 contributors to core </li></ul><ul><li>25 Maintainers </li></ul><ul><li>2 Core committers </li></ul><ul><ul><ul><li>Angela Byron </li></ul></ul></ul><ul><ul><ul><li>Dries Buytaert </li></ul></ul></ul><ul><li>http://cvs.drupal.org/viewvc.py/drupal/drupal/MAINTAINERS.txt?view=co </li></ul>
  7. 7. Drupal is built… <ul><li>Standing on the shoulders of… </li></ul><ul><li>Each other </li></ul>
  8. 8. Drupal Principles <ul><li>Modular and extensible.   Drupal aims to provide a slim, powerful core that can be readily extended through custom modules . </li></ul><ul><li>Quality coding.  High quality, elegant, documented code is a priority over roughed-in functionality. </li></ul><ul><li>Standards-based.  Drupal supports established and emerging standards.  Specific target standards include XHTML and CSS. </li></ul><ul><li>Low resource demands.   To ensure excellent performance, Drupal puts a premium on low-profile coding (for example, minimizing database queries).  Drupal should also have minimal, widely-available server-side software requirements.  Specifically, Drupal should be fully operational on a platform with a web server, PHP, and either MySQL or Postgresql. </li></ul><ul><li>Open source.  Drupal is based on the open source philosophy of collaborative free software development and is licensed under the GPL.  Drupal is itself open source and builds on and supports other open source projects.  Specifically, Drupal is coded in the open source scripting language PHP and supports as primary data sources the open source database formats MySQL and Postgresql. </li></ul><ul><li>Ease of use.   Drupal aims for a high standard of usability for developers, administrators, and users. </li></ul><ul><li>Collaboration.   Drupal development supports open, collaborative information sharing systems and approaches. </li></ul>http://drupal.org/principles
  9. 9. Drupal Lingo <ul><li>Node </li></ul><ul><li>Comment </li></ul><ul><li>Block </li></ul><ul><li>Page </li></ul><ul><li>Path </li></ul><ul><li>Taxonomy </li></ul><ul><li>Modules </li></ul><ul><li>Themes </li></ul><ul><li>Core </li></ul><ul><li>Contrib </li></ul>
  10. 10. Drupal Technology Stack Presentation Helpers Drupal LAMP/???P
  11. 11. Best Practices <ul><li>Plan your site. </li></ul><ul><li>Plan for the future. </li></ul><ul><li>Get involved in the community </li></ul><ul><li>Back up your site. </li></ul><ul><li>Test your PHP snippets. </li></ul><ul><li>Observe Drupal Programming Best Practices - http://drupal.org/node/287350 </li></ul><ul><li>Use a version control system. </li></ul><ul><li>Keep your site up-to-date. </li></ul>http://drupal.org/best- practices (with a couple additions)
  12. 12. You’ve been warned! <ul><li>Don’t use a Windows server and IIS (unless you wear Kevlar socks) </li></ul><ul><li>Don't hack core </li></ul>Don't hack core!
  13. 13. Contributed Modules <ul><li>4849 contrib modules in Drupal CVS </li></ul><ul><li>Little concrete information on what they do </li></ul><ul><li>Most start as solutions to specific problems </li></ul><ul><li>Also 570 contrib themes </li></ul>
  14. 14. Cherry Hill module collection library for public library hosting (example) <ul><li>acl customerror logintoboggan views_bulk_operations </li></ul><ul><li>admin_menu date nice_menus views_calc </li></ul><ul><li>advanced_help event nodeasblock views_groupby </li></ul><ul><li>backup_migrate extlink nodewords views_node_feed </li></ul><ul><li>better_formats faceted_search pathauto views_or </li></ul><ul><li>calendar fivestar securepages votingapi </li></ul><ul><li>captcha google_analytics service_links webform </li></ul><ul><li>cck image services workflow worldclock </li></ul><ul><li>cck_redirection imce taxonomy_access wysiwyg </li></ul><ul><li>checkbox_validate imce_wysiwyg token </li></ul><ul><li>computed_field legal views </li></ul><ul><li>content_access link views_bonus </li></ul>
  15. 15. Cherry Hill Drupal root dir (example) <ul><li>lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 cron.php -> ../drupal6/cron.php </li></ul><ul><li>-rw-r--r-- 1 www-user apache 3964 Mar 19 2009 .htaccess </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 includes -> ../drupal6/includes </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 20 Jul 6 16:29 index.php -> ../drupal6/index.php </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 22 Jul 6 16:29 install.php -> ../drupal6/install.php </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 15 Jul 6 16:29 misc -> ../drupal6/misc </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 18 Jul 6 16:29 modules -> ../drupal6/modules </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 profiles -> ../drupal6/profiles </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 robots.txt -> ../drupal6/robots.txt </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 18 Jul 6 16:29 scripts -> ../drupal6/scripts </li></ul><ul><li>drwxrwxr-x 13 www-user apache 4096 Aug 6 18:10 sites </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 17 Jul 6 16:29 themes -> ../drupal6/themes </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 update.php -> ../drupal6/update.php </li></ul><ul><li>lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 xmlrpc.php -> ../drupal6/xmlrpc.php </li></ul>
  16. 16. Example sites
  17. 17. Ann Arbor District Library
  18. 18. Darien Library
  19. 19. Darien Library
  20. 20. Darien Library <ul><li>SOPAC 2 </li></ul><ul><li>http://www.thesocialopac.net/ </li></ul><ul><li>Millennium integration (Locum) </li></ul><ul><li>Locum is an abstraction layer between the ILS and Drupal </li></ul>
  21. 21. Genesee Valley BOCES
  22. 22. Genesee Valley BOCES
  23. 23. Genesee Valley BOCES <ul><li>Catalog </li></ul><ul><li>Research tools </li></ul><ul><li>Student resources </li></ul><ul><li>Teacher resources </li></ul><ul><li>System contributed & school contributed </li></ul>
  24. 24. Genesee Valley BOCES <ul><li>Using Drupal as a framework </li></ul><ul><li>Took everything that they could from contrib </li></ul><ul><li>Wrote the rest </li></ul>sites/all/modules: contrib: calendar jquery_calendar spellchecker cck jstools tagadelic cck_redirection link taxonomy_super_select contemplate link_views_rss tinymce date nodequeue user_import devel panels views directory porterstemmer views_bonus faceted_search prepopulate views_podcast fivestar refine_by_taxo votingapi imagecache search_config workflow imagefield similarterms jcarousellite slidebox fish: bcckreview dedupe ez_amazon pathfinder custom details marc
  25. 25. Idaho Commission for Libraries
  26. 26. Troy Public Library <http://troylibrary.info>
  27. 27. Benicia Public Library - LLWIP
  28. 28. Camerena Memorial Library - LLWIP
  29. 29. North State Cooperative Library System
  30. 30. Example applications
  31. 31. California State University San Marcos
  32. 32. California State University San Marcos <ul><li>Digital repository/archive </li></ul><ul><li>Intranet/Extranet </li></ul><ul><li>E-resource directory/manager </li></ul>Ian Chan <ichan@csusm.edu>
  33. 33. California State University San Marcos
  34. 34. SFU Library Thesis Assistant
  35. 35. Simon Fraser University Library Thesis Submission/Management <ul><li>Replaces legacy submission app based on single CGI script and Excel files </li></ul><ul><li>Allows students to submit their theses, inc. PDF and supplemental files </li></ul><ul><li>Allows Library Thesis Office staff to </li></ul><ul><ul><li>Audit (i.e., approve) thesis </li></ul></ul><ul><ul><li>Manage basic information about correspondence with student </li></ul></ul><ul><ul><li>Manage “degree” records that contain details about departments, programs, etc. </li></ul></ul><ul><li>Allows Grad Records staff to get lists of students </li></ul><ul><li>Going live mid October </li></ul>Mark Jordan <mjordan@sfu.ca>
  36. 36. Albert R. Mann Library - Cornell
  37. 37. Anchor Archive Zine Library http://www.robertsstreet.org/n/searchinfields Amanda Stevens <amandastevens@zenbe.com>
  38. 38. Curation Tool William Hayes < [email_address] >
  39. 39. Curation Tool <ul><li>Node import </li></ul><ul><li>CCK </li></ul><ul><li>Exhibit (using Josh Huckabee's tutorial). </li></ul><ul><li>Allows us to import a spreadsheet of a lot of data and have very quick and powerful data filtering/visualization set up very quickly with the ability to curate the data at will which we did not have using Exhibit alone.  Of course, once it's set up, adding data manually is pretty easy and we also have the ability to programmatically add new data records. </li></ul><ul><li>William Hayes, PhD, Director of Decision Support, Biogen Idec <william.s.hayes@gmail.com> </li></ul>
  40. 40. McMaster University Guides
  41. 41. Simon Fraser University Library Thesis Submission/Management Application <ul><li>Replaces legacy submission app based on single CGI script and Excel files </li></ul><ul><li>Allows students to submit their theses, inc. PDF and supplemental files </li></ul><ul><li>Allows Library Thesis Office staff to </li></ul><ul><ul><li>Audit (i.e., approve) thesis </li></ul></ul><ul><ul><li>Manage basic information about correspondence with student </li></ul></ul><ul><ul><li>Manage “degree” records that contain details about departments, programs, etc. </li></ul></ul><ul><li>Allows Grad Records staff to get lists of students </li></ul><ul><li>Going live mid October </li></ul>
  42. 44. Islandora http://islandora.org/Module
  43. 45. Drupal 7 <ul><li>Currently in code freeze: </li></ul><ul><li>Bug patches only </li></ul><ul><ul><li>With a few exceptions </li></ul></ul><ul><li>Release when it’s ready </li></ul><ul><li>Expanded automated test coverage should shorten cycle </li></ul><ul><li>#D7CX pledge http://bit.ly/121D6T - components ready on the day Drupal 7 is released </li></ul>
  44. 46. Drupal 7 changes - General <ul><li>Install consolidation </li></ul><ul><ul><ul><li>Fewer pages with more logical arrangement </li></ul></ul></ul><ul><li>Users can cancel accounts! </li></ul><ul><li>Improved translation interface </li></ul><ul><li>Improved and expanded help integration </li></ul><ul><li>Administration theme </li></ul><ul><li>More error reporting options </li></ul>
  45. 47. Drupal 7 changes - Theming <ul><li>Page template XHTML refactored </li></ul><ul><li>More semantic class and ID names </li></ul><ul><li>Friendlier to CSS only layout </li></ul><ul><ul><ul><li>CSS only means no template changes needed (i.e. no PHP) </li></ul></ul></ul><ul><li>Better JavaScript cross library integration </li></ul><ul><li>JQuery 3.x </li></ul><ul><li>Library calls are wrapped </li></ul>(function($) { $('a').fadeOut().fadeIn(); })(jQuery);
  46. 48. Drupal 7 changes – automated testing <ul><li>SimpleTest integration </li></ul><ul><li>http://testing.drupal.org </li></ul>
  47. 49. Drupal 7 changes - DBTNG <ul><li>Using PHP data objects (PDO) </li></ul><ul><li>Direct support of MySQL PostgreSQL & SQLite </li></ul><ul><li>Implied support for others </li></ul><ul><li>Transaction support </li></ul><ul><li>Replication support (master/slave) </li></ul><ul><ul><ul><li>Potential for update automation </li></ul></ul></ul><ul><li>Dynamic select queries </li></ul><ul><li>Geek alert: </li></ul><ul><ul><ul><li>Hook_query_alter replaces hook_db_rewrite_sql </li></ul></ul></ul>
  48. 50. Drupal 7 changes - DBTNG <ul><li>New static select query syntax </li></ul><ul><ul><li>Drupal 6: </li></ul></ul><ul><ul><li>Drupal 7: </li></ul></ul>$node = db_query('SELECT nid, title FROM {node} WHERE type = :type AND nid = :nid', array(':type' => $type, ':nid' => $nid))->fetchObject(); $result = db_query(&quot;SELECT nid, title FROM {node} WHERE type = '%s' AND nid = %d&quot;, array($type, $nid)); $node = db_fetch_object($result);
  49. 51. Drupal 7 changes - DBTNG <ul><li>New dynamic select query: </li></ul><ul><ul><li>Drupal 6: </li></ul></ul><ul><ul><li>Drupal 7: </li></ul></ul><ul><li>$select = db_select('node', 'n') </li></ul><ul><ul><li>->fields('n', array('nid')) </li></ul></ul><ul><ul><li>->condition('promote', 1) </li></ul></ul><ul><ul><li>->condition('status', 1) </li></ul></ul><ul><ul><li>->orderBy('sticky', 'DESC') </li></ul></ul><ul><ul><li>->orderBy('created', 'DESC') </li></ul></ul><ul><ul><li>->extend('PagerDefault') </li></ul></ul><ul><ul><li>->limit(variable_get('default_nodes_main', 10)) </li></ul></ul><ul><ul><li>->addTag('node_access'); </li></ul></ul>$result = pager_query(db_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
  50. 52. Drupal 7 – Field API <ul><li>CCK API -> core </li></ul><ul><li>CCK UI -> contrib </li></ul><ul><li>Not node specific </li></ul><ul><ul><ul><li>Use fields in users, etc. </li></ul></ul></ul><ul><li>Storage abstraction </li></ul><ul><ul><ul><li>Multiple databases (potential) </li></ul></ul></ul><ul><ul><ul><li>Amazon S3 (or …) </li></ul></ul></ul>
  51. 53. Drupal 7 – and more… <ul><li>File API </li></ul><ul><ul><ul><li>Files are now first class objects </li></ul></ul></ul><ul><ul><ul><ul><ul><li>hook_file_load(), _save(), _move() </li></ul></ul></ul></ul></ul><ul><li>Registry </li></ul><ul><ul><ul><li>Automatically caches functions, classes, interfaces </li></ul></ul></ul><ul><li>$page object </li></ul><ul><li>Image handling in core (maybe) </li></ul>
  52. 54. Drupal is not Magic <ul><li>It will not: </li></ul><ul><ul><li>Design your site </li></ul></ul><ul><ul><li>Write your content </li></ul></ul><ul><ul><li>Keep it up to date </li></ul></ul><ul><li>The real limitations are time and money </li></ul><ul><li>You must start with a clear idea of what you want to accomplish </li></ul><ul><li>Keep your initial install as simple as possible </li></ul><ul><li>The beauty of a content management system is that it allows you to keep your site fresh </li></ul><ul><li>The hell of a content management system is that, if your content is stale, you have nobody to blame </li></ul>
  53. 55. Recommended Reading <ul><li>Building powerful and robust websites with Drupal 6, David Mercer </li></ul><ul><li>Learning Drupal 6 Module Development, Matt Butcher </li></ul><ul><li>Pro Drupal Development, Second Edition, John K. VanDyk </li></ul><ul><li>Cracking Drupal, Greg Knaddison MUST READ!!! </li></ul>
  54. 56. More Recommended Reading <ul><li>Drupal handbooks - http://drupal.org/handbook </li></ul><ul><li>The code - http://cvs.drupal.org/viewvc.py/drupal </li></ul><ul><li>The APIs - http://api.drupal.org </li></ul><ul><li>Getting started - http://drupal.org/getting-started </li></ul>
  55. 57. Recommended sites <ul><li>Drupal Library Group - http://groups.drupal.org/libraries </li></ul><ul><li>DrupaLib - http://drupalib.interoperating.info/ </li></ul><ul><li>Drupal4lib mailing list – http://listserv.uic.edu/archives/drupal4lib.html </li></ul>
  56. 58. Can’t say it enough… Don't hack core!
  57. 59. Cary Gordon, MLIS The Cherry Hill Company Los Angeles, California http://chillco.com [email_address] (310) 397-2999