İçeriğe geç
LexerLangv0.1.0

Belge ve düzen

html_document, ortak düzen, ${children}, $page ve statik dosyalar.

LexerLang
use html_document

$doc = new html_document
$doc = new html_document({title: 'Başlık', lang: 'tr'})
ÇağrıKarşılığı
$doc.title = '...'<title>
$doc.lang = 'tr'<html lang>
$doc.head.add(...)<head> sonuna ekler
$doc.head.prepend(...)<head> başına ekler
$doc.body.add(...)<body> sonuna ekler
$doc.body.prepend(...)<body> başına ekler
$doc.from_file(<yol>)başka bir .lx dosyasını çalıştırıp belgesini döndürür
$doc.body.partseklenen parçaların dizisi

add ve prepend birden fazla parça alabilir ve bölümü döndürür.

Üretilen iskelet#

HTML
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>...</title>
... head parçaları ...
</head>
<body>
... body parçaları ...
</body>
</html>

<html>, <head>, <meta charset>, <meta viewport> ve <title> belge tarafından zaten yazılır; siz yalnızca kendi eklediklerinizi yazarsınız.

Ortak düzen#

LexerLang
$app.layout(path.pwd + "/layout.lx")
$app.layout({file: path.pwd + "/layout.lx"})
LexerLang
# layout.lx
$doc = new html_document
$doc.type = html_document.types.LAYOUT

$doc.head.add(`<link rel="stylesheet" href="/public/stil.css">`)
$doc.body.add(`
    <header>Belge ve düzen · LexerLang</header>
    <main>${children}</main>
`)
İşaretYerine geçen
${children}sayfanın gövdesi — zorunlu
Belge ve düzen · LexerLangsayfanın başlığı
trsayfanın dili

Düzen dosyası türünü bildirmek zorundadır (html_document.types.LAYOUT); bildirmezse sayfa sayılır ve hata verilir. ${children} yoksa da hata verilir — içeriğin nereye geleceği belirsiz olurdu.

$page#

Düzen sayfanın verisini $page ile de okur:

LexerLang
if not $page.indexable then
    $doc.body.add(`<small>Bu sayfa dizine eklenmez.</small>`)
end if
Alanİçerik
$page.title · $page.langsayfanın başlığı ve dili
$page.indexablesayfa dizine eklenebilir mi
$page.body · $page.headsayfanın ham parçaları

İşaretler kısa yol, $page ise koşul yazmaya yarar. $page sayfanın kopyasıdır: düzen sayfayı değiştiremez, aksi halde çıktının nereden geldiği izlenemez olurdu.

Parça sayfa — from_file#

LexerLang
# home.lx
package home
use html_document

$doc = new html_document
$doc.body.add(`<form>...</form>`)
LexerLang
$index = new html_document
$index = $index.from_file(path.pwd + "/home.lx")

$doc.body.add($index.body)     # yalnızca gövdesini yerleştir
$doc.body.add($index)          # aynı şey: belge verilirse gövdesi eklenir
  • Dahil edilen dosya kendi kapsamında çalışır; çağıranın değişkenlerini görmez ve değiştiremez. PHP'nin include'undan bilinçli farkı budur.
  • Dönen belge dosyadaki $doc'tur. $doc yoksa dosyadaki tek html_document kullanılır; birden fazlaysa hata verilir.
  • Belge verildiğinde yalnızca gövde eklenir; head sessizce karışmaz.
  • Döngüsel include yakalanır.

Statik dosyalar#

LexerLang
$app.static({url_path: "/public", directory: path.pwd + "/public"})

Verilen önekle gelen istekler dizinden karşılanır; route tablosundan önce bakılır. Dizin dışına çıkan yollar (/public/../gizli) reddedilir. İçerik türü uzantıdan belirlenir.

Robots ve sitemap#

LexerLang
$doc.indexable = false         # sayfaya "noindex, nofollow" meta etiketi

Varsayılan true.

LexerLang
$app.routes.create_sitemap({
    output_file: path.pwd + "/public/sitemap.xml",
    base_url: "https://ornek.com",
    skip: ["/gizli"]
})

Sitemap açılışta yazılır ve parametresiz yolları içerir: /urun/:id deseninin hangi adreslere karşılık geldiği bilinemez.

indexable = false sayfaya meta etiketi koyar ama sitemap'i etkilemez: sitemap açılışta, işleyiciler çalıştırılmadan yazılır; bir sayfanın kendini dizine kapatıp kapatmadığı o an bilinemez. Bir yolu listeden çıkarmak için skip kullanılır.

Sırada#

İstek ve yanıt.