1

ASP.NET MVC3 を使用してブログを作成しており、そのための tagCloud を作成したいと考えています。

さて、私の質問は、それをリストに入れ(必要ですか?)、数えてから、さまざまなサイズで印刷する方法です。

編集:

次のようにして、すべての投稿のすべてのタグをカウントできるようになりました。

Dictionary<string, int> tagLista = new Dictionary<string, int>();

    foreach (Post post in Model)
    {
        foreach (Tag tag in post.Tags)
        {
            if (!tagLista.ContainsKey(tag.Name))
            {
                tagLista[tag.Name] = 1;
            }
            else
            {
                tagLista[tag.Name] += 1;
            }
        }
    }
    //Print out diff. sizes depending on count
    foreach (KeyValuePair<string, int> pair in tagLista)
    {

        if (pair.Value <= 2)
        {
                        <a class="minSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a>
        }

        if (pair.Value > 2 && pair.Value <= 4)
        {
                        <a class="medSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a>
        }
        if (pair.Value > 4 && pair.Value >= 6)
        {
                        <a class="maxSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a> 
        }
    }

ここでの問題は、データベースのすべてのタグではなく、現在のページのすべての投稿のタグのみが表示されることです。代わりにどうすればいいですか?このビュー(インデックス)の上部で使用します:

@using Blog.Models;
@model IEnumerable<Post>

助けてくれてありがとう!

4

3 に答える 3

1

次のようにして、すべての投稿のすべてのタグをカウントできるようになりました。

Dictionary<string, int> tagLista = new Dictionary<string, int>();

foreach (Post post in Model)
{
    foreach (Tag tag in post.Tags)
    {
        if (!tagLista.ContainsKey(tag.Name))
        {
            tagLista[tag.Name] = 1;
        }
        else
        {
            tagLista[tag.Name] += 1;
        }
    }
}
//Print out diff. sizes depending on count
foreach (KeyValuePair<string, int> pair in tagLista)
{

    if (pair.Value <= 2)
    {
                    <a class="minSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a>
    }

    if (pair.Value > 2 && pair.Value <= 4)
    {
                    <a class="medSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a>
    }
    if (pair.Value > 4 && pair.Value >= 6)
    {
                    <a class="maxSize" href="@Href("~/Posts/Tags/" + pair.Key)">@pair.Key</a> 
    }
}

ここでの問題は、データベースのすべてのタグではなく、現在のページのすべての投稿のタグのみが表示されることです。代わりにどうすればいいですか?このビュー(インデックス)の上部で使用します:

@using Blog.Models;
@model IEnumerable<Post>

助けてくれてありがとう!

于 2012-09-24T11:47:05.240 に答える
0

このjquery プラグインを試すことができます。基本的に、タグに基づいてすべての投稿をグループ化する必要があります。

<div id="tagCloud">
  foreach(var tag in Tags)
  {
    <a href="@tag.Path()" rel="@tag.Posts.Count">@tag.Name</a>
  }
</div>

$.fn.tagcloud.defaults = {
  size: {start: 14, end: 18, unit: 'pt'},
  color: {start: '#cde', end: '#f52'}
};

$(function () {
  $('#tagCloud a').tagcloud();
});
于 2012-09-24T10:43:32.580 に答える
0

これをテストできませんでしたが、とにかくうまくいくことを願っています:

var list = Model.SelectMany(x => x.Tags).GroupBy(x => x.Name, g => new {Name = g.Key, Amount = g.Count()});

タグ名とそれぞれの金額のリストを返します。

于 2012-09-23T17:31:03.157 に答える