Thursday, September 27, 2012

How to load Zotero into a webpage with 3 lines of PHP

It took me a little while to figure out how to load a formatted bibliography from Zotero into a Drupal page, so I thought I'd share what I came up with.

If publicly store your citations on, you can also share these citations by means of Zotero's Read API.  The documentation to the Read API may initially look a little intimidating to non-programmers, but if you take a look at the examples provided by the documentation, you see that just by adding together clearly defined 'parts' you can easily create a link to some or all of your own Zotero library.

Here's a bibliography of mine formatted using APA:

Looking at the API, I think the only limitation that I think I need a workaround for that you can only generate COinS if you are generating an ATOM feed.

But I'm getting ahead myself. My goal is to embed this bibliography into a Drupal page. This way I - and others if we embed a shared bibliography - can use Zotero to handle citations and let Drupal handle the rest of the page that surrounds the bibliography.

And it can be done with three lines of PHP:

And those lines loads the url of the bibliography into the body of the page:

If there is an even easier or better way to do this, please let me know.


Amanda French said...

Is that a dynamic bibliography? In other words, if you add to it, does it update in the Drupal page? I'm guessing yes . . .

Very cool. Thanks for posting it.

Mita Williams said...

Yes - I've tested it out. It's not *instantaneous* but an update I made about an hour ago has already appeared.

Christof Schöch said...

Hi there, great idea! Does the PHP text format need any special settings?

Mita Williams said...

Hmm. I don't know if the PHP text format needs any special settings. This was just a proof of concept done within Drupal. Perhaps a test within WordPress would confirm whether it's necessary.

hatori kibble said...


interesting stuff, thanks!

Maybe you could also use JQuery's load function, than you would not need php (

But I guess the inclusion is only possible if you set your Zotero library to public?
(I got a "forbidden" error when I tried to follow your example with a collection of mine..)

hatori kibble said...

OK, please ignore my last comment ;-)

I found out about the use of API keys and that .load doesn't work across domains.. :-(

steve powell said...

this is great, trying it out for drupal. However although the feed itself provides foreign characters correctly, e.g., something messes them up, I guess it is the php echo, so we get ć instead of ć etc.. Don't suppose you have any ideas?

Erik said...

Thanks, this is a really promising technique. Can you adapt it to get a slice of your Zotero collection? For instance, to return the results for a single source or a given author's works from within the collection? If so, this would be the solution to a lot of little problems for me.

Mita Williams said...

Yes, you can slice you collection in a variety of ways: