diff --git a/css/islandora.objects.css b/css/islandora.objects.css
new file mode 100644
index 00000000..5e03d3f7
--- /dev/null
+++ b/css/islandora.objects.css
@@ -0,0 +1,39 @@
+/**
+ * @file
+ * Styles for rendering grids/lists of objects.
+ */
+.islandora-objects-display-switch {
+ float: right;
+}
+.islandora-objects-grid-item {
+ display: inline-block;
+ width: 20%;
+ min-width: 100px;
+ min-height: 180px;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ margin: 1.5em 1.84%;
+ zoom: 1;
+ *display: inline;
+ _height: 180px;
+}
+.islandora-objects-list-item {
+ padding-bottom: 1.5em;
+ border-bottom: 1px solid #ddd;
+}
+.islandora-objects-list-item .islandora-object-thumb {
+ clear: left;
+ float: left;
+ padding: 3px 0 0;
+ text-align: center;
+ width: 100px;
+}
+.islandora-objects-list-item .islandora-object-caption, .islandora-objects-list-item .islandora-object-description {
+ margin: 0 0 0 130px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.islandora-object-thumb img {
+ width: 100%;
+}
diff --git a/islandora.module b/islandora.module
index 94aedbe0..f800cf6d 100644
--- a/islandora.module
+++ b/islandora.module
@@ -286,6 +286,29 @@ function islandora_theme() {
'file' => 'theme/theme.inc',
'variables' => array('object' => NULL, 'content' => array()),
),
+ // Render a bunch of objects as either a grid or a list.
+ 'islandora_objects' => array(
+ 'file' => 'theme/theme.inc',
+ 'template' => 'theme/islandora-objects',
+ 'variables' => array(
+ 'objects' => NULL,
+ 'display' => NULL,
+ 'page_size' => 20,
+ 'limit' => 10,
+ ),
+ ),
+ // Render a bunch of objects as a grid.
+ 'islandora_objects_grid' => array(
+ 'file' => 'theme/theme.inc',
+ 'template' => 'theme/islandora-objects-grid',
+ 'variables' => array('objects' => NULL),
+ ),
+ // Render a bunch of objects as a list.
+ 'islandora_objects_list' => array(
+ 'file' => 'theme/theme.inc',
+ 'template' => 'theme/islandora-objects-list',
+ 'variables' => array('objects' => NULL),
+ ),
);
}
diff --git a/theme/islandora-objects-grid.tpl.php b/theme/islandora-objects-grid.tpl.php
new file mode 100644
index 00000000..e6d7e140
--- /dev/null
+++ b/theme/islandora-objects-grid.tpl.php
@@ -0,0 +1,17 @@
+
+
diff --git a/theme/islandora-objects-list.tpl.php b/theme/islandora-objects-list.tpl.php
new file mode 100644
index 00000000..67f5f02d
--- /dev/null
+++ b/theme/islandora-objects-list.tpl.php
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
diff --git a/theme/islandora-objects.tpl.php b/theme/islandora-objects.tpl.php
new file mode 100644
index 00000000..5b55eb88
--- /dev/null
+++ b/theme/islandora-objects.tpl.php
@@ -0,0 +1,15 @@
+
+
+
+ $display_links, 'attributes' => array('class' => array('links', 'inline')))); ?>
+
+
+
+
+
diff --git a/theme/theme.inc b/theme/theme.inc
index 87e44fc1..7c43deef 100644
--- a/theme/theme.inc
+++ b/theme/theme.inc
@@ -157,3 +157,64 @@ function islandora_preprocess_islandora_object_print(array &$variables) {
function theme_islandora_object_print(array &$variables) {
return drupal_render($variables['content']);
}
+
+/**
+ * Implements hook_preprocess_theme().
+ */
+function islandora_preprocess_islandora_objects(array &$variables) {
+ module_load_include('inc', 'islandora_paged_content', 'includes/utilities');
+ $display = (empty($_GET['display'])) ? 'grid' : $_GET['display'];
+ $grid_display = $display == 'grid';
+ $list_display = !$grid_display;
+ $query_params = drupal_get_query_parameters($_GET);
+ $variables['display_links'] = array(
+ array(
+ 'title' => t('Grid view'),
+ 'href' => url($_GET['q'], array('absolute' => TRUE)),
+ 'attributes' => array(
+ 'class' => $grid_display ? 'active' : '',
+ ),
+ 'query' => array('display' => 'grid') + $query_params,
+ ),
+ array(
+ 'title' => t('List view'),
+ 'href' => url($_GET['q'], array('absolute' => TRUE)),
+ 'attributes' => array(
+ 'class' => $list_display ? 'active' : '',
+ ),
+ 'query' => array('display' => 'list') + $query_params,
+ ),
+ );
+ // Pager.
+ $objects = $variables['objects'];
+ $limit = $variables['limit'];
+ $page_size = $variables['page_size'];
+ $page = pager_default_initialize(count($objects), $limit);
+ $objects = array_slice($objects, $page * $limit, $limit);
+ $variables['pager'] = theme('pager', array('quantity' => 10));
+ // Content.
+ $map_objects = function($o) {
+ $o = islandora_object_load($o);
+ $url = "islandora/object/{$o->id}";
+ $link_options = array('html' => TRUE, 'attributes' => array('title' => $o->label));
+ $img = theme_image(array('path' => url("$url/datastream/TN/view"), 'attributes' => array()));
+ $description = NULL;
+ $dc = DublinCore::importFromXMLString($o['DC']->content);
+ if ($dc) {
+ $dc = $dc->asArray();
+ $description = $dc['dc:description']['value'];
+ }
+ return array(
+ 'label' => $o->label,
+ 'class' => drupal_strtolower(preg_replace('/[^A-Za-z0-9]/', '-', $o->id)),
+ 'link' => l($o->label, $url, $link_options),
+ 'thumb' => l($img, $url, $link_options),
+ 'description' => $description,
+ );
+ };
+ $objects = array_map($map_objects, $objects);
+ $theme = $grid_display ? 'islandora_objects_grid' : 'islandora_objects_list';
+ $variables['content'] = theme($theme, array('objects' => $objects));
+ $module_path = drupal_get_path('module', 'islandora');
+ drupal_add_css("$module_path/css/islandora.objects.css");
+}