TinaCMS ve Gatsby ile Dinamik İçerik Yönetimi: Kapsamlı Bir Rehber
Modern web geliştirme dünyası, hız, güvenlik ve ölçeklenebilirlik gibi temel prensipler üzerine kuruludur. Bu prensiplere en iyi yanıt veren yaklaşımlardan biri de Statik Site Jeneratörleri (SSG’ler) olmuştur. Gatsby, bu alanda React ve GraphQL’in gücünü birleştirerek geliştiricilere benzersiz bir deneyim sunar. Ancak, statik sitelerin sunduğu performans avantajlarına rağmen, içerik yönetimi genellikle geliştiricilerin müdahalesini gerektiren bir süreç olmuştur. Bu durum, teknik bilgiye sahip olmayan içerik editörleri için büyük bir engel teşkil eder. İşte tam bu noktada TinaCMS devreye girerek, Gatsby gibi SSG’lerle dinamik ve geliştirici dostu bir içerik yönetim deneyimi sunar.
Bu makalede, TinaCMS’in ne olduğunu, Gatsby ile nasıl entegre edileceğini, temel özelliklerini ve gelişmiş kullanım senaryolarını ayrıntılı bir şekilde inceleyeceğiz. Ayrıca, bu güçlü kombinasyonun avantajları ve potansiyel zorlukları üzerinde durarak, projeleriniz için doğru bir karar vermenize yardımcı olmayı hedefliyoruz. Amacımız, geliştiricilerin ve içerik yöneticilerinin birlikte sorunsuz bir şekilde çalışabileceği, yüksek performanslı ve yönetimi kolay web siteleri oluşturmanın kapılarını aralamaktır.
Statik Site Jeneratörleri ve Gatsby’nin Gücü
Web sitelerinin oluşturulma biçimi, internetin ilk günlerinden bu yana önemli ölçüde değişti. Dinamik sunucu tabanlı uygulamaların (PHP, ASP.NET, Ruby on Rails) popülerliğinin ardından, performans, güvenlik ve ölçeklenebilirlik gibi faktörler, statik site jeneratörlerini (SSG’ler) ön plana çıkardı.
Statik Sitelerin Avantajları
Statik siteler, içeriği önceden oluşturulmuş HTML, CSS ve JavaScript dosyaları olarak sunar. Bu yaklaşımın birçok önemli avantajı vardır:
* Performans: Sunucu tarafında herhangi bir işlem yapılmadığı için sayfalar anında yüklenir. Bu, kullanıcı deneyimini önemli ölçüde iyileştirir ve arama motoru sıralamalarını olumlu etkiler.
* Güvenlik: Veritabanı veya sunucu tarafı kodlama olmadığı için saldırı yüzeyi çok daha küçüktür. Bu da statik siteleri siber saldırılara karşı daha dirençli hale getirir.
* Ölçeklenebilirlik: İçerik Dağıtım Ağları (CDN’ler) aracılığıyla kolayca dağıtılabilirler. Yüksek trafik durumlarında bile performans düşüşü yaşanmaz, çünkü tüm dosyalar önbelleğe alınabilir ve dünya genelindeki sunuculardan hızlıca sunulabilir.
* Daha Düşük Maliyet: Dinamik sunuculara göre daha az kaynak gerektirdiğinden, barındırma maliyetleri genellikle daha düşüktür.
* Geliştirme Hızı: Geliştiriciler, modern JavaScript araçlarını ve bileşen tabanlı yaklaşımları kullanarak daha hızlı ve verimli bir şekilde site oluşturabilirler.
Gatsby Nedir?
Gatsby, React tabanlı, açık kaynaklı bir statik site jeneratörüdür. Web sitelerini ve uygulamalarını son derece hızlı, güvenli ve ölçeklenebilir bir şekilde oluşturmak için tasarlanmıştır. Gatsby’nin temel özellikleri şunlardır:
* React Tabanlı: Modern web geliştirmede popüler olan React kütüphanesini kullanır. Bu sayede geliştiriciler, bileşen tabanlı bir mimariyle çalışabilir ve mevcut React bilgilerini değerlendirebilir.
* GraphQL Veri Katmanı: Gatsby, sitenizdeki tüm verileri (Markdown dosyaları, API’ler, veritabanları, CMS’ler vb.) tek bir GraphQL katmanı aracılığıyla erişilebilir kılar. Bu, veri çekme ve yönetme sürecini son derece esnek ve güçlü hale getirir.
* Geniş Plugin Ekosistemi: Gatsby, yüzlerce eklentiye sahip geniş bir ekosisteme sahiptir. Bu eklentiler, veri kaynaklarını entegre etmekten (örneğin gatsby-source-filesystem, gatsby-source-shopify), görüntüleri optimize etmeye (gatsby-plugin-image) veya stilleme çözümlerini entegre etmeye kadar birçok farklı işlevi yerine getirir.
* Performans Optimizasyonları: Gatsby, varsayılan olarak birçok performans optimizasyonu uygular: kod bölme (code splitting), lazy loading, görüntü optimizasyonu, önbellekleme ve daha fazlası. Bu, sitelerin kutudan çıktığı gibi hızlı olmasını sağlar.
Gatsby’nin İçerik Yönetimi Çıkmazı
Gatsby, teknik olarak içerik yönetimi için oldukça esnek bir yapı sunar. İçerik, Markdown dosyaları, JSON dosyaları veya çeşitli Headless CMS’lerden (Contentful, Strapi, Sanity vb.) çekilebilir. Ancak, bu esneklik genellikle geliştiricilerin müdahalesini gerektirir:
* Markdown Dosyaları: Blog yazıları veya statik sayfalar için Markdown dosyaları kullanmak yaygın bir yöntemdir. Ancak, içerik editörlerinin Markdown sözdizimini bilmesi ve dosyaları doğrudan Git deposunda düzenlemesi gerekir. Bu, teknik olmayan kullanıcılar için zorlayıcı olabilir.
* JSON Dosyaları: Yapılandırılmış veriler için JSON dosyaları kullanılabilir, ancak yine de doğrudan dosya düzenlemesi gerektirir.
* Headless CMS Entegrasyonu: Headless CMS’ler, içeriği API aracılığıyla sunarak bu sorunu çözebilir. Ancak, bu tür bir entegrasyon ek bir öğrenme eğrisi, ayrı bir hizmete bağımlılık ve genellikle ek maliyet anlamına gelir. Ayrıca, çoğu headless CMS, geliştiricilerin içeriği “canlı” olarak düzenlemesine olanak tanıyan görsel bir düzenleme deneyimi sunmaz.
Bu noktada, TinaCMS, Gatsby’nin performans avantajlarını korurken, içerik yönetimini geliştiriciler ve içerik editörleri için çok daha erişilebilir hale getiren bir köprü görevi görür.
TinaCMS Nedir ve Neden Önemlidir?
TinaCMS, statik site jeneratörleri ile dinamik içerik yönetimi arasındaki boşluğu doldurmak için tasarlanmış, açık kaynaklı bir içerik yönetim sistemidir. Özellikle Gatsby ve Next.js gibi React tabanlı SSG’lerle mükemmel bir uyum içindedir.
TinaCMS’in Tanımı
TinaCMS, geliştiricilerin web sitelerini Git deposu tabanlı bir CMS ile kolayca yönetmelerini sağlayan bir araç setidir. Temel olarak, web sitenizin içeriğini doğrudan Git deponuzda (örneğin GitHub, GitLab) Markdown, JSON veya MDX dosyaları olarak saklar. Bu yaklaşım, içerik yönetimini geliştirme iş akışına entegre eder ve hem geliştiriciler hem de içerik editörleri için bir dizi avantaj sunar.
TinaCMS’in en ayırt edici özelliklerinden biri, içeriği doğrudan önizleme modunda düzenleme yeteneği olan “Visual Editing”dir. Bu, içerik editörlerinin değişikliklerini gerçek zamanlı olarak görmelerine ve yayınlamadan önce nasıl görüneceğini anlamalarına olanak tanır.
Git-Tabanlı CMS Anlayışı
Geleneksel CMS’ler (WordPress, Drupal vb.) içeriği bir veritabanında saklar. Headless CMS’ler ise içeriği bir API aracılığıyla sunar. TinaCMS ise farklı bir yaklaşım benimser: içeriği doğrudan projenizin Git deposunda, yapılandırılmış dosyalar (Markdown, JSON, MDX) olarak depolar.
Bu Git-tabanlı yaklaşımın önemli avantajları şunlardır:
* Versiyon Kontrolü: Her içerik değişikliği, Git’in versiyon kontrol sistemine kaydedilir. Bu, değişiklikleri kolayca takip etmeyi, önceki sürümlere geri dönmeyi ve farklı içerik dalları üzerinde çalışmayı mümkün kılar.
* Güvenlik ve Yedekleme: İçerik, Git deposunda olduğu için otomatik olarak yedeklenir ve Git’in doğal güvenlik mekanizmalarından faydalanır.
* Geliştirme İş Akışı Entegrasyonu: İçerik, kodla birlikte aynı Git deposunda bulunduğundan, geliştiriciler için tanıdık bir iş akışı sunar. İçerik değişiklikleri, Pull Request (PR) veya Merge Request (MR) süreçlerine entegre edilebilir.
* Geliştirici Deneyimi: Geliştiriciler, Git ve dosya sistemleriyle çalışmaya alışkın oldukları için TinaCMS’i kolayca entegre edebilir ve genişletebilirler.
* Taşınabilirlik: İçerik, standart dosya formatlarında depolandığı için başka sistemlere taşınması veya yedeklenmesi oldukça kolaydır.
Bu yaklaşımın bir dezavantajı, her içerik değişikliğinin bir Git commit’i tetiklemesi ve genellikle sitenin yeniden derlenmesini (build) gerektirmesidir. Bu, büyük sitelerde veya sık içerik güncellemelerinde build sürelerinin uzamasına neden olabilir. Ancak, Tina Cloud gibi hizmetler bu süreci optimize etmek için tasarlanmıştır.
TinaCMS’in Temel Özellikleri
TinaCMS’i rakiplerinden ayıran ve onu Gatsby ile güçlü bir kombinasyon haline getiren temel özellikler şunlardır:
* Visual Editing (Canlı Düzenleme): TinaCMS’in en çarpıcı özelliğidir. İçerik editörleri, sitenin önizleme modunda gezinirken doğrudan sayfadaki metinleri, resimleri veya diğer bileşenleri düzenleyebilirler. Bu, “ne görüyorsan onu alırsın” (WYSIWYG) deneyimini bir üst seviyeye taşır.
* Schema Tanımlama: TinaCMS, içeriğinizin yapısını (hangi alanlara sahip olduğu, türleri vb.) tanımlamanızı sağlayan bir schema sistemi kullanır. Bu schema, TypeScript ile yazılır ve içerik editörlerinin doğru formatta veri girmesini sağlar. Örneğin, bir blog yazısı için başlık (string), içerik (markdown), yazar (reference), kapak resmi (image) gibi alanlar tanımlayabilirsiniz.
* React Bileşenleri ile Entegrasyon: TinaCMS, React bileşenleriyle sorunsuz bir şekilde entegre olur. useTina hook’u gibi araçlar sayesinde, sayfa veya bileşen seviyesinde canlı düzenleme yeteneklerini kolayca etkinleştirebilirsiniz.
* Tina Cloud: Tina Cloud, TinaCMS’in geliştirilmiş bir versiyonu olup, Git tabanlı iş akışını yöneten bir arka uç hizmeti sunar. Kimlik doğrulama, Git entegrasyonu (commit’ler, branch’ler), içerik önizleme sunucusu ve dağıtım süreçlerini basitleştirir. Tina Cloud, geliştiricilerin kendi Git sunucularını veya kimlik doğrulama sistemlerini kurma yükünü ortadan kaldırır. Ücretsiz bir katmanı bulunur ve çoğu proje için yeterli esnekliği sağlar.
* MDX Desteği: MDX, Markdown’ın gücünü React bileşenlerinin esnekliğiyle birleştiren bir formatttır. TinaCMS, MDX alanlarını destekleyerek içerik editörlerinin Markdown dosyalarına özel React bileşenleri eklemesine olanak tanır.
* Bloklar ve Bileşen Alanları: TinaCMS, daha karmaşık ve dinamik sayfa düzenleri oluşturmak için “bloklar” veya “bileşen alanları” tanımlamanıza izin verir. Bu sayede içerik editörleri, bir sayfaya farklı türde içerik blokları (örneğin, metin bloğu, resim bloğu, çağrı-eylem bloğu) ekleyebilir ve bunların sıralamasını değiştirebilir.
Bu özellikler, TinaCMS’i hem geliştiriciler için esnek bir araç hem de içerik editörleri için güçlü ve sezgisel bir platform haline getirir.
Gatsby ve TinaCMS Entegrasyonu: Adım Adım Rehber
TinaCMS’i bir Gatsby projesine entegre etmek, projenizin yapısına ve ihtiyaçlarına göre değişse de, temel adımlar oldukça standarttır. Bu bölümde, sıfırdan bir Gatsby projesi oluşturarak TinaCMS’i nasıl entegre edeceğinizi adım adım inceleyeceğiz.
Ön Koşullar
Başlamadan önce aşağıdaki araçların sisteminizde kurulu olduğundan emin olun:
* Node.js ve npm/yarn: JavaScript çalışma zamanı ve paket yöneticisi.
* Git: Versiyon kontrol sistemi.
* Gatsby CLI: Gatsby projeleri oluşturmak ve yönetmek için komut satırı aracı. npm install -g gatsby-cli komutuyla kurabilirsiniz.
Yeni Bir Gatsby Projesi Oluşturma
İlk olarak, yeni bir Gatsby projesi oluşturalım:
gatsby new my-tina-gatsby-app https://github.com/gatsbyjs/gatsby-starter-hello-world
cd my-tina-gatsby-app
Bu komut, basit bir “Hello World” şablonu kullanarak yeni bir Gatsby projesi oluşturacaktır.
TinaCMS’i Projeye Ekleme
TinaCMS’i projenize entegre etmek için gerekli paketleri kurmanız gerekmektedir:
npm install --save tinacms @tinacms/cli @tinacms/gatsby gatsby-plugin-tinacms
veya yarn ile:
yarn add tinacms @tinacms/cli @tinacms/gatsby gatsby-plugin-tinacms
Kurulum tamamlandıktan sonra, Gatsby projenizin gatsby-config.js dosyasına gatsby-plugin-tinacms eklentisini eklemeniz gerekir:
// gatsby-config.js
module.exports = {
plugins: [
gatsby-plugin-tinacms,
// Diğer Gatsby eklentileriniz
// Markdown dosyalarını okumak için:
{
resolve: gatsby-source-filesystem,
options: {
path: ${__dirname}/content, // İçerik dosyalarınızın olduğu dizin
name: content,
},
},
gatsby-transformer-remark, // Markdown'ı HTML'e dönüştürmek için
],
};
TinaCMS’i uygulamanızda kullanabilmek için, uygulamanızın kök bileşenini (genellikle gatsby-browser.js veya gatsby-ssr.js dosyalarında) TinaProvider ile sarmalamanız gerekir. Bu, TinaCMS’in içeriği düzenleme modunda etkinleşmesini sağlar.
// gatsby-browser.js
import React from 'react';
import { TinaCMS, TinaProvider } from 'tinacms';
export const wrapRootElement = ({ element }) => {
const cms = new TinaCMS({
enabled: process.env.NODE_ENV === 'development', // Sadece geliştirme modunda etkinleştir
// Diğer TinaCMS yapılandırmaları buraya gelebilir
});
return {element};
};
Bu temel kurulum, TinaCMS’in geliştirme ortamında çalışmasını sağlayacaktır.
İçerik Modelleri (Schema) Tanımlama
TinaCMS, içeriğinizin yapısını tanımlayan bir schema dosyasına ihtiyaç duyar. Bu schema, içerik editörlerinin hangi alanları düzenleyebileceğini ve bu alanların hangi türde olması gerektiğini belirler. TinaCMS CLI, bu schema’yı oluşturmanıza yardımcı olur.
Projenizin kök dizininde tina adında bir klasör oluşturun ve içine config.ts (veya config.js) adında bir dosya ekleyin:
mkdir tina
touch tina/config.ts
tina/config.ts dosyasına aşağıdaki temel yapıyı ekleyin:
// tina/config.ts
import { defineConfig } from 'tinacms';
export default defineConfig({
branch: 'main', // Git deponuzdaki ana branch adı
clientId: process.env.TINA_CLIENT_ID, // Tina Cloud'dan alınacak
token: process.env.TINA_TOKEN, // Tina Cloud'dan alınacak
build: {
outputFolder: 'admin',
publicFolder: 'static',
},
media: {
tina: {
mediaRoot: 'uploads', // Yüklenen medya dosyalarının saklanacağı dizin
publicFolder: 'static',
},
},
schema: {
collections: [
{
name: 'post',
label: 'Blog Yazıları',
path: 'content/posts', // Markdown dosyalarının saklanacağı dizin
fields: [
{
type: 'string',
name: 'title',
label: 'Başlık',
isTitle: true,
required: true,
},
{
type: 'string',
name: 'author',
label: 'Yazar',
},
{
type: 'datetime',
name: 'date',
label: 'Tarih',
ui: {
dateFormat: 'MMMM DD, YYYY',
timeFormat: 'HH:mm',
},
},
{
type: 'string',
name: 'description',
label: 'Açıklama',
ui: {
component: 'textarea',
},
},
{
type: 'image',
name: 'hero_image',
label: 'Kapak Resmi',
},
{
type: 'richText', // Markdown veya MDX desteği için
name: 'body',
label: 'İçerik',
isBody: true,
},
],
},
// Diğer içerik türleri (sayfalar, ürünler vb.) buraya eklenebilir
],
},
});
Bu schema, content/posts dizininde saklanan blog yazıları için bir model tanımlar. Her yazının bir başlığı, yazarı, tarihi, açıklaması, kapak resmi ve içeriği olacaktır.
Schema dosyanızı oluşturduktan sonra, TinaCMS CLI’yi kullanarak Tina’nın yerel GraphQL sunucusunu ve gerekli TypeScript türlerini oluşturmanız gerekir:
npx tinacms dev
Bu komutu çalıştırdığınızda, TinaCMS projenizi tarayacak ve tina/__generated__/ dizininde gerekli dosyaları oluşturacaktır. Bu komutu Gatsby geliştirme sunucusunu çalıştırmadan önce veya her schema değişikliğinden sonra çalıştırmanız önemlidir.
Gatsby ile İçeriği Sorgulama
TinaCMS tarafından yönetilen içeriği Gatsby projenizde kullanmak için GraphQL sorguları yazmanız gerekir. gatsby-source-filesystem ve gatsby-transformer-remark gibi eklentiler, Markdown dosyalarını GraphQL katmanına dahil etmenizi sağlar.
Örneğin, tüm blog yazılarını listelemek için bir GraphQL sorgusu:
query BlogPosts {
allMarkdownRemark(sort: { fields: [frontmatter___date], order: DESC }) {
nodes {
id
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
description
author
hero_image
}
fields {
slug
}
}
}
}
Tek bir blog yazısının içeriğini çekmek için ise sayfa sorgularını kullanabilirsiniz:
# src/templates/BlogPost.js veya src/pages/blog/{MarkdownRemark.fields__slug}.js
query BlogPostBySlug($slug: String!) {
markdownRemark(fields: { slug: { eq: $slug } }) {
id
html
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
description
author
hero_image
}
}
}
Bu sorgular, gatsby-node.js dosyasında dinamik sayfalar oluşturmak veya React bileşenlerinizde useStaticQuery hook’u ile veri çekmek için kullanılabilir.
Canlı Düzenleme (Visual Editing) Aktifleştirme
TinaCMS’in en güçlü özelliklerinden biri olan canlı düzenlemeyi etkinleştirmek için, içeriği görüntüleyen Gatsby bileşenlerinizde useTina hook’unu kullanmanız gerekir.
Öncelikle, gatsby-node.js dosyanızda dinamik sayfa oluştururken TinaCMS için gerekli collection ve document bilgilerini sağlamanız gerekebilir. Ancak basit bir örnek için, doğrudan sayfa bileşeninde useTina‘yı nasıl kullanacağımıza bakalım.
src/pages/index.js veya bir blog yazısı şablonunuzda (örneğin src/templates/BlogPost.js):
// src/templates/BlogPost.js
import React from 'react';
import { graphql } from 'gatsby';
import { useTina } from 'tinacms/dist/react'; // TinaCMS React hook'u
const BlogPost = ({ data }) => {
// useTina hook'u, canlı düzenleme modunda içeriği güncelleyecektir
const { data: liveData } = useTina({
query: data.rawQuery, // Gatsby'den gelen ham GraphQL sorgusu
variables: data.rawVariables, // Gatsby'den gelen ham GraphQL değişkenleri
data: data.markdownRemark, // Gatsby'den gelen orijinal içerik verisi
});
const post = liveData.markdownRemark;
return (
Yazar: {post.frontmatter.author}
Tarih: {post.frontmatter.date}
{post.frontmatter.hero_image && (
)}
);
};
export const query = graphql
query BlogPostBySlug($id: String!) {
markdownRemark(id: { eq: $id }) {
id
html
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
description
author
hero_image
}
# TinaCMS'in canlı düzenleme için ihtiyaç duyduğu raw sorgu ve değişkenler
rawQuery
rawVariables
}
}
;
export default BlogPost;
Bu örnekte, useTina hook’u, Gatsby’den gelen veriyi TinaCMS’in canlı düzenleme katmanına bağlar. rawQuery ve rawVariables alanları, gatsby-plugin-tinacms tarafından otomatik olarak eklenir ve TinaCMS’in arka planda doğru içeriği sorgulamasını sağlar.
Geliştirme sunucusunu başlattığınızda (gatsby develop), tarayıcınızda sitenizi ziyaret edin. URL’ye /#/admin ekleyerek TinaCMS yönetim paneline erişebilirsiniz. Örneğin: http://localhost:8000/#/admin. Burada, Blog Yazıları koleksiyonunuzu ve içeriklerinizi görebilirsiniz. Bir içeriği seçtiğinizde, sayfanın sağ tarafında TinaCMS’in düzenleme arayüzü belirecek ve içeriği görsel olarak düzenleyebileceksiniz.
Tina Cloud ve Dağıtım
TinaCMS’in tam potansiyelini kullanmak ve üretim ortamında güvenli bir şekilde çalıştırmak için Tina Cloud’u kullanmanız önerilir. Tina Cloud, kimlik doğrulama, Git entegrasyonu ve içerik dağıtımını yönetir.
1. Tina Cloud’a Kaydolma: Tina.io adresinden bir hesap oluşturun ve yeni bir proje başlatın.
2. Repository Bağlantısı: Tina Cloud projenizi Git deponuzla (GitHub, GitLab vb.) bağlayın. Tina Cloud, deponuza erişim izinleri isteyecektir.
3. Client ID ve Token: Tina Cloud projenizden TINA_CLIENT_ID ve TINA_TOKEN değerlerini alın. Bu değerleri tina/config.ts dosyanızda ve dağıtım ortamınızın (Netlify, Vercel) ortam değişkenlerinde ayarlamanız gerekir.
4. Dağıtım Stratejileri: Gatsby sitenizi Netlify veya Vercel gibi bir platforma dağıtabilirsiniz. Bu platformlar, Git deposundaki değişiklikleri algılayarak sitenizi otomatik olarak yeniden derler ve yayınlar. Tina Cloud, içerik değişikliklerini doğrudan Git deposuna commitleyeceği için, bu dağıtım platformları otomatik olarak güncellenmiş içeriği yayınlayacaktır.
Tina Cloud, içerik editörlerinin web arayüzü üzerinden değişiklik yapmasını ve bu değişikliklerin doğrudan Git deposuna commit olarak işlenmesini sağlar. Bu commit’ler, sitenizin otomatik olarak yeniden derlenmesini tetikler ve güncel içeriğin canlıya alınmasını sağlar.
Gelişmiş TinaCMS Özellikleri ve Kullanım Senaryoları
TinaCMS, temel içerik yönetiminin ötesine geçerek daha karmaşık ve esnek web siteleri oluşturmanızı sağlayan gelişmiş özellikler sunar.
MDX Desteği
MDX, Markdown’ın sözdizimini React bileşenleriyle birleştiren güçlü bir formattır. Bu, içerik editörlerinin Markdown dosyalarına özel, interaktif React bileşenleri (örneğin, bir grafik, bir anket, bir ürün kartı) eklemesine olanak tanır.
TinaCMS, richText alan tipi aracılığıyla MDX’i destekler. Schema’nızda type: 'richText' olarak tanımladığınız bir alanda, TinaCMS editörü Markdown sözdiziminin yanı sıra React bileşenlerini de tanımanıza ve düzenlemenize olanak tanır.
Örneğin, özel bir Callout bileşenini MDX içeriğinize eklemek isterseniz:
// src/components/Callout.js
import React from 'react';
const Callout = ({ children }) => (
{children}
);
export default Callout;
Ve tina/config.ts dosyanızda richText alanınıza bu bileşeni tanıtabilirsiniz:
// tina/config.ts (richText alanı içinde)
{
type: 'richText',
name: 'body',
label: 'İçerik',
isBody: true,
templates: [
{
name: 'Callout',
label: 'Önemli Bilgi Kutusu',
fields: [
{
type: 'string',
name: 'text',
label: 'Metin',
required: true,
},
],
},
],
},
Bu yapılandırma ile TinaCMS editöründe bir “Önemli Bilgi Kutusu” ekleyebilir ve içeriğini düzenleyebilirsiniz. Gatsby tarafında ise gatsby-plugin-mdx kullanarak bu bileşenleri işleyebilirsiniz.
Bloklar ve Bileşen Alanları
TinaCMS’in “bloklar” veya “bileşen alanları” özelliği, içerik editörlerinin sayfalarını önceden tanımlanmış, modüler bileşenlerle dinamik olarak oluşturmasına olanak tanır. Bu, özellikle iniş sayfaları, ana sayfalar veya karmaşık düzenlere sahip sayfalar için idealdir.
Schema’nızda ui: { component: 'blocks' } veya ui: { component: 'component' } kullanarak bu özelliği etkinleştirebilirsiniz:
// tina/config.ts
{
type: 'object',
name: 'page_blocks',
label: 'Sayfa Blokları',
list: true, // Birden fazla blok eklemeye izin ver
ui: {
component: 'blocks', // Blok düzenleyiciyi etkinleştir
},
templates: [
{
name: 'HeroSection',
label: 'Kahraman Bölümü',
fields: [
{ type: 'string', name: 'headline', label: 'Başlık' },
{ type: 'string', name: 'subtitle', label: 'Alt Başlık', ui: { component: 'textarea' } },
{ type: 'image', name: 'background_image', label: 'Arka Plan Resmi' },
],
},
{
name: 'TextSection',
label: 'Metin Bölümü',
fields: [
{ type: 'richText', name: 'body', label: 'Metin İçeriği' },
],
},
// Diğer blok türleri buraya eklenebilir
],
},
Bu sayede içerik editörleri, TinaCMS arayüzünden “Kahraman Bölümü” veya “Metin Bölümü” gibi blokları sayfalarına ekleyebilir, sıralamasını değiştirebilir ve her bloğun kendi alanlarını düzenleyebilir. Gatsby tarafında, bu blokları bir döngü içinde işleyerek ilgili React bileşenlerini render edersiniz.
İlişkisel Veri Modelleri (References)
Bir içeriğin başka bir içeriğe referans vermesi, birçok web sitesi için temel bir gereksinimdir (örneğin, bir blog yazısının bir yazara referans vermesi). TinaCMS, type: 'reference' alan tipi ile bu tür ilişkileri destekler.
Örneğin, bir author koleksiyonunuz ve bir post koleksiyonunuz varsa:
// tina/config.ts (author koleksiyonu)
{
name: 'author',
label: 'Yazarlar',
path: 'content/authors',
fields: [
{ type: 'string', name: 'name', label: 'Ad Soyad', isTitle: true, required: true },
{ type: 'image', name: 'avatar', label: 'Avatar' },
{ type: 'string', name: 'bio', label: 'Biyografi', ui: { component: 'textarea' } },
],
},
// tina/config.ts (post koleksiyonu içinde)
{
type: 'reference',
name: 'author',
label: 'Yazar',
collections: ['author'], // Referans verilecek koleksiyon
},
Bu yapılandırma ile bir blog yazısı oluştururken, TinaCMS size mevcut yazarlar listesinden birini seçme imkanı sunar. Gatsby tarafında ise GraphQL sorgularınızda bu referansları takip ederek yazarın bilgilerine erişebilirsiniz.
TinaCMS Bileşenlerini Özelleştirme
TinaCMS, varsayılan kullanıcı arayüzünü (UI) genişletmenize ve kendi özel alan bileşenlerinizi oluşturmanıza olanak tanır. Bu, standart alan tiplerinin ihtiyaçlarınızı karşılamadığı durumlarda veya daha özel bir düzenleme deneyimi sunmak istediğinizde kullanışlıdır.
Örneğin, bir renk seçici veya özel bir etiket (tag) girişi oluşturmak isteyebilirsiniz. TinaCMS’in ui: { component: MyCustomComponent } özelliğini kullanarak kendi React bileşenlerinizi alanlara bağlayabilirsiniz.
// tina/config.ts (bir alan tanımı içinde)
{
type: 'string',
name: 'color',
label: 'Renk',
ui: {
component: 'ColorPicker', // Özel React bileşeniniz
},
},
Ve ColorPicker bileşenini oluşturursunuz:
// src/components/ColorPicker.js (veya uygun bir yer)
import React from 'react';
const ColorPicker = ({ input }) => {
// input.value: Mevcut değer
// input.onChange: Değer değiştiğinde çağrılacak fonksiyon
return (
input.onChange(e.target.value)}
/>
);
};
export default ColorPicker;
Bu, TinaCMS’in esnekliğini gösterir ve geliştiricilere içerik yönetim deneyimini projelerinin özel ihtiyaçlarına göre uyarlama gücü verir.
TinaCMS ve Gatsby Kullanımının Avantajları ve Dezavantajları
Her teknoloji kombinasyonunda olduğu gibi, TinaCMS ve Gatsby’nin birlikte kullanımı da belirli avantajlar ve dezavantajlar sunar. Bu dengeyi anlamak, projeniz için doğru araçları seçmenize yardımcı olacaktır.
Avantajlar
* Geliştirici ve İçerik Editörü Dostu: Geliştiriciler, React ve GraphQL gibi tanıdık araçlarla çalışırken, içerik editörleri sezgisel ve görsel bir düzenleme deneyiminden faydalanır. Bu, işbirliğini artırır ve içerik yayınlama sürecini hızlandırır.
* Git Tabanlı Versiyon Kontrolü: Tüm içerik değişiklikleri Git deposunda izlenir. Bu, içerik için güçlü bir versiyon kontrolü, geri alma yeteneği, iş akışı entegrasyonu ve doğal bir yedekleme mekanizması sağlar.
* Yüksek Performanslı Statik Siteler: Gatsby’nin sağladığı performans optimizasyonları sayesinde, TinaCMS ile yönetilen siteler son derece hızlı yüklenir, bu da daha iyi kullanıcı deneyimi ve SEO sonuçları anlamına gelir.
* Esnek Veri Modelleme: TinaCMS’in TypeScript tabanlı schema sistemi, içeriğinizin yapısını güçlü ve tip güvenli bir şekilde tanımlamanıza olanak tanır. Bu, karmaşık içerik modellerini bile kolayca yönetmenizi sağlar.
* Canlı Önizleme ve Düzenleme (Visual Editing): İçerik editörleri, değişikliklerini gerçek zamanlı olarak sitenin önizlemesinde görebilirler. Bu, hataları azaltır ve içerik oluşturma sürecini daha verimli hale getirir.
* Ölçeklenebilirlik ve Güvenlik: Statik siteler doğası gereği daha güvenli ve CDN’ler aracılığıyla kolayca ölçeklenebilir. TinaCMS, bu avantajları korurken içerik yönetimini kolaylaştırır.
* MDX ve Bileşen Tabanlı İçerik: MDX desteği ve blok/bileşen alanları, içerik editörlerinin daha zengin ve interaktif sayfalar oluşturmasına olanak tanır, bu da tasarım esnekliğini artırır.
* Open-Source ve Topluluk Desteği: TinaCMS açık kaynaklıdır ve aktif bir topluluğa sahiptir, bu da sürekli gelişim ve destek anlamına gelir.
Dezavantajlar
* Öğrenme Eğrisi: TinaCMS’in Git tabanlı yaklaşımı, schema tanımlama ve useTina hook’u gibi kavramlar, özellikle yeni başlayanlar için bir öğrenme eğrisi gerektirebilir. Tina Cloud’un da kendi kurulum ve yapılandırma adımları vardır.
* İlk Kurulum Karmaşıklığı: Bir Gatsby projesine TinaCMS’i entegre etmek, birden fazla paketin kurulumunu, gatsby-config.js ve tina/config.ts dosyalarının yapılandırılmasını gerektirir. İlk kurulum, geleneksel bir CMS’e göre daha fazla teknik bilgi gerektirebilir.
* Gerçek Zamanlı Olmayan İçerik Güncellemeleri: Her içerik değişikliği bir Git commit’i tetikler ve genellikle sitenin yeniden derlenmesini (build) gerektirir. Bu, değişikliklerin canlıya yansıması için belirli bir bekleme süresi anlamına gelir. Büyük sitelerde build süreleri uzayabilir.
* Build Süreleri: Çok büyük Gatsby sitelerinde, her içerik güncellemesinde sitenin tamamının yeniden derlenmesi uzun sürebilir. Bu, çok sık içerik güncelleyen projeler için bir darboğaz oluşturabilir. Ancak, inkremental build (parçalı derleme) gibi çözümler bu sorunu hafifletmeye yardımcı olabilir.
* Tina Cloud Bağımlılığı (Üretim İçin): Üretim ortamında TinaCMS’in tam işlevselliğini (kimlik doğrulama, Git entegrasyonu) kullanmak için Tina Cloud’a bağımlılık vardır. Ücretsiz katman çoğu proje için yeterli olsa da, daha büyük ölçekli projeler için ücretli planlar gerekebilir.
* Geliştirici Müdahalesi: TinaCMS, içerik editörlerine büyük bir esneklik sunsa da, yeni içerik modelleri veya özel bileşenler eklemek hala geliştirici müdahalesi gerektirir. Bu, tamamen “no-code” bir çözüm arayanlar için uygun olmayabilir.
Sonuç
TinaCMS ve Gatsby kombinasyonu, modern web geliştirmenin en iyi yönlerini bir araya getiren güçlü bir çözümdür. Gatsby’nin sağladığı benzersiz performans, güvenlik ve ölçeklenebilirlik avantajları, TinaCMS’in Git tabanlı, görsel ve geliştirici dostu içerik yönetim sistemiyle birleştiğinde, hem geliştiriciler hem de içerik editörleri için oldukça verimli bir iş akışı sunar.
Bu kombinasyon, özellikle bloglar, portföy siteleri, pazarlama siteleri, dokümantasyon portalları ve hatta e-ticaret siteleri gibi dinamik içeriğe sahip ancak yüksek performans gerektiren projeler için idealdir. İçerik yönetimi süreçlerini basitleştirmek, geliştirme ve içerik ekipleri arasındaki işbirliğini artırmak ve aynı zamanda son kullanıcılara olağanüstü hızlı bir deneyim sunmak isteyen kuruluşlar için TinaCMS ve Gatsby, göz önünde bulundurulması gereken önemli bir teknoloji yığınıdır.
Her ne kadar ilk kurulumda ve öğrenme sürecinde bazı zorluklar olsa da, TinaCMS’in sunduğu esneklik, Git’in güvenilirliği ve Gatsby’nin performansı, bu yatırımın karşılığını fazlasıyla verecektir. Gelecekte, inkremental build gibi özelliklerin daha da gelişmesiyle, TinaCMS ve Gatsby’nin statik siteler için içerik yönetimindeki rolü daha da büyüyecektir. Bu teknoloji yığınını keşfetmek, modern web dünyasında rekabet avantajı elde etmek isteyen herkes için heyecan verici bir yolculuk olacaktır.
