在自己的特定标签下显示标签

时间:2016-03-16 09:25:14

标签: tags umbraco umbraco7

我在我的网站上创建了一个标签系统。到目前为止,它们都很有效。但是现在我想创建一个页面,在你自己的标签下显示我所有的标签,就像你在投资组合页面一样。

示例:http://www.don-zalmrol.be/tags?tag=Electronics

我的页面已在其自己的标签下显示特定标签的标签(即电子产品),但您可能会猜到我希望在其各自的标签中填充其他标签。

总之,您可以找到一个显示您已选择的标记的视图,但在同一页面上您也可以看到其他标记。

任何人都知道我该怎么做?我不认为我离解决方案很远,因为我已经可以在其自己的标签下加载特定标签的项目。现在我只需要用标签填充剩余的标签!

谢谢!

到目前为止,这是我的代码:

http://pastebin.com/jwGW0NKZ

@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?

干杯,

1 个答案:

答案 0 :(得分:0)

您的问题位于pastebin的第76行,您可以在其中遍历已发布的内容,该内容已由所选标记过滤。因此,只有具有所选标记的内容才会被写入模板。

您需要做的是使用第70行的循环,循环遍历所有标记。您正在使用的jQuery插件将使用您在第78行添加的CSS类来处理过滤。您可以在第76行删除循环。

为清楚起见,我也会改变

@foreach (var tags in tagList)

@foreach (var item in tagList)

因为foreach正在生成单个标签而不是复数“标签”,因为您的代码是暗示的。这有一个额外的好处,一旦你删除第76行的循环,你可以保持其余的代码相同。