MDX içerik
Yazılar, sayfalar, kendi içerik tipleriniz ve bölümler MDX ile yazılabilir: Markdown, HTML ve sitenizin izin verdiği bileşenler.
MDX nerede kullanılır
Bölüm başlığı “MDX nerede kullanılır”- Starter’daki yazılar ve sayfalar MDX koleksiyonlarıdır (
wuppy.config.mjsiçindeformat: "mdx"). Yeni girdiler.mdxolarak kaydedilir. Mevcut.mddosyaları.mdkalır ve çalışmaya devam eder; bir koleksiyon ikisini birden tutabilir. - Admin’de oluşturduğunuz içerik tipleri varsayılan olarak MDX’tir. İsterseniz Markdown seçebilirsiniz.
- Bölümler (sections) gövdelerini MDX olarak saklar.
- Widget’lar: custom widget gövdesi MDX’tir; HTML widget kaydedilmeden önce aşağıdaki ham HTML denetiminden geçer (gösterirken yine temizlenir). Metin widget’ları düz metin olarak gösterilir.
Yazarlar ne yazabilir
Bölüm başlığı “Yazarlar ne yazabilir”-
Markdown, HTML öğeleri ve
wuppy.config.mjsiçindekicomponentslistesindeki bileşenler:export default { components: ["Callout", "YouTube"], collections: [/* … */] }; -
Bileşen özellikleri yalnızca düz değerlerdir: metin, sayı,
true/false, JSON olarak yazılmış liste ve nesneler.<Callout tone="info" items={["a", "b"]}>geçerlidir.
Neler reddedilir
Bölüm başlığı “Neler reddedilir”Gövde şunlardan birini içeriyorsa kayıt nedeniyle birlikte reddedilir (HTTP 422, DISALLOWED_CONTENT):
importveyaexportsatırları.{process.env.SECRET}ya datitle={user.name}gibi JavaScript ifadeleri. Yorum ({/* … */}) serbesttir.- İzin listesinde olmayan bileşenler ve
<a.b>gibi üye adları. - Yayılan özellikler (
{...props}). - Olay işleyiciler (
onclick,onError…), Astro yönergeleri (set:html,is:raw,client:*),dangerouslySetInnerHTMLvesrcdoc. script,style,iframe,object,embed,form,link,meta,baseve benzeri etiketler.javascript:,vbscript:vedata:bağlantıları.data:resimleri (PNG, JPEG, GIF, WebP, AVIF) serbesttir.- Ayrıştırılamayan MDX. Hata satırı gösterir; böylece site build’i bu yüzden kırılmaz.
Markdown (.md) gövdeleri de aynı tehlikeli etiket, öznitelik ve bağlantılar için denetlenir.
Gövde, Astro’nun kullandığı ayrıştırıcıyla denetlenir. Kod blokları içindeki kod metindir, denetlenmez.
Sitede
Bölüm başlığı “Sitede”-
Starter’ın
astro.config.mjsdosyasında@astrojs/mdxvardır ve**/*.{md,mdx}yüklenir. Mevcut bir Astro projesindewuppycms initaynısını yapar:mdx()ile@astrojs/mdx’i ekler vepattern: "**/*.md"glob’larını**/*.{md,mdx}yapar. -
Tema bileşenleri otomatik eşlenir: Wuppy, temanın sayfalarındaki
<Content />öğesine bircomponentsharitası ekler; böylece temanınsrc/components/*.astrodosyaları Add → Components üzerinden içe aktarma satırı olmadan eklenebilir. -
Sitenin kendi bileşenleri için adlarını
wuppy.config.mjsiçindekicomponentslistesine ekleyin ve bir girdiyi gösterirken verin:<Content components={{ Callout }} />. -
Admin’de düzenlenen bir MDX girdisi build gerekmeden hemen görünür. Sitenin Markdown ayarlarıyla derlenir: başlıklar build’dekiyle aynı id’leri ve
headingslistesini, kod blokları aynı renklendirmeyi alır. -
Bir bölüm (ya da custom widget) gövdesini
wuppycms/mdxiçindekimdxContentile gösterin. Göstermeden önce aynı denetimleri yeniden yapar verender()ile aynı şeyi,{ Content, headings }döndürür:---import { getSection } from "wuppycms";import { mdxContent } from "wuppycms/mdx";import Callout from "../components/Callout.astro";const section = await getSection("cta");const { Content: Body } = section ? await mdxContent(section.body) : {};---{Body && <Body components={{ Callout }} />}