Arayüz Geliştirme (Frontend)
Pano'da frontend geliştirme Svelte üzerine kuruludur ve stillendirme için Bootstrap 5 ile Animate.css kullanılır. Eklentinizin frontend etkileşiminin temelinde @panomc/sdk yatar.
📂 Dizin Yapısı
Kodlamaya başlamadan önce dosyalarınızın nerede bulunması gerektiğini anlamak önemlidir.
src/
├── panel/ # Yönetim Paneli için bileşenler ve sayfalar
│ ├── components/ # Tekrar kullanılabilir panel bileşenleri
│ ├── modals/ # Modal pencereleri
│ └── pages/ # Ana rota sayfaları
├── theme/ # Genel Tema için bileşenler ve sayfalar
│ ├── components/ # Tekrar kullanılabilir tema bileşenleri
│ ├── modals/ # Modal pencereleri
│ └── pages/ # Ana rota sayfaları
└── main.js # Giriş noktası: Rotaları ve navigasyonu kaydederpanel/: Yönetici arayüzü (dashboard) ile ilgili her şeyi içerir.theme/: Web sitesinde normal kullanıcıların göreceği her şeyi içerir.main.js: En önemli dosyadır. Pano'ya sayfalarınızın nerede olduğunu söyler ve gezinme menüsüne bağlantılar ekler.
🛠️ @panomc/sdk ile Geliştirme
@panomc/sdk paketi, Pano ile etkileşim kurmanız için gereken araç setinizdir. UI bileşenlerinden ağ isteklerine kadar, yerel hissettiren bir uygulama oluşturmak için ihtiyacınız olan her şeyi sağlar.
1. Sayfaları Kaydetme (Routing)
Yönetim paneline veya web sitesine yeni bir sayfa eklemek için pano.ui.page.register fonksiyonunu kullanırsınız.
import { PanoPlugin } from '@panomc/sdk';
export default class AnnouncementPlugin extends PanoPlugin {
onLoad(pano) {
// Yönetim Panelinde bir sayfa kaydet
pano.ui.page.register({
name: 'announcements',
path: '/announcements', // URL: /panel/announcements
view: () => import('./panel/pages/AnnouncementsPage.svelte'),
scopes: ['admin'] // Sadece yöneticiler görebilir
});
}
}2. Navigasyon Bağlantıları Ekleme
Bir sayfa oluşturmak, onu otomatik olarak menüye eklemez. Onu kenar çubuğuna (sidebar) veya üst çubuğa (navbar) manuel olarak eklemeniz gerekir.
pano.ui.nav.site.editNavLinks((navLinks) => {
navLinks.push({
id: 'announcements',
title: 'Announcements',
uipath: '/announcements', // Kayıtlı sayfa yoluyla eşleşmeli
icon: 'fas fa-bullhorn', // FontAwesome ikonu
scopes: ['admin']
});
return navLinks;
});3. Yerel Bileşenleri Kullanma
Standart UI öğelerini sıfırdan oluşturmak yerine, Pano'nun yerel bileşenlerini yeniden kullanın. Bu, eklentinizin platformun bir parçası gibi görünmesini ve hissettirmesini sağlar.
<script>
// SDK üzerinden bileşenleri içe aktar
import { Button, Card, Input } from '@panomc/sdk/components/panel';
</script>
<Card title="Yeni Duyuru">
<Input label="Başlık" placeholder="Başlık girin..." />
<Button color="primary">Oluştur</Button>
</Card>4. API İstekleri Yapma
Backend'inizle iletişim kurmak için ApiUtil kullanın. Kimlik doğrulama (auth) ve temel URL işlemlerini otomatik olarak halleder.
import { ApiUtil } from '@panomc/sdk/utils/api';
// GET isteği
const announcements = await ApiUtil.get('/api/announcement/list');
// POST isteği
await ApiUtil.post('/api/announcement/create', {
title: 'Merhaba Dünya',
content: 'Bu yeni bir duyurudur.'
});5. Yerelleştirme (Çoklu Dil)
Pano varsayılan olarak çok dillidir. Metin dizelerini çevirmek için _ (alt çizgi) fonksiyonunu kullanın.
<script>
import { _ } from '@panomc/sdk/utils/language';
</script>
<h1>{_('announcement.welcome_title')}</h1>
<p>{_('announcement.description')}</p>6. Bildirimler (Toasts)
Kullanıcılara geri bildirim vermek için yerleşik bildirim sistemini kullanın.
// Başarı mesajı
pano.utils.toast.success(_('announcement.created_success'));
// Hata mesajı
pano.utils.toast.error(_('announcement.created_error'));📝 Kodlama Stili ve En İyi Uygulamalar
- Svelte Sıralaması: Bloklarınızı şu sırayla düzenleyin:
<styles>,<html>,<script>. - Dinamik Yükleme: Sayfaları kaydederken her zaman dinamik içe aktarma (örn.
() => import(...)) kullanın; bu, başlangıç paket boyutunu küçük tutar. - Performans: Frontend tarafında ağır hesaplamalardan kaçının. Karmaşık mantığı backend API'nize devredin.
- Görsel Tutarlılık: Standart sayfaların (örn. tablo düzenleri, başlıklar) nasıl yapılandırıldığını görmek için
panel-uivevanilla-themedepolarını inceleyin.