qzminski / hschottm-tags
tags是一个Contao扩展,提供了一种为任何Contao元素添加标签的架构。
Requires
- php: >=5.3
- contao-community-alliance/composer-plugin: ~3.0
- contao/core-bundle: ~4.4
Replaces
- hschottm/tags: ~4.0
README
tags扩展
tags是一个Contao扩展,提供了一种为任何Contao元素添加标签的架构。它包含一个通用的数据库结构来保存标签,并且可以用来可视化现有的标签。tags还提供了对Contao文章、新闻文章和日历事件的预置标签支持。
开发者可以使用tags架构为他们自己的组件添加标签支持。该模块提供了一个输入字段小部件用于实际数据容器,并支持从数据库中存储和检索标签。当启用JavaScript时,也可以在后台标签输入字段中通过简单的鼠标点击添加和删除标签。
截图显示,标签URL的HTML标题属性包含标签名称和被标记实体的数量,例如Logging(2)表示标签logging在所选对象类型(在这种情况下为新闻文章)已被使用两次。
请注意,您只能在数据容器中使用一个标签输入字段,因为标签小部件使用父数据容器的数据源。
在Contao前端使用标签
Contao模块"标签云"旨在在Contao前端显示标签云。它为给定的一组标签(例如数据容器)生成一个HTML列表。为了将此列表作为标签云显示,您需要在您的网站CSS文件(s)中定义相关的CSS选择器。tags已经包含两个示例样式表tags_oxygen.css和tags_orange.css,它们位于安装包的tl_files/tags目录中(或者如果您通过Contao扩展存储库安装了模块,则位于您的Contao安装的同一目录)。请将这些示例文件作为您自己的CSS定义的基础,因为有时必须定义不可见的样式(例如,用于"前10个标签"功能)。
数量和大小设置部分允许您定义标签云的一些基本布局设置。通过最大标签数量,您可以限制在标签云中显示的标签数量。值为0始终显示所有可用标签,值大于0仅显示根据输入数量最频繁的标签。请注意,如果您不显示所有可用标签,应向用户添加通知。标签大小的数量限制了标签大小的CSS类选择器的数量。默认值4为您的标签生成4种不同的CSS类样式(根据标签的出现频率):size1、size2、size3和size4。如果您更改此数字,您需要考虑您的CSS文件的定义。使用标签类名添加为每个包含标签名称的标签添加额外的CSS类(空格被下划线替换)。这允许您使用CSS文件单独样式化某些标签。例如,标签运动活动将获得额外的CSS样式sports_activity,并且可以在您的CSS文件中将它更改为大号,如果您想突出显示此特定标签。
使用标签类名复选框为每个标签添加一个额外的CSS类名,该类名由标签名称组成(仅将空格转换为下划线)。这为您提供了为选定标签定义单独CSS样式的机会。
为了生成标签云的HTML代码,您可以从“标签云模板”下拉菜单中选择一个模板。默认情况下,这是“mod_tagcloud”模板。如果您想要为标签云创建单独的模板,则模板名称应以“mod_tagcloud”开头,例如“mod_tagcloud_mine”等。
显示相关标签:如果选中了一个标签,则会在前端添加一个相关标签列表。这会显示与选中标签一起定义的所有标签及其频率。如果您点击一个相关标签,则结果选择将缩小到包含选中标签和选中相关标签的所有数据库条目。相关标签视图仅在标签云模块集成在标签云超链接的目标页面时才有效。通常,您将标签云放置在页面的左侧或右侧的列中,结果放置在页面的主要列中。
“前10个标签”添加了一个额外的标签云,其中只包含最常使用的10个标签。如果您激活了“前10个标签”,您将看到两个额外的选择
- 展开“前10个标签”:勾选此框以默认展开“前10个标签”。这仅在浏览器中启用了JavaScript时才有效,否则“前10个标签”始终展开。
- 展开所有标签:勾选此框以默认展开主标签云。这仅在浏览器中启用了JavaScript时才有效,否则主标签云始终展开。
在重定向设置部分,如果您想为标签云中的每个标签使用超链接,请选择一个目标页面。目标页面将通过URL参数tag=TAGNAME调用,例如 http://www.mydomain.tld/destination.html?tag=contao 或 http://www.mydomain.tld/destination/tag/contao.html(如果使用Contao URL重写)。
保留URL参数:在新闻存档中保留特定日期的URL参数(对于实际的时间段)。如果您在同一个页面上使用标签云和新闻存档,选中的时间段也将用于标签URL中。
在数据源设置中,您需要选择Contao源表以生成您的标签云。如果您想显示新闻文章的标签,应检查“tl_news”表。您可以使用仅适用于特定Contao对象的专用标签模块扩展,例如“tags_news”、“tags_articles”或“tags_events”。使用这些模块,您不需要选择数据源。
仅当您使用自己的数据源为标签云提供数据时,才应更改专家设置。如果您使用与标签模块一起提供的默认解决方案,请忽略此设置。开发人员可以定义不同的数据库表和不同的数据库表字段作为标签云的源。您还可以为标签云定义额外的CSS类或ID,以便使用自定义CSS代码来样式化云。
如果您一切都按部就班,您应该在您的页面上看到类似的输出
或者激活了“前10个标签”
或者激活了“前10个标签”和相关标签
如果显示多个标签云(前10个和所有标签),Contao将添加一个JavaScript,允许您展开或折叠标签云。如果没有JavaScript支持,标签始终展开。为了使JavaScript正常工作,您必须使用示例CSS文件tags_oxygen.css或tags_orange.css中的CSS样式定义。
除了通用标签云模块之外,标签还包含五个额外的专用标签云模块
- 标签云(文章)
- 标签云(新闻)
- 标签云(事件)
- 标签云(成员)
- 标签云(内容元素)
例如,在“标签云(事件)”中,您可以通过仅使用选定的日历来过滤标签云生成的标签。
标签扩展为以下Contao元素提供默认标签支持
- 新闻文章
- 文章
- 内容元素
- 日历事件
- 成员
使用标签云重定向到其他Contao模块
为了有效使用标签云,您应该在标签云模块的重定向设置中输入目标页面。目标页面应包含标签云模块(如果您想使用相关标签)以及以下经过标签扩展修改过的Contao模块之一:
- 新闻存档模块:显示所有带有选中标签的新闻文章。新闻存档的标题将显示选中的标签和选择数量。
- 新闻列表模块:显示所有带有选中标签的新闻文章。新闻存档的标题将显示选中的标签和选择数量。
- 全局文章列表模块:显示带有选中标签的文章列表。文章列表的标题将显示选中的标签和选择数量。
- 活动列表模块:显示所有带有选中标签的选中日历中的活动。活动列表的标题将显示选中的标签和选择数量。
- 日历模块:显示所有带有选中标签的活动。更改默认日历模板时,输出活动的标签。
- 标签对象列表模块:显示具有给定标签的内容元素(页面、文章、内容元素)列表。
在前端显示分配的标签
对于新闻文章和文章,您可以在内容的底部显示分配的标签。因此,您可以在特定模块中检查“显示文章标签”或“显示新闻标签”选项,并为标签超链接选择一个目标页面。
忽略标签设置忽略所有标签相关的URL参数。这意味着使用此设置的新闻列表或其他模块不能按标签过滤。如果您在同一个页面上有多个列表,只想让特定的列表按标签过滤,这会很有帮助。
这些标签设置适用于新闻阅读器、新闻存档和文章列表(标签)模块。文章列表(标签)仅在您安装了扩展插件tags_articles后可用。
只有当您使用一个能够评估标签列表模板变量的模板时,才会显示额外的标签列表。您可能需要检查模板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中定义。您可以使用这些文件作为您自己的样式定义的基础。带有其分配标签的新闻条目将如下所示:
对于日历模块,是否要在日历中显示活动的标签取决于您。要这样做,您需要修改默认的日历模板cal_default
或创建基于cal_default
的自定义模板。要显示标签,您可以访问相应事件的tags
或taglist
字段,例如:
<?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仅在内容页使用一个或多个标签时才显示标题,例如,如果页面是从标签云打开的。
您可以使用此元素与插入标签{{tags_used}}结合使用,以显示内容特定的标题,例如:Selected Participants {{tags_used}} => Selected Participants (Congress+October+New York)
插入标签
标签插件为Contao添加以下插入标签:
- {{tags_used}}:将被替换为使用标签的列表,例如(Contao+扩展+标签)。
- {{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页面的链接列表,对象类型文章显示指向Contao文章的链接。
标签来源定义了用于生成列表的标签来源。例如,如果您选择tl_article,则仅考虑文章标签。
页面选择用于定义可链接内容元素的根页面。只有指向此页面及其子页面的链接将被考虑在内。
示例
- 对象类型:页面
- 标签来源:tl_article
- 页面:网站根
这会创建一个由文章标签创建的页面链接列表。仅考虑所选网站的链接。
针对扩展开发者的提示
只想使用标签扩展的用户可以跳过以下段落。
为Contao数据容器添加标签支持
要在Contao后端添加标签支持,您需要完成以下步骤
- 要显示标签输入字段,您必须为数据容器创建数据库字段。您只需要一个小的数据库字段,因为标签保存在单独的表中,但您需要该字段将输入字段嵌入到数据容器中。所有标签都将保存在由标签扩展提供的数据库表tl_tag中。
- 您需要将输入字段嵌入到模块的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”)。