我在我的网站上创建了一个标签系统。到目前为止,它们都很有效。但是现在我想创建一个页面,在你自己的标签下显示我所有的标签,就像你在投资组合页面一样。
示例:http://www.don-zalmrol.be/tags?tag=Electronics
我的页面已在其自己的标签下显示特定标签的标签(即电子产品),但您可能会猜到我希望在其各自的标签中填充其他标签。
总之,您可以找到一个显示您已选择的标记的视图,但在同一页面上您也可以看到其他标记。
任何人都知道我该怎么做?我不认为我离解决方案很远,因为我已经可以在其自己的标签下加载特定标签的项目。现在我只需要用标签填充剩余的标签!
谢谢!
到目前为止,这是我的代码:
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
var portfolio = Umbraco.TagQuery.GetAllContentTags().OrderBy(t => t.Text);
var tagList = Umbraco.TagQuery.GetAllContentTags().OrderBy(t => t.Text);
string tag = Request.QueryString["tag"];
if (!tag.IsNullOrWhiteSpace())
{
var publishedContent = Umbraco.TagQuery.GetContentByTag(tag);
if (publishedContent.Count() > 0)
{
@* Show title *@
<div class="media contact-info wow fadeInDown" data-wow-duration="1000ms" data-wow-delay="600ms">
<center>
<div>
<i class="fa fa-tags"></i>
</div>
<br />
<div class="media-body">
<h2>Tags</h2>
<p>Browse content by tag</p>
</div>
</center>
<br />
</div>
@* Show tag titles in tabs *@
<ul class="portfolio-filter text-center">
<li><a class="btn btn-default" href="#" data-filter="*">All tags</a></li>
@foreach (var tags in tagList)
{
<!-- Create a selected tag -->
if(@tags.Text == @tag)
{
<li><a class="btn btn-default active" href="#" data-filter=".@tag">@tag</a></li>
}
@* Show all other tags *@
else
{
<li><a class="btn btn-default" href="#" data-filter=".@tags.Text">@tags.Text</a></li>
}
}
</ul>
<div class="row">
<div class="portfolio-items">
@* Start picture content *@
@foreach (var tags in tagList)
{
@* Put selected tag in the right tag tab *@
if(@tags.Text == @tag)
{
@* Show tag content *@
foreach (var item in publishedContent.OrderByDescending(i => i.CreateDate))
{
<div class='portfolio-item @tag col-xs-12 col-sm-4 col-md-3'>
<div class="recent-work-wrap">
@* IF the project has a picture *@
@if(item.HasValue("pictureOfTheProject"))
{
var featureImage = Umbraco.TypedMedia((int)item.GetPropertyValue("pictureOfTheProject"));
<img class="img-responsive" src="@featureImage.GetCropUrl(250, 250)" alt='@item.GetPropertyValue("titleOfTheProject")' />
<div class="overlay">
<div class="recent-work-inner">
<h3><a href="@item.Url">@item.GetPropertyValue("titleOfTheProject")</a></h3>
<a class="preview" href="@featureImage.GetCropUrl(250, 250)" rel="prettyPhoto">
<i class="fa fa-eye"></i> View
</a>
</div>
</div>
}
@* Else when the project doesnt have a picture, show default one *@
else
{
var noImage = "http://www.don-zalmrol.be/media/1440/no_image_available.png";
<img class="img-responsive" src="@noImage.GetCropUrl(250, 250)" alt="No image" />
<div class="overlay">
<div class="recent-work-inner">
<h3><a href="@item.Url">@item.GetPropertyValue("titleOfTheProject")</a></h3>
<a class="preview" href="@noImage.GetCropUrl(250, 250)" rel="prettyPhoto">
<i class="fa fa-eye"></i> View
</a>
</div>
</div>
}
</div>
</div>
}
}
@* Put the other tags under there own tab *@
else
{
}
}
@* End dynamic tags *@
</div>
</div>
}
@* No content matching the tag? *@
else
{
<p>There isn't any content matching that tag.</p>
@Html.Partial("TagList")
}
}
@* Show the tag list with amount *@
else
{
@Html.Partial("TagList")
}
}
编辑27-03-2016
好的,所以我现在知道我需要使用我的标签查询或使用IEnumerable。但是我似乎无法在不破坏代码的情况下找到它如何做到这一点...
@ *获取所有标签并按名称排序* @ var tagList = Umbraco.TagQuery.GetAllContentTags()。OrderBy(t =&gt; t.Text);
@ *获取请求的标签* @ string tag = Request.QueryString [&#34; tag&#34;];
@ *按请求的标签显示所有内容* @ var publishedContent = Umbraco.TagQuery.GetContentByTag(tag);
以上是列出我在var中的所有标签的代码片段,从URL中获取名称(即电子设备),然后显示与所查询标签匹配的所有内容。
所以简而言之,我需要更改TagQuery的最后一部分,列出所有带有标记的内容,然后通过查询字符串对其进行过滤,以便将它们显示在自己的类别中。
但如何列出所有tagcontent?
干杯,
唐
答案 0 :(得分:0)
您的问题位于pastebin的第76行,您可以在其中遍历已发布的内容,该内容已由所选标记过滤。因此,只有具有所选标记的内容才会被写入模板。
您需要做的是使用第70行的循环,循环遍历所有标记。您正在使用的jQuery插件将使用您在第78行添加的CSS类来处理过滤。您可以在第76行删除循环。
为清楚起见,我也会改变
@foreach (var tags in tagList)
到
@foreach (var item in tagList)
因为foreach正在生成单个标签而不是复数“标签”,因为您的代码是暗示的。这有一个额外的好处,一旦你删除第76行的循环,你可以保持其余的代码相同。