Gallery:如何为子相册列表使用缩略图
Gallery 2.1.1版本[ ]
修改classic外观主题以显示子相册缩略图[ ]
注2:可在外观主题选项页面启用此特点。 补丁针对gallery 2.1.1版本。 补丁文件可在此 找到。
注:这些指导内容仅适用于Gallery 2 beta 4或更新版本,因为自beta4开始外观主题系统就与以往不同了。
每个父族相册都可以显示一个其下子相册的列表,而子相册还可以有子相册,深度由你决定。但这些相册只是以文本方式显示的。如果你想看到这些子相册以缩略图样式显示出来,而不是一列相册标题的话,就需要对外观主题做修改了。
对theme.inc的修改[ ]
我针对classic外观主题的2.1.1版本做了一个补丁,以应用这里提及的修改。g2-theme-classic-theme.inc.diff Mastalee 2006年7月14日,12:46 (PDT)
Theme.inc可在外观主题文件夹根目录下找到。你需要添加一些代码,这样才能让那个缩略图在模板中可用。
在showAlbumPage函数下,做此2处修改:
if (!empty($treeIds)) { list ($ret, $treeItems) = GalleryCoreApi::loadEntitiesById($treeIds); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } /*新增代码开始*/ list ($ret, $thumbs) = GalleryCoreApi::fetchThumbnailsByItemIds($treeIds); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } /*新增代码结束*/ } $theme['tree'] = $treeList; $theme['treeItems'] = array(); foreach ($treeItems as $treeItem) { $theme['treeItems'][$treeItem->getId()] = $treeItem->getMemberData(); /*新增代码开始*/ if (isset($thumbs[$treeItem->getId()])) { $theme['treeItems'][$treeItem->getId()]['thumbnail'] = $thumbs[$treeItem->getId()]->getMemberData(); } /*新增代码结束*/
对album.tpl的修改[ ]
album.tpl 2.1.1版的修改在此补丁文件中:g2-theme-classic-album.tpl.diff
--Mastalee 2006年7月14日,12:48 (PDT)
Album.tpl可在外观主题的模板目录下找到。
子相册的显示是在此部分完成的:
{if $theme.params.showSubalbums} /*middle part snipped*/ {/if}
源代码的关键部分是列表项目。如果你想保留tree building部分,将:
<a href="{g->url arg1="view=core.ShowItem" arg2="itemId=`$node.id`"}"> {$theme.treeItems[$node.id].title|default:$theme.treeItems[$node.id].pathComponent|markup} </a>
替换为:
{if !empty($theme.treeItems[$node.id].thumbnail)} <a href="{g->url arg1="view=core:ShowItem" arg2="itemId=`$node.id`"}"> {g->image item=$theme.treeItems[$node.id] image=$theme.treeItems[$node.id].thumbnail maxSize=60 title=$theme.treeItems[$node.id].title} </a> {/if}
这将进行检查以保证有缩略图(如果是空相册的情况),并在存在缩略图的情况下显示缩略图。如果你想显示空相册,就添加"else",这样就会显示源代码中的标题了。如果你希望缩略图尺寸能大点的话,修改maxSize设定即可。
如果你想联机显示所有缩略图的话,将整个部分替换为如下内容。如果只列出直接子相册(第一层子相册)的话,效果会最好。
{if $theme.params.showSubalbums} {if !empty($theme.tree[$child.id])} <p> Subalbums:<br /> <ul style="display:inline"> {foreach from=$theme.tree[$child.id] item=node} <li style="display:inline"> {if !empty($theme.treeItems[$node.id].thumbnail)} <a href="{g->url arg1="view=core:ShowItem" arg2="itemId=`$node.id`"}"> {g->image item=$theme.treeItems[$node.id] image=$theme.treeItems[$node.id].thumbnail maxSize=60 title=$theme.treeItems[$node.id].title} </a> {/if} </li> {/foreach} </ul> </p> {/if}
Gallery 2.2.X版本[ ]
你可能已经读过了Mastalee给的内容,尤其是album.tpl,他/她对该文件所作的修改对我来说可以用。我不会在此进行多余的复制了。
这是来自classic外观主题2.2.3版theme.inc的整个函数,经修改以支持子相册列表的缩略图显示样式。我包括进整合函数,这样就能明白所作的修改与其他代码的关系了。但在下个版本中可能会完全变貌,所以你需要确切地懂得旧代码的处理方法,这样在新代码出来后就能知道如何添加缩略图了。
你应该可以剪切并将此整个区块粘贴到原始的_buildTree函数之上。
theme.inc[ ]
/** * 为子相册树建立模板数据 * @return object GalleryStatus a status code * @access private */ function _buildTree($childIds, &$treeList, &$treeItems, $maxDepth, $subalbumSort, $userId) { list ($ret, $items) = GalleryCoreApi::loadEntitiesById($childIds); if ($ret) { return $ret; } $treeIds = array(); foreach ($items as $item) { if (!GalleryUtilities::isA($item, 'GalleryAlbumItem')) { continue; } if ($subalbumSort) { /* Apply sort preference of each album */ $ret = $this->_doBuildTree($item, $item->getId(), $treeList, $treeItems, $maxDepth, $userId, 1); if ($ret) { return $ret; } } else { $id = $item->getId(); list ($ret, $tree) = GalleryCoreApi::fetchAlbumTree($id, $maxDepth, $userId); if ($ret) { return $ret; } $treeList[$id] = array(); $this->_parseTree($tree, $treeList[$id], $treeIds); } } if (!empty($treeIds)) { list ($ret, $items) = GalleryCoreApi::loadEntitiesById($treeIds); if ($ret) { return $ret; } /* 新代码 */ list ($ret, $thumbnail) = GalleryCoreApi::fetchThumbnailsByItemIds($treeIds); if ($ret) { return $ret; } /* 新代码结束*/ foreach ($items as $item) { $treeItems[$item->getId()] = (array)$item; /*新代码*/ if(isset($treeItems[$item->getId()])) { $treeItems[$item->getId()]['thumbnail'] = (array)$thumbnail[$item->getId()]; } /*新代码结束*/ } } return null; }