Initial ASPHP website

This commit is contained in:
Codex
2026-09-06 00:14:09 +03:30
commit ff6d5a3c0c
65 changed files with 14617 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import Image from "next/image";
import { PageShell } from "../../components";
import { getBlog } from "../../meshkee";
import { blogCanonicalPath, pageMetadata } from "../../seo";
export async function generateMetadata({ params }) {
const { slug } = await params;
const blog = await getBlog(slug);
return pageMetadata({
title: blog.title,
description: (blog.abstract || "مقاله آموزشی آریا شبکه پیشرو درباره تجهیزات سرور و شبکه.").slice(0, 160),
path: blogCanonicalPath(blog),
image: blog.image
});
}
export default async function BlogDetailPage({ params }) {
const { slug } = await params;
const blog = await getBlog(slug);
return (
<PageShell>
<article className="section blog-detail">
<div className="container blog-detail-inner">
<div className="blog-detail-image">
<Image src={blog.image} alt={blog.title} fill sizes="(max-width: 900px) 100vw, 900px" />
</div>
<time>{blog.date}</time>
<h1>{blog.title}</h1>
<p className="blog-abstract">{blog.abstract}</p>
<div className="rich-text" dangerouslySetInnerHTML={{ __html: blog.html || `<p>${blog.abstract}</p>` }} />
</div>
</article>
</PageShell>
);
}
+44
View File
@@ -0,0 +1,44 @@
import Image from "next/image";
import Link from "next/link";
import { PageShell } from "../components";
import { getBlogs } from "../meshkee";
import { pageMetadata } from "../seo";
export const metadata = pageMetadata({
title: "مقالات آریا شبکه پیشرو",
description: "مقالات آموزشی و راهنمای خرید درباره سرور HP، رم ECC، هارد سرور، تجهیزات شبکه و انتخاب قطعات مناسب کسب و کار.",
path: "/blog"
});
export default async function BlogPage() {
const { items, fallback } = await getBlogs({ pageSize: 12 });
return (
<PageShell>
<section className="page-hero blog-hero">
<div className="container">
<span>BLOG</span>
<h1>مقالات آریا شبکه پیشرو</h1>
<p>مقالات از Meshkee خوانده می شود و در صورت نبود داده، محتوای نمونه سایت نمایش داده می شود.</p>
</div>
</section>
<section className="section">
<div className="container">
{fallback ? <p className="api-note">فعلا مقاله ای از API برنگشت؛ نمایش مقالات نمونه فعال است.</p> : null}
<div className="blog-grid">
{items.map((blog) => (
<Link className="blog-card" href={`/blog/${blog.slug}`} key={blog.id}>
<div className="blog-image">
<Image src={blog.image} alt={blog.title} fill sizes="(max-width: 800px) 100vw, 33vw" />
</div>
<time>{blog.date}</time>
<h2>{blog.title}</h2>
<p>{blog.abstract}</p>
</Link>
))}
</div>
</div>
</section>
</PageShell>
);
}