hschottm/tags

tags 是一个 Contao 扩展,为 Contao 任何元素提供标签架构。

维护者

详细信息

github.com/hschottm/tags

源代码

问题

安装数: 12,414

依赖者: 2

建议者: 0

安全: 0

星星: 11

关注者: 4

分支: 16

公开问题: 30

类型:contao-module


README

tags 扩展

tags 是一个 Contao 扩展,为 Contao 任何元素提供标签架构。它包含一个通用的数据库结构来保存标签,并且可以用来可视化现有标签。tags 还包含了为 Contao 文章、新闻文章和日历事件提供的现成标签支持。

开发者可以使用 tags 架构为他们自己的组件添加标签支持。该模块提供了一个输入字段小部件用于实际数据容器,并支持从数据库存储和检索标签。当启用 JavaScript 时,也可以在后台标签输入字段中通过简单的鼠标点击添加和删除标签。

tag input field in the Contao backend

截图显示,标签 URL 的 HTML 标题属性包含标签名称和标记实体的数量,例如 Logging (2) 表示标签 logging 已被用于两个选定对象类型(在这种情况下是新闻文章)。

请注意,在数据容器中您只能使用一个标签输入字段,因为标签小部件使用父数据容器的数据源。

在 Contao 前端使用标签

Contao 模块 "标签云" 用于在 Contao 前端显示标签云。它为给定的一组标签(例如数据容器)生成一个 HTML 列表。要将此列表作为标签云显示,您需要在您的网站 CSS 文件(夹)中定义相关的 CSS 选择器。tags 已经包含两个示例样式表 tags_oxygen.css 和 tags_orange.css,这些样式表可以在安装包的 tl_files/tags 目录中找到(或者如果您通过 Contao 扩展存储库安装了模块,可以在您的 Contao 安装目录中的同一目录中找到)。请将这些示例文件作为您自己 CSS 定义的起点,因为在某些情况下,必须定义不可见的样式(例如,对于 "Top 10 标签" 功能)。

Number and size settings of the tag cloud module

数量和大小设置部分允许您为标签云定义一些基本的布局设置。通过最大标签数,您可以限制在标签云中显示的标签数量。值为 0 时始终显示所有可用的标签,值大于 0 时仅显示按输入数量显示的最常用标签。请注意,如果您不显示所有可用的标签,则应向用户添加说明。标签大小数量限制标签大小的 CSS 类选择器的数量。默认值 4 生成 4 个不同的 CSS 类样式(根据标签的出现频率):size1、size2、size3 和 size4。如果您更改此数字,您需要在您的 CSS 文件定义中考虑这一点。使用标签类名将为每个包含标签名称的标签添加一个额外的 CSS 类(空格被下划线替换)。这允许您使用 CSS 文件单独样式化某些标签。例如,标签 sports_activities 将获得额外的 CSS 样式 sports_activity,并且可以在您的 CSS 文件中将此特定标签的大小更改为巨大,如果您想突出显示此标签。

使用标签类名复选框为每个标签添加一个由标签名称组成的额外 CSS 类名(仅将空白转换为下划线)。这为您提供了为选定的标签定义单独 CSS 样式的机会。

Tag cloud template settings

在生成标签云的HTML代码时,您可以从标签云模板组合框中选择一个模板。默认情况下这是mod_tagcloud模板。如果您想为标签云创建单独的模板,并且模板以mod_tagcloud开头,例如mod_tagcloud_mine等。

显示相关标签:如果选择了一个标签,此功能将在前端添加一个相关标签列表。这显示了与所选标签一起定义的所有标签及其频率。如果您点击一个相关标签,结果的选取将缩小到包含所选标签和所选相关标签的所有数据库条目。相关标签视图仅在标签云模块集成在标签云超链接的目标页面时才起作用。通常,您将标签云放在页面左侧或右侧的列中,结果放在页面主要内容列中。

Additional tag lists settings in the tag cloud module

前10个标签:添加一个额外的标签云,其中只包含使用最频繁的10个标签。如果您激活了前10个标签,您将看到两个额外的选择

  • 展开前10个标签:勾选此框以默认展开前10个标签。这仅在浏览器中启用了JavaScript时才有效,否则前10个标签始终展开。
  • 展开所有标签:勾选此框以默认展开主标签云。这仅在浏览器中启用了JavaScript时才有效,否则主标签云始终展开。

Redirect settings of the tag cloud module

在重定向设置部分,如果您想为标签云中的每个标签使用超链接,请选择一个目标页面。目标页面将通过URL参数tag=TAGNAME调用,例如 http://www.mydomain.tld/destination.html?tag=contaohttp://www.mydomain.tld/destination/tag/contao.html 如果您使用Contao URL重写。

保留URL参数保留新闻档案中特定日期的URL参数(对于实际的时间段)。如果您在同一个页面上使用标签云作为新闻档案,所选时间段也将用于标签URL中。

Datasource settings of the tag cloud module

在数据源设置中,您需要选择Contao源表以生成标签云。如果您想显示新闻文章的标签,您应该检查tl_news表。您可以使用仅适用于特定Contao对象的专用标签模块扩展,例如tags_news、tags_articles或tags_events。使用这些模块,您不需要选择数据源。

Expert settings of the tag cloud module

仅在您使用自己的数据源为标签云提供数据时,才应更改专家设置。如果您使用标签模块附带默认解决方案,请忽略此设置。开发人员可以定义不同的数据库表和不同的数据库表字段作为标签云的源。您还可以为标签云定义额外的CSS类或ID,以使用您自定义的CSS代码来样式化云。

如果您按照常规操作,您应该在页面上看到类似的输出

Frontend output of a tag cloud

或者激活了前10个标签

Frontend output of a tag cloud and top ten tags

或者激活了前10个标签和相关标签

Frontend output of a tag cloud, top ten tags, and related tags

如果显示了多个标签云(前10个和所有标签),Contao将添加一个JavaScript,允许您展开或折叠标签云。如果没有JavaScript支持,标签始终展开。为了使JavaScript工作,您必须使用示例CSS文件tags_oxygen.css或tags_orange.css中的CSS样式定义。

除了通用标签云模块外,标签云还附带五个更多专业标签云模块

  • 标签云(文章)
  • 标签云(新闻)
  • 标签云(事件)
  • 标签云(会员)
  • 标签云(内容元素)

例如,在标签云(事件)中,您可以使用仅选择日历为标签云生成过滤标签。

标签扩展支持以下 Contao 元素的默认标签功能

  • 新闻文章
  • 文章
  • 内容元素
  • 日历事件
  • 成员

使用标签云跳转到其他 Contao 模块

为了合理使用标签云,您应该在标签云模块的重定向设置中输入目标页面。目标页面应包含标签云模块(如果您想使用相关标签)以及以下经过标签扩展修改的 Contao 模块之一

  • 新闻存档模块:显示所有带有选中标签的新闻文章。新闻存档的标题将显示选中标签和选择数量。
  • 新闻列表模块:显示所有带有选中标签的新闻文章。新闻存档的标题将显示选中标签和选择数量。
  • 全局文章列表模块:显示带有选中标签的文章列表。文章列表的标题将显示选中标签和选择数量。
  • 事件列表模块:显示所有选中日历中带有选中标签的事件。事件列表的标题将显示选中标签和选择数量。
  • 日历模块:显示所有带有选中标签的事件。更改默认日历模板时输出事件的标签。
  • 标签对象列表模块:显示带有给定标签的内容元素(页面、文章、内容元素)的列表。

在前端显示分配的标签

对于新闻文章和文章,您可以在内容底部显示分配的标签。因此,您可以在特定模块中检查“显示文章标签”或“显示新闻标签”选项,并选择标签超链接的目标页面。

忽略标签设置会忽略所有与标签相关的 URL 参数。这意味着使用此设置的新闻列表或其他模块不能通过标签进行筛选。如果您在同一个页面上有多个列表,并且只想让特定的列表通过标签进行筛选,这将很有帮助。

这些标签设置适用于新闻阅读器、新闻存档和文章列表(标签)模块。文章列表(标签)模块仅在您安装了附加扩展标签_articles 时才可用。

Tags settings for news objects

只有在您使用能够评估标签列表模板变量的模板时,才会显示附加的标签列表。您可能需要检查模板 news_full_tags 以获取更多详细信息。您可以将相关代码复制并粘贴到模板中,使任何其他模板适用于此功能。

<?php if ($this->showTags): ?>
 
<?php if (count($this->taglist)): ?>
<ul class="tag-chain">
<?php $counter = 0; foreach ($this->taglist as $tag): ?>
<li class="tag-chain-item<?php if ($counter == 0) echo ' first'; ?>
<?php if ($counter == count($this->taglist)-1) echo ' last'; ?>
<?php if ($this->showTagClass) echo ' ' . $tag['class']; ?>"><?php echo $tag['url']; ?></li>
<?php $counter++; endforeach; ?>
</ul>
<?php endif; ?>
<?php endif; ?>

此输出的 CSS 样式已定义在示例 CSS 文件 tags_orange.css 和 tags_oxygen.css 中。您可以将这些文件作为您自己的样式定义的基础。带有其分配标签的新闻条目将如下所示

Additional tags at the bottom of a news list entry

对于 日历模块,是否在日历中显示事件的标签取决于您。要显示标签,您需要修改默认日历模板 cal_default 或创建基于 cal_default 的自定义模板。要显示标签,您可以访问相应事件的 tagstaglist 字段,例如:

          <?php foreach ($day['events'] as $event): ?>
            <div class="event cal_<?= $event['parent'] ?><?= $event['class'] ?>">
              <a href="<?= $event['href'] ?>" title="<?= $event['title'] ?> (<?php if ($event['day']) echo $event['day'] . ', '; ?><?= $event['date'] ?><?php if ($event['time']) echo ', ' .  $event['time']; ?>)"<?= $event['target'] ?>><?= $event['link'] ?></a>
              <div>
              	<?php foreach ($event['taglist'] as $tagdata): ?>
              		<div class="<?= $tagdata['class'] ?>"><?= $tagdata['url'] ?></div>
              	<?php endforeach; ?>
              </div>
            </div>
          <?php endforeach; ?>

tags 字段包含一个包含事件所有可用标签的数组,例如:

Array(
  [0] => conference
  [1] => meeting
)

taglist 字段包含一个包含数组(包含标签的 URL、标签名称和标签类)的数组,例如:

Array(
  [0] => Array(
    [url] => <a href=".../tags/conference.html">conference</a>
    [tag] => conference
    [class] => conference
  )
  [1] => Array(
    [url] => <a href=".../tags/meeting.html">meeting</a>
    [tag] => meeting
    [class] => meeting
  )
)

内容元素

标签扩展扩展了 Contao 内容元素标题,并在专家设置中引入了一个附加参数“仅显示标签”。如果选中此选项,Contao 仅在内容页面上使用了一个或多个标签时显示标题,例如,如果页面是从标签云打开的。

Checkbox 'Show with tags only' in the heading content element

您可以使用此元素与插入标签 {{tags_used}} 结合使用,以显示您内容特定的标题,例如:Selected Participants {{tags_used}} => Selected Participants (Congress+October+New York)

插入标签

tags 为 Contao 添加以下插入标签:

  • {{tags_used}}: 将被替换为使用标签的列表,例如(Contao+Extension+tags)
  • {{tags_news::news_id}}: 将被替换为分配给指定新闻文章的标签列表,例如 {{tags_news:1}} 显示ID为1的新闻文章的标签。
  • {{tags_event::event_id}}: 将被替换为分配给指定日历事件的标签列表,例如 {{tags_event:1}} 显示ID为1的日历事件的标签。
  • {{tags_article::article_id}}: 将被替换为分配给指定文章的标签列表,例如 {{tags_article:1}} 显示ID为1的文章的标签。
  • {{tags_article_url::article_id}}: 将被替换为分配给指定文章的链接标签列表,例如 {{tags_article_url:1}} 显示ID为1的文章的标签,并将每个标签链接到包含文章的页面。
  • {{tags_content::content_id}}: 将被替换为分配给指定内容元素的标签列表,例如 {{tags_content:1}} 显示ID为1的内容元素的标签。

额外的Contao模块

标签扩展包含以下新的Contao模块

全局文章列表

全局文章列表显示为给定选定的标签提供的所有可用文章的列表。

新闻模块的特殊设置

新闻模块新闻阅读器、新闻存档和新闻列表使用一个额外的参数来忽略所有标签设置。如果您在页面上有多个模块,并且只有一个模块应该能够通过选定的标签过滤其内容,这可能很有用。如果您在标签设置部分中选中了“忽略标签”选项,则模块将忽略任何与标签相关的操作。

新闻模块还包含一个标签过滤器,您可以在其中添加逗号分隔的标签列表。模块的内容将默认使用输入的标签进行过滤。如果您只想显示具有特定标签的列表,这可能很有用。

标签对象列表

前端模块标签对象列表可以创建由给定标签过滤的内容元素列表。可用的对象类型是三种内容元素类型:页面、文章和内容元素。如果存在标签,对象类型将显示并链接到生成的列表中的元素,例如,对象类型“页面”创建指向Contao页面的URL列表,对象类型“文章”显示指向Contao文章的链接。

标签来源定义了用于生成列表的标签来源。例如,如果您选择tl_article,则只考虑文章标签。

页面选择用于定义可用内容元素链接的根页面。只有链接到此页面及其子页面的链接才会被考虑用于列表。

示例

  • 对象类型:页面
  • 标签来源:tl_article
  • 页面:网站根

这将创建一个由文章标签创建的页面链接列表。只有链接到所选网站才会被考虑。

Tag object list settings

扩展开发者提示

只想使用标签扩展的用户可以跳过以下段落。

为Contao数据容器添加标签支持

要在Contao后端添加标签支持,您需要完成以下步骤

  1. 要显示标签输入字段,您必须为数据容器创建一个数据库字段。您只需要一个小数据库字段,因为标签保存在单独的表中,但您需要该字段以将输入字段嵌入到数据容器中。所有标签都将保存在由标签扩展提供的tl_tag数据库表中。
  2. 您需要将输入字段嵌入到模块的DCA配置数组中
$GLOBALS['TL_DCA']['tl_literature']['palettes']['default'] = 'title,author,description,tags,content';
$GLOBALS['TL_DCA']['tl_literature']['fields']['tags'] = array
(
	'label'                   => &$GLOBALS['TL_LANG']['MSC']['tags'],
	'inputType'               => 'tag',
	'eval'                    => array('tl_class'=>'clr long'),
	'sql'                     => "char(1) NOT NULL default ''"
);

标签扩展已提供语言变量$GLOBALS['TL_LANG']['MSC']['tags']作为标签字段的默认标识符。当然,您也可以将其更改为其他值。

在保存过程中的验证过程中,标签模块自动将输入的标签保存到数据库表tl_tag中。对于每个标签,它存储实际数据容器的ID(表字段"id")、数据容器的名称(表字段"from_table")以及标签值(表字段"tag")。

标签小部件的eval数组选项