Let's Go تمرین‌های راهنما › اضافه کردن صفحه 'درباره' به برنامه
قبلی · فهرست · بعدی
فصل ۱۶.۱.

اضافه کردن صفحه 'درباره' به برنامه (Adding an About Page to the Application)

هدف شما در این تمرین اضافه کردن یک صفحه جدید (New Page) 'درباره' به برنامه است. این صفحه باید به مسیر (Route) GET /about متصل شود و برای کاربران احراز هویت شده (Authenticated Users) و نشده در دسترس باشد و به این شکل به نظر برسد:

16.01-01.png

مرحله ۱

یک مسیر (Route) GET /about ایجاد کنید که به یک هندلر (Handler) جدید about متصل شود. به این فکر کنید که کدام استک میان‌افزار (Middleware Stack) برای استفاده در این مسیر مناسب است.

نمایش کد پیشنهادی

مرحله ۲

یک فایل قالب (Template File) جدید ui/html/pages/about.tmpl ایجاد کنید و الگوی (Pattern) مشابهی که برای صفحات دیگر برنامه استفاده کرده‌ایم را دنبال کنید. یک عنوان (Title)، سرصفحه (Header) و مقداری متن جایگزین برای صفحه 'درباره' اضافه کنید.

نمایش کد پیشنهادی

مرحله ۳

نوار ناوبری (Navigation Bar) اصلی برنامه را به‌روزرسانی کنید تا شامل یک پیوند (Link) به صفحه جدید 'درباره' باشد (پیوند باید برای همه کاربران، صرف نظر از اینکه وارد شده‌اند یا نه، قابل مشاهده باشد).

نمایش کد پیشنهادی

مرحله ۴

هندلر about را به‌روزرسانی کنید تا فایل قالب (Template File) about.tmpl که به تازگی ایجاد کرده‌اید را رندر (Render) کند. سپس بررسی کنید که صفحه جدید و ناوبری با بازدید از https://localhost:4000/about در مرورگر شما کار می‌کند.

نمایش کد پیشنهادی

کد پیشنهادی

کد پیشنهادی برای مرحله ۱

File: cmd/web/handlers.go
package main

...

func (app *application) about(w http.ResponseWriter, r *http.Request) {
    // Some code will go here later...
}

کد پیشنهادی برای مرحله ۲

File: ui/html/pages/about.tmpl
{{define "title"}}About{{end}}

{{define "main"}}
    <h2>About</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi at mauris dignissim,
    consectetur tellus in, fringilla ante. Pellentesque habitant morbi tristique senectus
    et netus et malesuada fames ac turpis egestas. Sed dignissim hendrerit scelerisque.</p>
    <p>Praesent a dignissim arcu. Cras a metus sagittis, pellentesque odio sit amet,
    lacinia velit. In hac habitasse platea dictumst. </p>
{{end}}

کد پیشنهادی برای مرحله ۳

File: ui/html/partials/nav.tmpl
{{define "nav"}}
<nav>
    <div>
        <a href='/'>Home</a>
        <!-- Include a new link, visible to all users -->
        <a href='/about'>About</a>
         {{if .IsAuthenticated}}
            <a href='/snippet/create'>Create snippet</a>
        {{end}}
    </div>
    <div>
        {{if .IsAuthenticated}}
            <form action='/user/logout' method='POST'>
                <input type='hidden' name='csrf_token' value='{{.CSRFToken}}'>
                <button>Logout</button>
            </form>
        {{else}}
            <a href='/user/signup'>Signup</a>
            <a href='/user/login'>Login</a>
        {{end}}
    </div>
</nav>
{{end}}

کد پیشنهادی برای مرحله ۴

File: cmd/web/handlers.go
package main

...

func (app *application) about(w http.ResponseWriter, r *http.Request) {
    data := app.newTemplateData(r)
    app.render(w, r, http.StatusOK, "about.tmpl", data)
}

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
صفحه جدید New Page صفحه تازه اضافه شده به برنامه
مسیر Route آدرس دسترسی به صفحه
کاربران احراز هویت شده Authenticated Users کاربران وارد شده به سیستم
هندلر Handler پردازش‌کننده درخواست
استک میان‌افزار Middleware Stack لایه‌های پردازش درخواست
فایل قالب Template File فایل حاوی ساختار HTML
الگو Pattern ساختار تکرارشونده
عنوان Title نام نمایشی صفحه
سرصفحه Header بخش بالای صفحه
نوار ناوبری Navigation Bar منوی هدایت برنامه
پیوند Link اتصال به صفحه دیگر
رندر Render تولید خروجی نهایی