按作者显示标签云

4

我有一个拥有许多用户的网站,每个用户都有自己的小型网站。其中一部分是博客。我想为每个作者显示标签云。Tag和Tagger的基本云特性可以做到这一点,但是为所有作者做不到。添加author_id无效。

我尝试使用频道条目循环来获取每个作者的所有条目,然后显示与这些条目相关联的标签。

{exp:channel:entries author_id="1" channel="blog"}
{exp:tag:tags entry_id="{entry_id}"}
<li>{title}<a href="#">{tag_name}</a><span>{total_entries}</span></li>
{/exp:tag:tags} 
{/exp:channel:entries}

这让我得到了一个仅该作者使用的标签列表(在“标签”中,而在“Tagger”中无法工作)。但是,如果某个标签被多次使用,它会重复列出。

本地EE和标签功能不能让我实现我想做的事情。我可能需要使用php(插件)来完成此操作。获取作者使用的所有标签,将它们放入数组中,去除重复项,然后将其输出到我的模板中。我确实在Solspace上发布了帖子,但他们说我需要使用PHP。

在执行此操作之前,我想看看是否有更简单的方法或其他可以完成此操作的附加组件。如果这是一种可行的方式,我也欢迎任何有关该插件的方法提示。

2个回答

1

使用Tagger和查询模块,您应该能够获得所需的内容(可能还包括Solspace Tags,但我没有使用过,不能确定)。

像这样的查询

SELECT tag_name  
FROM exp_tagger
WHERE author_id = 7

为该作者提供一组标签。

您可以像这样使用它与查询模块,使用当前条目的author_id作为查询的动态部分。

{exp:query sql= "SELECT tag_name FROM exp_tagger WHERE author_id = {author_id}"}
    {tag_name}
{/exp:query}

如果数据在数据库中以这种方式存储,那么这可能会完成任务。您需要使用SELECT DISTINCT来获取唯一的标签。 - Anna_MediaGirl
1
方便的是,标记器模块中的表每个标记只有一条记录,并且有一个“total_entries”字段,因此它可以使用普通的“SELECT”语句。 - Alex Kendrick
哇,非常简单。我排除了Query模块,认为它也会获取重复数据。但是在查看数据库后,每个标签只出现一次,因此它只会提取每个标签一次。我正在使用 {exp:query sql= "SELECT tag_name, total_entries FROM exp_tagger WHERE author_id = 1"}。这在Tagger中有效,我将尝试在Tag中使用看看是否有效。 - Doug
1
它在标签中确实可以工作,但是......在标签和标记器中存在问题。谁先使用了标记就是作者。因此,如果另一个人使用相同的标记,则不会显示在他们的标记云中。考虑到这些用户将要写有关类似主题的文章,这可能是一个问题。然而,这个练习确实让我认识到查看数据库并了解其中的数据及其构造是多么重要。查询模块是EE强大但经常被忽视的一个方面。我可能需要使用插件,如果我需要的话,我会在这里发布给其他人。 - Doug
啊,我没有想到那个,但是完全有道理。你和@MediaGirl是对的,这需要一个自定义插件。如果你不熟悉它,Pkg.io 是一个有用的工具,可以生成构建附加组件的起始文件。官方文档关于插件开发以及这个教程也可能会对你有所帮助。 - Alex Kendrick

1

很遗憾,我认为你在这里唯一的选择是使用定制的PHP来删除重复项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接