Drupal in Libraries

Preview:

DESCRIPTION

Overview of Drupal for use in libraries

Citation preview

Drupal in Libraries

Cary Gordon, MLISThe Cherry Hill Companyhttp://chillco.com

Agenda

A short chat about Drupal

Modules (4849 at last count)

A brief library tour

Drupal as application framework

Drupal 7

Resources

But First…The Cherry Hill Company

Library focused development and system integrationDeveloped the California State Library website Integrated and developed 24/7 Reference (now rolled into

OCLC’s QuestionPoint)Pre-Drupal, mostly ColdFusion and JavaWe provide a full range of support and development services

for Drupal in libraries.

Active in the local, US and World Drupal communities.Board member of the Drupal AssociationEvents Manger for Drupal events worldwideDrupal evangelistDrank the KoolAid

Drupal is different

Free and Open Source

Simple – based on the blogging idiom

Content Management Framework

Designed to be a development platform

The hook system

Drupal CVS contributions

A Small Corner of the CMS Universe

And about 1085 others (http://www.cmsmatrix.org/matrix)

Drupal is designed bythe communityAbout 800

contributors to core

25 Maintainers

2 Core committers

Angela ByronDries Buytaert

http://cvs.drupal.org/viewvc.py/drupal/drupal/MAINTAINERS.txt?view=co

Drupal is built…

Standing on the shoulders of…

Each other

Drupal Principles Modular and extensible.  Drupal aims to provide a slim, powerful core that can be

readily extended through custom modules.

Quality coding.  High quality, elegant, documented code is a priority over roughed-in functionality.

Standards-based.  Drupal supports established and emerging standards.  Specific target standards include XHTML and CSS.

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.

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.

Ease of use.  Drupal aims for a high standard of usability for developers, administrators, and users.

Collaboration.  Drupal development supports open, collaborative information sharing systems and approaches. http://drupal.org/principles

Drupal LingoNode

Comment

Block

Page

Path

Taxonomy

Modules

Themes

Core

Contrib

PresentationHelpersDrupalLAMP/???P

Drupal Technology Stack

Best PracticesPlan your site.

Plan for the future.

Get involved in the community

Back up your site.

Test your PHP snippets.

Observe Drupal Programming Best Practices - http://drupal.org/node/287350

Use a version control system.

Keep your site up-to-date.http://drupal.org/best-practices (with a couple additions)

You’ve been warned!Don’t use a Windows server and IIS

(unless you wear Kevlar socks)

Don't hack core

Don't hack core!

Contributed Modules

4849 contrib modules in Drupal CVS

Little concrete information on what they do

Most start as solutions to specific problems

Also 570 contrib themes

Cherry Hill module collection library for public library hosting (example)

acl customerror logintoboggan views_bulk_operations

admin_menu date nice_menus views_calc

advanced_help event nodeasblock views_groupby

backup_migrate extlink nodewords views_node_feed

better_formats faceted_search pathauto views_or

calendar fivestar securepages votingapi

captcha google_analytics service_links webform

cck image services workflow worldclock

cck_redirection imce taxonomy_access wysiwyg

checkbox_validate imce_wysiwyg token

computed_field legal views

content_access link views_bonus

We keep a collection of shared modules in our Subversion repository.

Cherry Hill Drupal root dir (example)

lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 cron.php -> ../drupal6/cron.php

-rw-r--r-- 1 www-user apache 3964 Mar 19 2009 .htaccess

lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 includes -> ../drupal6/includes

lrwxrwxrwx 1 www-user apache 20 Jul 6 16:29 index.php -> ../drupal6/index.php

lrwxrwxrwx 1 www-user apache 22 Jul 6 16:29 install.php -> ../drupal6/install.php

lrwxrwxrwx 1 www-user apache 15 Jul 6 16:29 misc -> ../drupal6/misc

lrwxrwxrwx 1 www-user apache 18 Jul 6 16:29 modules -> ../drupal6/modules

lrwxrwxrwx 1 www-user apache 19 Jul 6 16:29 profiles -> ../drupal6/profiles

lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 robots.txt -> ../drupal6/robots.txt

lrwxrwxrwx 1 www-user apache 18 Jul 6 16:29 scripts -> ../drupal6/scripts

drwxrwxr-x 13 www-user apache 4096 Aug 6 18:10 sites

lrwxrwxrwx 1 www-user apache 17 Jul 6 16:29 themes -> ../drupal6/themes

lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 update.php -> ../drupal6/update.php

lrwxrwxrwx 1 www-user apache 21 Jul 6 16:29 xmlrpc.php -> ../drupal6/xmlrpc.php

Keeping the core Drupal installation in its own directory and symbolically linking to its files simplifies the process of maintaining it. New versions are put in the drupal6 directory and only the needed files and directories are linked in.

The sites directory is managed in subversion.

Example sites

Ann Arbor District Library

Darien Library

Darien Library

Darien LibrarySOPAC 2

http://www.thesocialopac.net/

Millennium integration (Locum)

Locum is an abstraction layer between the ILS and Drupal

Genesee Valley BOCES

Genesee Valley BOCES

Genesee Valley BOCES

Catalog

Research tools

Student resources

Teacher resources

System contributed & school contributed

Genesee Valley BOCESUsing Drupal as a framework

Took everything that they could from contrib

Wrote the rest

sites/all/modules:

contrib:calendar jquery_calendar spellcheckercck jstools tagadeliccck_redirection linktaxonomy_super_selectcontemplate link_views_rss tinymcedate nodequeue user_importdevel panels viewsdirectory porterstemmer views_bonusfaceted_search prepopulate views_podcastfivestar refine_by_taxo votingapiimagecache search_config workflowimagefield similartermsjcarousellite slidebox

fish:bcckreview dedupe ez_amazonpathfindercustom details marc

Idaho Commission for Libraries

Troy Public Library

<http://troylibrary.info>

Benicia Public Library - LLWIP

Camerena Memorial Library - LLWIP

Camerena Memorial Library - LLWIP

North State Cooperative Library System

Example applications

California State University San Marcos

California State University San MarcosDigital repository/archive

Intranet/Extranet

E-resource directory/manager

Ian Chan <ichan@csusm.edu>

California State University San Marcos

SFU Library Thesis Assistant

Simon Fraser University LibraryThesis Submission/Management

Replaces legacy submission app based on single CGI script and Excel files

Allows students to submit their theses, inc. PDF and supplemental files

Allows Library Thesis Office staff to Audit (i.e., approve) thesis Manage basic information about correspondence with student Manage “degree” records that contain details about

departments, programs, etc.

Allows Grad Records staff to get lists of students

Going live mid October

Mark Jordan <mjordan@sfu.ca>

Albert R. Mann Library - Cornell

Anchor Archive Zine Library

http://www.robertsstreet.org/n/searchinfieldsAmanda Stevens <amandastevens@zenbe.com>

Curation Tool

William Hayes <william.s.hayes@gmail.com>

Curation Tool

Node import

CCK

Exhibit(using Josh Huckabee's tutorial - http://bit.ly/zv7LJ )

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.

William Hayes, PhD, Director of Decision Support, Biogen Idec<william.s.hayes@gmail.com>

McMaster University Guides

http://library.mcmaster.ca/guides/

Islandora

http://islandora.org/Module

Drupal 7

Currently in code freeze:

Bug patches only

With a few exceptions

Release when it’s ready

Expanded automated test coverage should shorten cycle

#D7CX pledge http://bit.ly/121D6T - components ready on the day Drupal 7 is released

Drupal 7 changes - GeneralInstall consolidation

Fewer pages with more logical arrangement

Users can cancel accounts!

Improved translation interface

Improved and expanded help integration

Administration theme

More error reporting options

Drupal 7 changes - ThemingPage template XHTML refactored

More semantic class and ID names

Friendlier to CSS only layout

CSS only means no template changes needed (i.e. no PHP)

Better JavaScript cross library integration

JQuery 3.x

Library calls are wrapped

(function($) {$('a').fadeOut().fadeIn();

})(jQuery);

Drupal 7 changes – automated testing

SimpleTest integration

http://testing.drupal.org

Drupal 7 changes - DBTNGUsing PHP data objects (PDO)

Direct support of MySQL PostgreSQL & SQLite

Implied support for others

Transaction support

Replication support (master/slave)

Potential for update automation

Dynamic select queries

Geek alert:

Hook_query_alter replaces hook_db_rewrite_sql

Drupal 7 changes - DBTNGNew static select query syntax

Drupal 6:

Drupal 7:

$node = db_query('SELECT nid, title FROM {node} WHERE type = :type AND nid = :nid', array(':type' => $type, ':nid' => $nid))->fetchObject();

$result = db_query("SELECT nid, title FROM {node} WHERE type = '%s' AND nid = %d", array($type, $nid));$node = db_fetch_object($result);

Drupal 7 changes - DBTNGNew dynamic select query:

Drupal 6:

Drupal 7:

$select = db_select('node', 'n')->fields('n', array('nid'))->condition('promote', 1)->condition('status', 1)->orderBy('sticky', 'DESC')->orderBy('created', 'DESC')->extend('PagerDefault')->limit(variable_get('default_nodes_main', 10))->addTag('node_access');

$result = pager_query(db_rewrite_sql('SELECT n.nid FROM {node} nWHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC,n.created DESC'), variable_get('default_nodes_main', 10));

Drupal 7 – Field API

CCK API -> core

CCK UI -> contrib

Not node specific

Use fields in users, etc.

Storage abstraction

Multiple databases (potential)

Amazon S3 (or …)

Drupal 7 – and more…

File API

Files are now first class objects

hook_file_load(), _save(), _move()

Registry

Automatically caches functions, classes, interfaces

$page object

Image handling in core (maybe)

Drupal is not Magic It will not:

Design your site Write your content Keep it up to date

The real limitations are time and money

You must start with a clear idea of what you want to accomplish

Keep your initial install as simple as possible

The beauty of a content management system is that it allows you to keep your site fresh

The hell of a content management system is that, if your content is stale, you have nobody to blame

Recommended Reading

Building powerful and robust websites with Drupal 6, David Mercer

• Learning Drupal 6 Module Development, Matt Butcher

• Pro Drupal Development, Second Edition, John K. VanDyk

• Cracking Drupal, Greg KnaddisonMUST READ!!!

More Recommended Reading

Drupal handbooks - http://drupal.org/handbook

The code - http://cvs.drupal.org/viewvc.py/drupal

The APIs - http://api.drupal.org

Getting started - http://drupal.org/getting-started

Recommended sites

Drupal Library Group - http://groups.drupal.org/libraries

DrupaLib - http://drupalib.interoperating.info/

Drupal4lib mailing list – http://listserv.uic.edu/archives/drupal4lib.html

Can’t say it enough…

Don't hack core!

Cary Gordon, MLISThe Cherry Hill CompanyLos Angeles, Californiahttp://chillco.comcgordon@chillco.com(310) 397-2999

Recommended