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