1. Home
  2. NextJs
  3. Nextjs Basic
  4. পার্ট ৩: হেডার এবং ফুটার কম্পোনেন্ট তৈরি করা

পার্ট ৩: হেডার এবং ফুটার কম্পোনেন্ট তৈরি করা

৩.১: components ফোল্ডার তৈরি করা

প্রথমে আমরা components নামে একটি ফোল্ডার তৈরি করব, যেখানে আমাদের সমস্ত রিইউজেবল কম্পোনেন্ট থাকবে:

mkdir -p app/components

৩.২: হেডার কম্পোনেন্ট তৈরি করা

এখন আমরা app/components/Header.tsx ফাইল তৈরি করব:

import Link from 'next/link'

export default function Header() {
  return (
    <header className="bg-white shadow-sm">
      <div className="container-custom py-4">
        <div className="flex justify-between items-center">
          {/* লোগো */}
          <Link href="/" className="text-2xl font-bold text-primary no-underline">
            আমার ওযেবসাইট
          </Link>
          
          {/* নেভিগেশন লিংক */}
          <nav className="flex gap-6">
            <Link href="/" className="text-gray-700 hover:text-primary no-underline">
              হোম
            </Link>
            <Link href="/about" className="text-gray-700 hover:text-primary no-underline">
              আমাদের সমপরকে
            </Link>
            <Link href="/services" className="text-gray-700 hover:text-primary no-underline">
              সেবাসমূহ
            </Link>
            <Link href="/blog" className="text-gray-700 hover:text-primary no-underline">
              লগ
            </Link>
            <Link href="/contact" className="text-gray-700 hover:text-primary no-underline">
              যোগাযোগ
            </Link>
          </nav>
        </div>
      </div>
    </header>
  )
}

এই হেডার কম্পোনেন্টে আমরা:

  • Next.js এর Link কম্পোনেন্ট ব্যবহার করেছি, যা ক্লায়েন্ট-সাইড নেভিগেশন সাপোর্ট করে
  • একটি সাধারণ হেডার লেআউট তৈরি করেছি যেখানে বাম দিকে লোগো এবং ডান দিকে নেভিগেশন লিংক আছে
  • container-custom ক্লাস ব্যবহার করেছি, যা আমরা globals.css এ ডিফাইন করেছি
  • সমস্ত লিংকে no-underline ক্লাস যোগ করেছি যাতে ডিফল্ট আন্ডারলাইন না দেখায়

৩.৩: ফুটার কম্পোনেন্ট তৈরি করা

এখন আমরা app/components/Footer.tsx ফাইল তৈরি করব:

import Link from 'next/link'

export default function Footer() {
  const currentYear = new Date().getFullYear()
  
  return (
    <footer className="bg-gray-800 text-white py-8">
      <div className="container-custom">
        <div className="grid grid-cols-1 md:grid-cols-4 gap-8">
          {/* কলাম ১: সাইট সম্পর্কে */}
          <div className="col-span-1 md:col-span-2">
            <h3 className="text-xl font-bold mb-4">আমার ওযেবসাইট</h3>
            <p className="text-gray-300 mb-4">
              আমাদের ওযেবসাইটে আপনাকে বাগতমআমরা আধুনিক ওযেব টেকনোলজি যবহার করে উননতমানের সেবা রদান করি
            </p>
          </div>
          
          {/* কলাম ২: কুইক লিংক */}
          <div>
            <h3 className="text-xl font-bold mb-4">কুইক লিংক</h3>
            <ul className="space-y-2">
              <li>
                <Link href="/" className="text-gray-300 hover:text-white no-underline">
                  হোম
                </Link>
              </li>
              <li>
                <Link href="/about" className="text-gray-300 hover:text-white no-underline">
                  আমাদের সমপরকে
                </Link>
              </li>
              <li>
                <Link href="/services" className="text-gray-300 hover:text-white no-underline">
                  সেবাসমূহ
                </Link>
              </li>
              <li>
                <Link href="/blog" className="text-gray-300 hover:text-white no-underline">
                  লগ
                </Link>
              </li>
              <li>
                <Link href="/contact" className="text-gray-300 hover:text-white no-underline">
                  যোগাযোগ
                </Link>
              </li>
            </ul>
          </div>
          
          {/* কলাম ৩: যোগাযোগ */}
          <div>
            <h3 className="text-xl font-bold mb-4">যোগাযোগ</h3>
            <ul className="space-y-2 text-gray-300">
              <li>ঠিকানা: ১২৩, আজিমপুর রোড, ঢাকা</li>
              <li>ফোন: +৮৮০ ১৭১২ ৩৪৫৬৭৮</li>
              <li>ইমেইল: info@example.com</li>
            </ul>
          </div>
        </div>
        
        {/* কপিরাইট */}
        <div className="border-t border-gray-700 mt-8 pt-6 text-center text-gray-400">
          <p{currentYear} আমার ওযেবসাইটসরবসবত সংরকষিত</p>
        </div>
      </div>
    </footer>
  )
}

এই ফুটার কম্পোনেন্টে আমরা:

  • একটি গ্রিড লেআউট ব্যবহার করেছি যা মোবাইল ডিভাইসে একটি কলাম এবং ডেস্কটপে চারটি কলাম দেখাবে
  • সাইট সম্পর্কে, কুইক লিংক এবং যোগাযোগ তথ্য দেখানোর জন্য আলাদা সেকশন তৈরি করেছি
  • বর্তমান বছর দেখানোর জন্য JavaScript new Date().getFullYear() ব্যবহার করেছি
  • কপিরাইট সেকশন যোগ করেছি

৩.৪: মেইন লেআউট আপডেট করা

এখন আমরা app/layout.tsx ফাইলটি আপডেট করব যাতে সব পেজে হেডার এবং ফুটার দেখায়:

import './globals.css'
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import Header from './components/Header'
import Footer from './components/Footer'

// Inter ফন্ট লোড করা
const inter = Inter({ subsets: ['latin'] })

export const metadata: Metadata = {
  title: 'আমার Next.js ওয়েবসাইট',
  description: 'Next.js দিয়ে তৈরি করা একটি সুন্দর ওয়েবসাইট',
}

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="bn">
      <body className={inter.className}>
        <div className="flex flex-col min-h-screen">
          <Header />
          <main className="flex-grow">
            {children}
          </main>
          <Footer />
        </div>
      </body>
    </html>
  )
}

এই আপডেটে আমরা:

  • Header এবং Footer কম্পোনেন্ট ইম্পোর্ট করেছি
  • একটি ফ্লেক্স কন্টেইনার তৈরি করেছি যা পুরো স্ক্রিন হাইট নেবে
  • main এলিমেন্টকে flex-grow ক্লাস দিয়েছি যাতে এটি বাকি স্পেস নেয়
  • children প্রপ main এলিমেন্টের ভিতরে রেন্ডার করেছি

How can we help?