数字化技能提升教程,数字化时代生存宝典

数字化百科 / 产品文档 / Gallery:如何为子相册列表使用缩略图

Gallery:如何为子相册列表使用缩略图

查看全部产品文档命名空间: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(, ), null);
}

/*新增代码开始*/
list ($ret, $thumbs) = GalleryCoreApi::fetchThumbnailsByItemIds($treeIds);
if ($ret->isError()) {
return array($ret->wrap(, ), 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部分,将:



{$theme.treeItems[$node.id].title|default:$theme.treeItems[$node.id].pathComponent|markup}

替换为:


{if !empty($theme.treeItems[$node.id].thumbnail)}

{g->image
item=$theme.treeItems[$node.id]
image=$theme.treeItems[$node.id].thumbnail
maxSize=60
title=$theme.treeItems[$node.id].title}

{/if}

这将进行检查以保证有缩略图(如果是空相册的情况),并在存在缩略图的情况下显示缩略图。如果你想显示空相册,就添加"else",这样就会显示源代码中的标题了。如果你希望缩略图尺寸能大点的话,修改maxSize设定即可。

如果你想联机显示所有缩略图的话,将整个部分替换为如下内容。如果只列出直接子相册(第一层子相册)的话,效果会最好。


{if $theme.params.showSubalbums}
{if !empty($theme.tree[$child.id])}


Subalbums:





{/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;
}