Pug - Layout ve Block Yapısı - Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Pug – Layout ve Block Yapısı

Merhaba,

Bu içeriğimizde Pug paketinde Layout yapısının Block kullanılarak nasıl inşa edildiğini ele alacağız.

İlk olarak ana dizinimizde bulunan “views” klasörüne “layout.pug” adında bir dosya ekleyelim. Layout’ta sitemizin genel tasarımını tutacağız lakin düzeni oluştururken micro yönetimi sağlayabilmek için site tasarımını mümkün mertebe küçük parçalara bölmemiz gerekecektir. Bu işlemide “block” yapısını kullanarak icra edeceğiz.

//- layout.pug
html
    head
        block header
    body
        block content
        block footer

Yukarıdaki “layout.pug” dosyasına göz atarsanız eğer sitenin ana tasarım şablonu oluşturulmuş ama opsiyonel kısımları “block” keywordü ile bu layout’tan türeyecek sınıflara bırakılmıştır.

Layout’tan türeyen sayfalarda ise aşağıda olduğu gibi ilgili layout sayfası “extends” edilmelidir. Ardından block kısımları yine “block” keywordü ile çağrılıp istenildiği şekilde doldurulmaktadır.

//-home.pug
extends layout
block header
    title Home Sayfası
block content
    div
        strong Merhaba
        p Burası Home sayfasıdır.
block footer
    span
        |Alt Bölüm | Home
//-about.pug
extends layout
block header
    title About Sayfası
block content
    div
        strong Merhaba
        p Burası About sayfasıdır.
block footer
    span
        |Alt Bölüm | Footer
//-contact.pug
extends layout
block header
    title Contact Sayfası
block content
    div
        strong Merhaba
        p Burası Contact sayfasıdır
block footer
    span
        |Alt Bölüm | Contact

Bu dosyalar hazırlandıktan sonra script üzerinden her pug dosyasına özel route tanımlanıp ilişkili dosyalar render edilmelidir.

const express = require("express");
const app = express();
app.set("view engine", "pug");
app.get("/", (request, response) => {
    response.render("home");
});
app.get("/home", (request, response) => {
    response.render("home");
});
app.get("/about", (request, response) => {
    response.render("about");
});
app.get("/contact", (request, response) => {
    response.render("contact");
})
app.listen(5000, () => {
    console.log("Yayın başladı...");
});

Oluşturduğumuz sunucuda dinlediğimiz 5000 portunu tetiklersek eğer aşağıdaki gibi sonuçlar alınacaktır.

home.pug için;
<html><head><title>Home Sayfası</title></head><body><div><strong>Merhaba</strong><p>Burası Home sayfasıdır.</p></div><span>Alt Bölüm | Home</span></body></html>
about.pug için;
<html><head><title>About Sayfası</title></head><body><div><strong>Merhaba</strong><p>Burası About sayfasıdır.</p></div><span>Alt Bölüm | Footer</span></body></html>
contact.pug için;
<html><head><title>Contact Sayfası</title></head><body><div><strong>Merhaba</strong><p>Burası Contact sayfasıdır</p></div><span>Alt Bölüm | Contact</span></body></html>

Şuana kadar yapmış olduğumuz çalışmada block keywordleri layout’ta ki şablonu ezerek barındırdıkları içeriği ilgili alana eklemektedirler.

Sözgelimi;

html
    head
        block header
            meta(description = `${title} Sayfası`)
    body
        block content
        block footer

Yukarıdaki layout’ta gördüğünüz header bloğunda varsayılan olarak bir meta etiketi tanımlanmıştır. Eğer ki bu layout şuana kadar bildiğimiz şekilde kullanılırsa;

//-home.pug
extends layout

block header
    title Home Sayfası
block content
    div
        strong Merhaba
        p Burası Home sayfasıdır.
block footer
    span
        |Alt Bölüm | Home

header bloğu komple ezilmekte ve yerine pug sayfamızda belirtilen ilgili bloğa ait veri basılmaktadır. Dolayısıyla render sonucu elde edilen sonuç aşağıdaki gibi olacaktır;
<html><head><title>Home Sayfası</title></head><body><div><strong>Merhaba</strong><p>Burası Home sayfasıdır.</p></div><span>Alt Bölüm | Home</span></body></html>
İşte böyle durumlarda, layout’ta ki varsayılan şablonların yanına pug dosyasından gelen yapıları eklemek istiyorsanız “append” keywordünü aşağıdaki gibi kullanmanız yeterlidir.

extends layout

block append header
    title Home Sayfası
block content
    div
        strong Merhaba
        p Burası Home sayfasıdır.
block footer
    span
        |Alt Bölüm | Home

Bu durumda elde edilen çıktı;
<html><head><meta description="Home Sayfası"/><title>Home Sayfası</title></head><body><div><strong>Merhaba</strong><p>Burası Home sayfasıdır.</p></div><span>Alt Bölüm | Home</span></body></html>
şeklinde olacaktır.

Tabi yukarıdaki son örnekte script dosyasından “title” parametresini göndermeyi unutmuyoruz 😉

const express = require("express");
const app = express();
app.set("view engine", "pug");
app.get("/", (request, response) => {
    response.render("home", { title: "Home" });
});
app.get("/home", (request, response) => {
    response.render("home", { title: "Home" });
});
app.get("/about", (request, response) => {
    response.render("about", { title: "About" });
});
app.get("/contact", (request, response) => {
    response.render("contact", { title: "Contact" });
})
app.listen(5000, () => {
    console.log("Yayın başladı...");
});

Velhasıl, Pug paketinde block keywordü ile layout yapısının nasıl kullanıldığını incelemiş olduk. Faydalanmanız dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.