Php 按类别内的标签过滤物品-Joomla和K2

Php 按类别内的标签过滤物品-Joomla和K2,php,joomla,filter,tags,joomla-k2,Php,Joomla,Filter,Tags,Joomla K2,我想制作一个带有标签列表的自定义模块。单击标记时,访问者将被导航到一个类别页面,该页面将显示带有该标记的文章 我不是joomla专家,我正在考虑一个类似于超链接的解决方案,我将添加到模块内的标记中: href="http://mywebsite.com/index.php/itemlist/tag/tokio%20city?category=places" 这可能吗?或者我怎样才能达到这个结果? 谢谢 这比URL中的查询字符串要复杂一些,因为您还需要调整模板 如果您想让它尽可能简单,我建议您使

我想制作一个带有标签列表的自定义模块。单击标记时,访问者将被导航到一个类别页面,该页面将显示带有该标记的文章

我不是joomla专家,我正在考虑一个类似于超链接的解决方案,我将添加到模块内的标记中:

href="http://mywebsite.com/index.php/itemlist/tag/tokio%20city?category=places"
这可能吗?或者我怎样才能达到这个结果?
谢谢

这比URL中的查询字符串要复杂一些,因为您还需要调整模板

如果您想让它尽可能简单,我建议您使用模板覆盖创建一个新的K2模板,并编辑类别模板,这样它将读取查询字符串参数,并仅显示已按类别过滤的文章,而且还通过查询字符串按标记过滤的文章

这只是一个简单的操作方法,现在有一些更详细的信息:

1)使用模板覆盖创建新的K2模板。

在模板中,如果它不存在,请创建文件夹结构
/templates/your_template/html/com_k2/templates/default
。如果您想拥有更多K2模板,可以用任何名称替换“default”,但必须手动将新模板设置为每个类别

现在从“/components/com_k2/templates/default”获取内容,并将其复制到模板中的新文件夹中。现在,K2正在使用
/templates/your_template/html/com_K2/
文件夹中的模板。如果您不了解模板覆盖,可以通过谷歌搜索更多详细信息,这在定制模板时非常重要

2)编辑您的类别视图文件,以将列表与查询字符串相适应

您现在感兴趣的文件位于
/templates/your_template/html/com_k2/templates/default/category.php
中。打开此文件并尝试了解其中的重要内容:

Line 141
<?php foreach($this->leading as $key=>$item): ?>
Line 169
<?php foreach($this->primary as $key=>$item): ?>
Line 197
<?php foreach($this->secondary as $key=>$item): ?>
Line 226
<?php foreach($this->links as $key=>$item): ?>
要仅显示具有指定标记的文章,请使用:

http://mywebsite.com/category-name?tag=your-tag
http://mywebsite.com/category-name?tag=Tokio City
例如,如果您只想显示带有“Tokio City”标记的文章,请使用:

http://mywebsite.com/category-name?tag=your-tag
http://mywebsite.com/category-name?tag=Tokio City
完成。

这就是你所需要的基本知识。如果你只使用主要文章(没有引导和辅助或链接),这就是你所需要的一切。当然,您可能还需要处理很多事情:

  • 如果没有带有指定标签的物品,则发出通知
  • 没有多余的代码,我这样写是为了简单易读
  • SEO-URL中的空格和特殊字符
  • 确保不会打印空div

但这将是更多的代码,我想让它简单易读。我想我已经给了你足够多的开始时间,所以继续做吧,祝你好运:)

你对这两个平台非常非常熟悉!感谢这个令人惊讶的答案,我想在给出反馈之前使用它。你写的片段很好,我还有两个问题:1。现在我的查询在一列中显示文章,我想这必须通过“主要文章”来完成,但这没关系,我想我可以稍后在CSS中对此进行调整,或者我应该使用次要文章来显示结果吗?2.是否有关于这些标准函数的文档,以便我可以了解更多信息?:)再次感谢,你真是太棒了。这就是我过去两年一直在做的:)你可以在K2类别设置中为每个类别和每种文章(最新、主要、次要、链接)设置列数,或者使用自定义CSS,两者都很好:)就我个人而言,我建议你只使用一种类型的文章,比如说primary,因为使用更多类型可能会给您带来一些意想不到的麻烦。我不认为有关于这方面的文档,它或多或少只是一点PHP和K2知识。不,它显示的是所有类别(餐馆、租车、俱乐部等,甚至查询:城市)的标签为=东京市的帖子。有没有办法在餐馆类别的帖子中只显示餐馆,而不显示租车和俱乐部有相同的标签?谢谢这是正确的行为。如果要仅显示具有查询字符串中指定的标记的项目,而不显示其他标记,请尝试将If部分从
If(in_数组($myTag,$articleTags)){
更改为
If(in_数组($myTag,$articleTags)&&count($articleTags)==1){
,应该可以。我还没有测试过代码,你自己试试,让我知道。谢谢!但这不是我所需要的。有很多不同类别的帖子都有相同的标签(例如东京城)。但是当我导航到餐厅菜单(链接到餐厅类别)并查询标签时:“东京城”我从所有其他类别的帖子中得到这个标签,而不仅仅是从餐厅类别。我想要实现的是这样的:“从类别为class='restaurants'和标签为class='Tokio City'的帖子中选择*”