Browse Source

add filter by tag option

pull/12511/head
Musa Demir 4 years ago
parent
commit
83bea6eaf2
No known key found for this signature in database GPG Key ID: 117DF92322553DC8
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs
  2. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs
  3. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs
  4. 8
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs
  5. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs
  6. 26
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs
  7. 13
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs
  8. 21
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs
  9. 13
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs
  10. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs
  11. 6
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs
  12. 23
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml
  13. 7
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs
  14. 3
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml
  15. 6
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs

@ -12,5 +12,7 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto
public Guid? AuthorId { get; set; } public Guid? AuthorId { get; set; }
public Guid? TagId { get; set; }
public BlogPostStatus? Status { get; set; } public BlogPostStatus? Status { get; set; }
} }

4
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs

@ -101,11 +101,11 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe
{ {
var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id); var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id);
var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, input.TagId,
statusFilter: input.Status, statusFilter: input.Status,
input.MaxResultCount, input.SkipCount, input.Sorting); input.MaxResultCount, input.SkipCount, input.Sorting);
var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId); var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId, tagId: input.TagId);
var dtoList = blogPosts.Select(x => var dtoList = blogPosts.Select(x =>
{ {

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs

@ -13,6 +13,7 @@ public interface IBlogPostRepository : IBasicRepository<BlogPost, Guid>
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
@ -20,6 +21,7 @@ public interface IBlogPostRepository : IBasicRepository<BlogPost, Guid>
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,

8
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs

@ -71,4 +71,12 @@ public class EntityTagManager : DomainService
await AddTagToEntityAsync(tag.Id, entityType, entityId, CurrentTenant?.Id); await AddTagToEntityAsync(tag.Id, entityType, entityId, CurrentTenant?.Id);
} }
} }
public async Task<List<string>> GetEntityIdsFilteredByTagAsync(
[NotNull] Guid tagId,
[CanBeNull] Guid? tenantId,
CancellationToken cancellationToken = default)
{
return await EntityTagRepository.GetEntityIdsFilteredByTagAsync(tagId, tenantId, cancellationToken);
}
} }

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs

@ -1,5 +1,6 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using System; using System;
using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
@ -15,4 +16,9 @@ public interface IEntityTagRepository : IBasicRepository<EntityTag>
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default); Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default);
Task<List<string>> GetEntityIdsFilteredByTagAsync(
[NotNull] Guid tagId,
[CanBeNull] Guid? tenantId,
CancellationToken cancellationToken = default);
} }

26
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs

@ -11,14 +11,20 @@ using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Users; using Volo.CmsKit.Users;
namespace Volo.CmsKit.Blogs; namespace Volo.CmsKit.Blogs;
public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPost, Guid>, IBlogPostRepository public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPost, Guid>, IBlogPostRepository
{ {
public EfCoreBlogPostRepository(IDbContextProvider<CmsKitDbContext> dbContextProvider) : base(dbContextProvider) private EntityTagManager _entityTagManager;
public EfCoreBlogPostRepository(
IDbContextProvider<CmsKitDbContext> dbContextProvider,
EntityTagManager entityTagManager) : base(dbContextProvider)
{ {
_entityTagManager = entityTagManager;
} }
public async Task<BlogPost> GetBySlugAsync( public async Task<BlogPost> GetBySlugAsync(
@ -43,10 +49,18 @@ public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPo
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
List<string> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
}
var queryable = (await GetDbSetAsync()) var queryable = (await GetDbSetAsync())
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString()))
.WhereIf(blogId.HasValue, x => x.BlogId == blogId) .WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf(authorId.HasValue, x => x.AuthorId == authorId)
.WhereIf(statusFilter.HasValue, x => x.Status == statusFilter) .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter)
@ -60,6 +74,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPo
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
@ -71,7 +86,14 @@ public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPo
var blogPostsDbSet = dbContext.Set<BlogPost>(); var blogPostsDbSet = dbContext.Set<BlogPost>();
var usersDbSet = dbContext.Set<CmsUser>(); var usersDbSet = dbContext.Set<CmsUser>();
var queryable = blogPostsDbSet List<string> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
}
var queryable = (await GetDbSetAsync())
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString()))
.WhereIf(blogId.HasValue, x => x.BlogId == blogId) .WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf(authorId.HasValue, x => x.AuthorId == authorId)

13
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs

@ -1,8 +1,10 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
@ -39,4 +41,15 @@ public class EfCoreEntityTagRepository : EfCoreRepository<ICmsKitDbContext, Enti
x.TenantId == tenantId, x.TenantId == tenantId,
cancellationToken: GetCancellationToken(cancellationToken)); cancellationToken: GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<string>> GetEntityIdsFilteredByTagAsync(
[NotNull] Guid tagId,
[CanBeNull] Guid? tenantId,
CancellationToken cancellationToken = default)
{
return await (await GetDbContextAsync()).Set<EntityTag>()
.Where(q => q.TagId == tagId && q.TenantId == tenantId)
.Select(q => q.EntityId)
.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken));
}
} }

21
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs

@ -12,15 +12,18 @@ using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Users; using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB.Blogs; namespace Volo.CmsKit.MongoDB.Blogs;
public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, BlogPost, Guid>, IBlogPostRepository public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, BlogPost, Guid>, IBlogPostRepository
{ {
public MongoBlogPostRepository(IMongoDbContextProvider<CmsKitMongoDbContext> dbContextProvider) : base( private EntityTagManager _entityTagManager;
public MongoBlogPostRepository(IMongoDbContextProvider<CmsKitMongoDbContext> dbContextProvider, EntityTagManager entityTagManager) : base(
dbContextProvider) dbContextProvider)
{ {
_entityTagManager = entityTagManager;
} }
public virtual async Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug, public virtual async Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug,
@ -44,12 +47,20 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
cancellationToken = GetCancellationToken(cancellationToken); cancellationToken = GetCancellationToken(cancellationToken);
List<string> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
}
return await (await GetMongoQueryableAsync(cancellationToken)) return await (await GetMongoQueryableAsync(cancellationToken))
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString()))
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf<BlogPost, IMongoQueryable<BlogPost>>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(blogId.HasValue, x => x.BlogId == blogId) .WhereIf<BlogPost, IMongoQueryable<BlogPost>>(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf<BlogPost, IMongoQueryable<BlogPost>>(authorId.HasValue, x => x.AuthorId == authorId)
@ -61,6 +72,7 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
string filter = null, string filter = null,
Guid? blogId = null, Guid? blogId = null,
Guid? authorId = null, Guid? authorId = null,
Guid? tagId = null,
BlogPostStatus? statusFilter = null, BlogPostStatus? statusFilter = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
@ -71,9 +83,16 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
var dbContext = await GetDbContextAsync(cancellationToken); var dbContext = await GetDbContextAsync(cancellationToken);
var blogPostQueryable = await GetQueryableAsync(); var blogPostQueryable = await GetQueryableAsync();
List<string> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
}
var usersQueryable = dbContext.Collection<CmsUser>().AsQueryable(); var usersQueryable = dbContext.Collection<CmsUser>().AsQueryable();
var queryable = blogPostQueryable var queryable = blogPostQueryable
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString()))
.WhereIf(blogId.HasValue, x => x.BlogId == blogId) .WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf(authorId.HasValue, x => x.AuthorId == authorId)

13
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs

@ -2,6 +2,7 @@
using MongoDB.Driver; using MongoDB.Driver;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
@ -39,4 +40,16 @@ public class MongoEntityTagRepository : MongoDbRepository<ICmsKitMongoDbContext,
x.TenantId == tenantId, x.TenantId == tenantId,
cancellationToken: GetCancellationToken(cancellationToken)); cancellationToken: GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<string>> GetEntityIdsFilteredByTagAsync(
[NotNull] Guid tagId,
[CanBeNull] Guid? tenantId,
CancellationToken cancellationToken = default)
{
var blogPostQueryable = (await GetQueryableAsync())
.Where(q => q.TagId == tagId && q.TenantId == tenantId)
.Select(q => q.EntityId);
return await AsyncExecuter.ToListAsync(blogPostQueryable, GetCancellationToken(cancellationToken));
}
} }

2
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs

@ -6,4 +6,6 @@ namespace Volo.CmsKit.Public.Blogs;
public class BlogPostGetListInput : PagedAndSortedResultRequestDto public class BlogPostGetListInput : PagedAndSortedResultRequestDto
{ {
public Guid? AuthorId { get; set; } public Guid? AuthorId { get; set; }
public Guid? TagId { get; set; }
} }

6
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs

@ -38,11 +38,13 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub
{ {
var blog = await BlogRepository.GetBySlugAsync(blogSlug); var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, BlogPostStatus.Published, input.MaxResultCount, var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.TagId,
BlogPostStatus.Published, input.MaxResultCount,
input.SkipCount, input.Sorting); input.SkipCount, input.Sorting);
return new PagedResultDto<BlogPostPublicDto>( return new PagedResultDto<BlogPostPublicDto>(
await BlogPostRepository.GetCountAsync(blogId: blog.Id, statusFilter: BlogPostStatus.Published, authorId: input.AuthorId), await BlogPostRepository.GetCountAsync(blogId: blog.Id, tagId: input.TagId,
statusFilter: BlogPostStatus.Published, authorId: input.AuthorId),
ObjectMapper.Map<List<BlogPost>, List<BlogPostPublicDto>>(blogPosts)); ObjectMapper.Map<List<BlogPost>, List<BlogPostPublicDto>>(blogPosts));
} }

23
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml

@ -2,16 +2,29 @@
@model TagViewComponent.TagViewModel @model TagViewComponent.TagViewModel
<div class="my-3"> <div class="my-3">
<div class="cms-tags-area"> <div class="cms-tags-area">
@if (Model.Tags != null) @if (Model.Tags != null)
{
foreach (var tag in Model.Tags)
{ {
foreach (var tag in Model.Tags) if (Model.UrlFormat.IsNullOrWhiteSpace())
{ {
<span class="badge bg-light px-3 py-2 cmskit-tag font-weight-normal"> <span class="badge bg-light px-3 py-2 cmskit-tag font-weight-normal">
@tag.Name @tag.Name
</span> </span>
} }
else
{
var formattedUrl = Model.UrlFormat.Replace("{TagId}", tag.Id.ToString());
<a href="@formattedUrl">
<span class="badge bg-light px-3 py-2 cmskit-tag font-weight-normal">
@tag.Name
</span>
</a>
}
} }
</div> }
</div> </div>
</div>

7
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs

@ -26,7 +26,8 @@ public class TagViewComponent : AbpViewComponent
public virtual async Task<IViewComponentResult> InvokeAsync( public virtual async Task<IViewComponentResult> InvokeAsync(
string entityType, string entityType,
string entityId) string entityId,
string urlFormat)
{ {
var tagDtos = await TagAppService.GetAllRelatedTagsAsync(entityType, entityId); var tagDtos = await TagAppService.GetAllRelatedTagsAsync(entityType, entityId);
@ -34,7 +35,8 @@ public class TagViewComponent : AbpViewComponent
{ {
EntityId = entityId, EntityId = entityId,
EntityType = entityType, EntityType = entityType,
Tags = tagDtos Tags = tagDtos,
UrlFormat = urlFormat
}; };
return View("~/Pages/CmsKit/Shared/Components/Tags/Default.cshtml", viewModel); return View("~/Pages/CmsKit/Shared/Components/Tags/Default.cshtml", viewModel);
@ -45,5 +47,6 @@ public class TagViewComponent : AbpViewComponent
public List<TagDto> Tags { get; set; } public List<TagDto> Tags { get; set; }
public string EntityId { get; set; } public string EntityId { get; set; }
public string EntityType { get; set; } public string EntityType { get; set; }
public string UrlFormat { get; set; }
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml

@ -85,7 +85,8 @@
@await Component.InvokeAsync(typeof(TagViewComponent), new @await Component.InvokeAsync(typeof(TagViewComponent), new
{ {
entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,
entityId = Model.BlogPost.Id.ToString() entityId = Model.BlogPost.Id.ToString(),
urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}"
}) })
} }
} }

6
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs

@ -24,6 +24,9 @@ public class IndexModel : CmsKitPublicPageModelBase
[BindProperty(SupportsGet = true)] [BindProperty(SupportsGet = true)]
public Guid? AuthorId { get; set; } public Guid? AuthorId { get; set; }
[BindProperty(SupportsGet = true)]
public Guid? TagId { get; set; }
public PagedResultDto<BlogPostPublicDto> Blogs { get; private set; } public PagedResultDto<BlogPostPublicDto> Blogs { get; private set; }
public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString());
@ -45,7 +48,8 @@ public class IndexModel : CmsKitPublicPageModelBase
{ {
SkipCount = PageSize * (CurrentPage - 1), SkipCount = PageSize * (CurrentPage - 1),
MaxResultCount = PageSize, MaxResultCount = PageSize,
AuthorId = AuthorId AuthorId = AuthorId,
TagId = TagId
}); });
if (AuthorId != null) if (AuthorId != null)

Loading…
Cancel
Save