- Added `getBlogTagFacets` API call to fetch blog tags based on city scope. - Updated `BlogsPage` to read selected tag from URL and handle tag changes with URL updates. - Modified `Title` component to display tags from the new API and reflect active tag state. - Enhanced breadcrumb navigation to link categories to their respective pages. - Adjusted related content section to display articles from the same category and fixed layout issues. - Corrected heading hierarchy across various components for better SEO compliance. - Ensured consistent styling and spacing in related content items.
109 lines
4.4 KiB
JavaScript
109 lines
4.4 KiB
JavaScript
import Link from "next/link";
|
|
import { convertTimestampToJalali } from "@/helper";
|
|
|
|
const crumbClass =
|
|
"text-[#9B9B9B] text-[11px] sm:text-[13px] md:text-[15px] lg:text-[16px] font-normal";
|
|
|
|
function Head({ data, cityName }) {
|
|
const firstTag = data?.tag?.[0];
|
|
const createdDate = data?.created ? convertTimestampToJalali(data.created) : "";
|
|
// normalizeBlog تگها را به [{name}] تبدیل میکند؛ نامِ خالی حذف میشود.
|
|
const tags = (Array.isArray(data?.tag) ? data.tag : [])
|
|
.map((t) => (typeof t === "string" ? t : t?.name))
|
|
.filter(Boolean);
|
|
|
|
return (
|
|
<div>
|
|
<nav
|
|
aria-label="مسیر"
|
|
className="flex flex-wrap items-center justify-start gap-1"
|
|
>
|
|
<Link href="/blogs" className={`${crumbClass} hover:text-[#525252]`}>
|
|
بلاگ
|
|
</Link>
|
|
<span className={crumbClass}>{">"}</span>
|
|
{firstTag?.name && (
|
|
<>
|
|
{/* دستهبندی خودش یک صفحهٔ مقصد دارد: همان لیست مقالهها فیلترشده. */}
|
|
<Link
|
|
href={`/blogs?tag=${encodeURIComponent(firstTag.name)}`}
|
|
className={`${crumbClass} hover:text-[#525252]`}
|
|
>
|
|
{firstTag.name}
|
|
</Link>
|
|
<span className={crumbClass}>{">"}</span>
|
|
</>
|
|
)}
|
|
<span className="text-[#525252] text-[11px] sm:text-[13px] md:text-[15px] lg:text-[16px] font-normal">
|
|
{data?.title}
|
|
</span>
|
|
</nav>
|
|
<div>
|
|
<h1 className="text-[#3B3B3B] mt-[24px] sm:mt-[29px] md:mt-[35px] lg:mt-[40px] text-[18px] sm:text-[22px] md:text-[26px] lg:text-[30px] font-bold leading-[1.6]">
|
|
{data?.title}
|
|
</h1>
|
|
</div>
|
|
<div className="flex mt-[16px] sm:mt-[18px] md:mt-[21px] lg:mt-[24px] items-center justify-start gap-[35px]">
|
|
{/* شهر پست در HTML قابلمشاهده — نه فقط در متادیتا. برچسب با همان
|
|
تایپوگرافی «نویسنده/تاریخ» تا با بقیهٔ سربرگ همخانواده بماند. */}
|
|
{cityName && (
|
|
<div className="flex items-center justify-start gap-1">
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[13px] lg:text-[14px] font-normal">
|
|
مخصوص شهر:
|
|
</p>
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[14px] lg:text-[16px] font-medium">
|
|
{cityName}
|
|
</p>
|
|
</div>
|
|
)}
|
|
{data?.author && (
|
|
<div className="flex items-center justify-start gap-1">
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[13px] lg:text-[14px] font-normal">
|
|
نویسنده:
|
|
</p>
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[14px] lg:text-[16px] font-medium">
|
|
{data.author}
|
|
</p>
|
|
</div>
|
|
)}
|
|
{createdDate && (
|
|
<div className="flex items-center justify-start gap-1">
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[13px] lg:text-[14px] font-normal">
|
|
تاریخ انتشار:
|
|
</p>
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[14px] lg:text-[16px] font-medium">
|
|
{createdDate}
|
|
</p>
|
|
</div>
|
|
)}
|
|
{data?.reading_time > 0 && (
|
|
<div className="flex items-center justify-start gap-1">
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[13px] lg:text-[14px] font-normal">
|
|
زمان مطالعه:
|
|
</p>
|
|
<p className="text-[#9B9B9B] text-[11px] md:text-[14px] lg:text-[16px] font-medium">
|
|
{data.reading_time} دقیقه
|
|
</p>
|
|
</div>
|
|
)}
|
|
</div>
|
|
{/* فهرست کامل تگها — تا این تغییر فقط تگ اول در بردکرامب دیده میشد.
|
|
صفحهٔ فیلتر تگ وجود ندارد، پس چیپها بدون لینک رندر میشوند. */}
|
|
{tags.length > 0 && (
|
|
<ul className="flex flex-wrap items-center justify-start gap-2 mt-[12px] md:mt-[16px]">
|
|
{tags.map((tag, idx) => (
|
|
<li
|
|
key={`${tag}-${idx}`}
|
|
className="bg-[#F5F5F5] text-[#525252] rounded-full px-[12px] py-[4px] text-[11px] md:text-[13px] font-medium"
|
|
>
|
|
{tag}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default Head;
|