From eac9820eed19567fb6c60d5cde3ed4a7bb918e39 Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Sun, 25 Aug 2024 12:23:36 +0330 Subject: [PATCH] #445 tajik search --- TajikGanjoor/Pages/Index.cshtml | 18 ++------ TajikGanjoor/Pages/Index.cshtml.cs | 73 ++++++++++++++++++++++++++---- TajikGanjoor/TajikGanjoor.csproj | 4 +- 3 files changed, 69 insertions(+), 26 deletions(-) diff --git a/TajikGanjoor/Pages/Index.cshtml b/TajikGanjoor/Pages/Index.cshtml index 5b540d2f..7a2e4a9e 100644 --- a/TajikGanjoor/Pages/Index.cshtml +++ b/TajikGanjoor/Pages/Index.cshtml @@ -22,21 +22,9 @@ @if (Model.Poems == null) {
-

شعری با مشخصات مورد نظر شما پیدا نشد.

+

Ёфт менашавад ҷустаем мо

- توصیه‌هایی برای دستیابی به نتیجهٔ مطلوبتر در جستجو: -

-

- الف) به جای جستجوی متن کامل یک بیت بهتر است حروف کلیدی آن را وارد کنید. از آنجا که اشعار به صورتهای مختلف در نسخه‌های متفاوت نقل شده‌اند ممکن است چیزی که شما در ذهن دارید با چیزی که در پایگاه ما ثبت شده متفاوت باشد. به عنوان نمونه مصرع «کشتی شکستگانیم ای باد شرطه برخیز» از حافظ در بعضی از نسخه‌ها به صورت «کشتی نشستگانیم ای باد شرطه برخیز» ضبط شده و شما با تایپ صورت صورت دوم آن را در گنجور نخواهید یافت. بهتر است برای یافتن این شعر کلماتی مانند کشتی و شرطه را جستجو کنیم. -

-

- ب) کلماتی را که ممکن است به صورت جدا یا سر هم نوشته شوند در گام اول به صورت جدا امتحان کنید (می شود و نه میشود یا می‌شود). -

-

- ج) در صورتی که نام سخنور را می‌دانید بهتر است از طریق لیست بازشوی جلوی جعبهٔ جستجو نام او را انتخاب کنید. این توصیه برای زمانی مناسب است که جستجوی عبارت مورد نظر شما باعث می‌شود آثار سخنورانی که مورد نظر شما نیستند در صدر نتایج قرار گیرد و به این وسیله شما می‌خواهید به فهرست محدودتری از نتایج دست پیدا کنید. -

-

- د) در صورتی که با فنون اولیهٔ جستجو آشنا نیستید یا معمولاً جستجوهایتان به نتیجهٔ مطلوب نمی‌رسد بد نیست نگاهی به این نوشته بیندازید. + Шеърии шомили ин иборат ёфт нашуд .

} @@ -65,7 +53,7 @@
 
- + @Html.Raw(Model.PagingToolsHtml) } else diff --git a/TajikGanjoor/Pages/Index.cshtml.cs b/TajikGanjoor/Pages/Index.cshtml.cs index f1d5b430..048c6cf0 100644 --- a/TajikGanjoor/Pages/Index.cshtml.cs +++ b/TajikGanjoor/Pages/Index.cshtml.cs @@ -6,10 +6,9 @@ using Newtonsoft.Json; using RMuseum.Models.Ganjoor.ViewModels; using RMuseum.Models.Ganjoor; using System.Net; -using DNTPersianUtils.Core; -using System.Drawing; -using RSecurityBackend.Models.Generic; using System.Text.RegularExpressions; +using RSecurityBackend.Models.Generic; + namespace TajikGanjoor.Pages @@ -18,8 +17,6 @@ namespace TajikGanjoor.Pages { public bool IsHomePage { get; set; } public bool IsSearchPage { get; set; } - - public string Query { get; set; } public List? Poets { get; set; } public bool IsPoetPage { get; set; } public bool IsCatPage { get; set; } @@ -30,6 +27,9 @@ namespace TajikGanjoor.Pages public string PreviousUrl { get; set; } public string PreviousTitle { get; set; } public string BreadCrumpUrls { get; set; } + public string Query { get; set; } + public PaginationMetadata PaginationMetadata { get; set; } + public string PagingToolsHtml { get; set; } public List Poems { get; set; } public async Task OnGetAsync() @@ -46,10 +46,11 @@ namespace TajikGanjoor.Pages } IsSearchPage = !string.IsNullOrEmpty(Request.Query["s"]); IsHomePage = !IsSearchPage && Request.Path == "/"; - if(IsSearchPage) + int pageNumber = 1; + if (IsSearchPage) { Query = Request.Query["s"].ToString().Trim(); - int pageNumber = 1; + if (!string.IsNullOrEmpty(Request.Query["page"])) { pageNumber = int.Parse(Request.Query["page"]); @@ -139,7 +140,20 @@ namespace TajikGanjoor.Pages } - + + + string paginationMetadataJsonValue = searchQueryResponse.Headers.GetValues("paging-headers").FirstOrDefault(); + + if (!string.IsNullOrEmpty(paginationMetadataJsonValue)) + { + PaginationMetadata = JsonConvert.DeserializeObject(paginationMetadataJsonValue); + string catQuery = ""; + if (!string.IsNullOrEmpty(Request.Query["cat"])) + { + catQuery = $"&cat={Request.Query["cat"]}"; + } + PagingToolsHtml = GeneratePagingBarHtml(PaginationMetadata, $"/?s={WebUtility.UrlEncode(Query)}"); + } } } @@ -193,6 +207,10 @@ namespace TajikGanjoor.Pages if (IsSearchPage) { ViewData["Title"] = $"Ганҷур - ҷустуҷӯ - {Query}"; + if(pageNumber > 1) + { + ViewData["Title"] += "Сафҳа ӣ " + pageNumber.ToString(); + } } else if (IsHomePage) @@ -347,7 +365,44 @@ namespace TajikGanjoor.Pages } } - public string? LastError { get; set; } + private string GeneratePagingBarHtml(PaginationMetadata paginationMetadata, string routeStartWithQueryStrings) + { + string htmlText = $"
{Environment.NewLine}"; + + + if (paginationMetadata != null && paginationMetadata.totalPages > 1) + { + if (paginationMetadata.currentPage > 3) + { + htmlText += $"
۱
{Environment.NewLine} …"; + } + for (int i = paginationMetadata.currentPage - 2; i <= (paginationMetadata.currentPage + 2); i++) + { + if (i >= 1 && i <= paginationMetadata.totalPages) + { + if (i == paginationMetadata.currentPage) + { + htmlText += $"
{i}
"; + } + else + { + htmlText += $"
{i}
{Environment.NewLine}"; + } + } + } + if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2)) + { + htmlText += $"…
{paginationMetadata.totalPages}
{Environment.NewLine}"; + } + } + + htmlText += $"
{Environment.NewLine}"; + return htmlText; + } + + + + public string? LastError { get; set; } public bool AggressiveCacheEnabled { diff --git a/TajikGanjoor/TajikGanjoor.csproj b/TajikGanjoor/TajikGanjoor.csproj index 99943df6..4dfc02ba 100644 --- a/TajikGanjoor/TajikGanjoor.csproj +++ b/TajikGanjoor/TajikGanjoor.csproj @@ -7,11 +7,11 @@ - 1701;1702;8602;8618;8601;8604;8625 + 1701;1702;8602;8618;8601;8604;8625;8600 - 1701;1702;8602;8618;8601;8604;8625 + 1701;1702;8602;8618;8601;8604;8625;8600