Dijital TV Okul Panosu V.3 - HTML

Kodla Büyü

erbay1

Üye
Mesajlar
10
Kullanıcı Arayüzü (UI): Geliştirilebilir
HTML5, CSS3 ve JavaScript tabanlı dinamik bir uygulamadır.
1.Modern Tasarım: Koyu renkli arka plan, varsayılan tema neon benzeri renkler (cyan, yeşil, turuncu) kullanıldı.
Dinamik Bileşenler:
Başlık ve Zaman Widget'ı: Okul adı, saat ve tarih(sistem saatve tarihi) dinamik olarak gösteriliyor.
Nöbetçi Öğretmenler: Günlük nöbetçi öğretmenler listeleniyor.Bir güne sayısız nöbetçi atanabilir. Nöbet günleri döndürülebilir.
Hava Durumu: Web üzerinden alınan hava durumu bilgisi gösteriliyor (internet bağlantısı yoksa otomatik gizlenir)).
Esnek İçerik: Günlük bilgi, menü veya tarihte bugüne dair içerik dinamik olarak gösterilebilir.
Video Oynatıcı: Resimler ve videolar (varsayılan, index.html nin bulunduğu "medya/" klasörü içine konacak) oynatılabiliyor, video kontrolleri (oynatma/duraklatma, ses açma/kapatma, ileri/geri sarma) mevcut.
Ders Durumu: Öğrencilerin o anki ders durumu (ders saati, kalan süre) görüntüleniyor.
Sinav Sayacı ve Doğum Günü Listesi: LGS sayacı ve doğum günü kutlamaları için otomatik panel dönüşümü.
Duyurular: Alt kısımda kayan metin duyuruları, hız ve efekt ayarlarıyla yönetilebilir.
2. Temalar ve Animasyonlar:
Nöbetçi öğretmenler ve ders programı içeriğe sığmazsa aşağı- yukarı hareketle tüm içeriği gösterir
Tüm ekrana %100 uyum sağlar. TV için düşünüldüğünden kaydırma çubuğu ana ekranda çıkmaz.sol ve sağ alt modüller sıra ile dönüşümlü yayınlanır.
Animasyonlar: Başlıklar, metinler ve içerikler animasyonlu bir şekilde geçiş yapıyor (örneğin, "zoomIn", "pulse" efektleri).
Marquee (Yürüyen Yazı): Alt kısımda duyurular sürekli kayarak gösteriliyor, hız ve efektleri ayarlanabilir.
Esnek İçerik Değişimi: Hava durumu ve diğer içerikler belirli aralıklarla geçiş yapabiliyor.
Esnek modül 4 fonksiyonlu. Günün menüsü oluşturmak için sıra ile satırlara menü yazılır.1. satır Pazartesi,2.satır salı vb.. o günün menüsünü çeker.
Tarihte Bugün her satırın başındaki tarihe bakarak veri çeker: 24 Aralık ... diye başlayan veri 24 aralıkta yayınlanır.
Günün Sözü: Satırlardan rastgele birini çeker.
Özel İçerik: özel içerik seçildiğinde Modüle özel başlık vermek için başlık kutusu aktif olur. Tüm içerik yayınlanır.
Nöbetçi Öğretmenler, Sınav Sayacı, Hava Durumu Modül Başlıkları değiştirilebilir. Hava durumu modülü kod ,widget, kabul eder. İstenirse haber modülü de olabilir.
3. Video ve Ses Entegrasyonu:
Video Modülü: Video veya görseller izlenebiliyor. Sesli veya sessiz modda oynatılabiliyor.
Zil Sesleri: Dersler arasında geçişlerde veya özel zamanlarda zil sesi çalabiliyor.
Ses Kontrolü: Ses açma/kapama ve ses seviyesi ayarı mevcut.
4. Ders Programı ve Zamanlayıcı:
Ders Durumu: Öğrencilerin güncel ders programına göre hangi derste oldukları, kalan süre ve mola zamanları gösteriliyor.
Sabah ilk derse yarım saat kala geri sayımı başlatır. Ders başlayınca zil çalar, dersin kaçıncı ders olduğu bilgisi ile tenefüse kalan süreyi sayar.
Tenefüs bilsini verir. tenefüste derse kalan süreyi ve gelecek saatin derslerini verir. gün boyu dersler arasındaki tenefüs sürelerine göre ÖĞLE TENEFÜSÜNÜ algılar. Son ders bitince bir saat boyunca "Bugünlük dersler bitti" yazar. Daha sonra "DERS DIŞI" aktif olur.
Hafta sonu tatilini algılar. Ders bitiminden itibaren(hafta sonları da dahil) Bilgi Kutusundaki verileri " Günün Notu" adı altında ders programı bölümünde yayınlar.
Geri Sayım: LGS/YKS için geri sayım (sınav zamanı gösterimi).
5. Esnek Modüller:
Dinamik Veri Entegrasyonu: İçerikler, JSON ve localStorage'tan alınan verilere göre güncelleniyor (örneğin: nöbetçi öğretmenler, doğum günleri, duyurular).
6. Mobil Uyumlu:
Responsive Tasarım: Sayfa, 1000px altındaki ekranlarda (örneğin mobil cihazlar) uyumlu hale geliyor; başlık kısmı gizleniyor ve öğeler daha kompakt hale getiriliyor.
7. Web Depolama Kullanımı:
localStorage üzerinden veri saklanıyor (örneğin okul adı, nöbetçi öğretmenler, duyurular).
8. Yönetici Paneli: Sağ tık ile
Sağ Tıklama Engellenmesi: Sayfa üzerinde sağ tıklama devre dışı bırakılmış, "admin.html" sayfasına yönlendirme yapılıyor.
9. Başlatma Ekranı:
Sistem Başlatma: Sayfa açıldığında, (tarayıcı güvenlik protokolü) kullanıcı sisteme giriş yapmadan önce bir "başlat" butonu ile sesli uyarıları ve videoları başlatmak gerekiyor.
Edge -Explorer ve crome tarayıcılarında sorunsuz çalışıyor.
10. İlk açılışta içerik boş görünecektir. Ana sayfada sağ tıklayıp admin paneli sol altta yedekten yükle tıklayp "OkulPano V.3 klasörü içindeki "pano_yedek_2025-12-22.json" yedeğini yükleyin. örnek veride saadece pazartesi günü İÇİN ders programı girİldiğinden sistem gününü PAZARTESİ saati 8:30- 14.00 arasına ayarlayıp test edebilirsiniz.
9 farklı tema seçebilme özelliği eklendi.Hiç internete bağlanmadan çalışabilir. İyileştirilmiş güncel sürümü ekledim.

Fırsat buldukça bazı hataları düzelteceğim.
Tüm kodlama ve tasarımı özgün olup Erdal BAYRAK tarafından geliştirilmiştir.Ücretsizdir.Ticari amaçla dağıtmak-satmak dışında resmi ve özel tüm kurumlar ve şahıslar izin almaksızın kullanabilir, özgünleştirebilir, tasarımı ve yapısında değişiklik yapabilir.
temalar.webp
1000060907.webp
 

Ekli dosyalar

  • 1.webp
    1.webp
    181.3 KB · Görüntüleme: 792
  • 2.webp
    2.webp
    95.7 KB · Görüntüleme: 658
  • 4.webp
    4.webp
    97.4 KB · Görüntüleme: 495
  • 5.webp
    5.webp
    105.8 KB · Görüntüleme: 461
  • 6.webp
    6.webp
    144.8 KB · Görüntüleme: 433
  • 9.webp
    9.webp
    186.7 KB · Görüntüleme: 409
  • 11.webp
    11.webp
    137.8 KB · Görüntüleme: 759
  • okulpanoV.3.zip
    okulpanoV.3.zip
    13.9 MB · Görüntüleme: 12
Son düzenleme:
Elinize sağlık hocam.
Sağ üstteki saatin saniyesindeki rakamlar değiştikçe saat-dakika-saniye bir sağa bir sola kayar gibi duruyor. Sağa yaslanmasından mı yoksa yazı tipinden mi bilmiyorum da orada biraz farklı duruyor belki gözden geçirebilirsiniz diye paylaşmak istedim. Kolay gelsin.

Ekleme: Hava durumunu nasıl, hangi siteden ekleyebilirim? bir örnek paylaşır mısınız?
 
Son düzenleme:
Elinize sağlık hocam.
Sağ üstteki saatin saniyesindeki rakamlar değiştikçe saat-dakika-saniye bir sağa bir sola kayar gibi duruyor. Sağa yaslanmasından mı yoksa yazı tipinden mi bilmiyorum da orada biraz farklı duruyor belki gözden geçirebilirsiniz diye paylaşmak istedim. Kolay gelsin.

Ekleme: Hava durumunu nasıl, hangi siteden ekleyebilirim? bir örnek paylaşır mısınız?
DİJİTAL SAAT-TARİH:
"Orbitron" dijital saat için seçtiğim font tipinden kaynaklanıyor. Font tipini örneğin "roboto" yap."index.html" sayfasındaki kodları şöyle değiştir sorun % yüz çözülür.
Kod:
#time-widget { font-family: 'Roboto'; text-align: right; color: var(--green); }
       #time-widget .clock {font-size: 2.2em; font-weight: 700; line-height: 1;text-shadow: 0 0 15px var(--green);font-variant-numeric: tabular-nums;
}
HAVA DURUMU:
Örnek .json yedeğinde var. Yüklersen gelir.Admin panelinde göründüğü halde anasayfada çıkmıyorsa admin panelinde yeniden "kaydet ve yayınla" yap. "https://www.mgm.gov.tr/site/link-vermek-icin.aspx" vb sitelerden kod alabilirsin
Kod:
<img src="http://www.mgm.gov.tr/sunum/tahmin-show-1.aspx?m=SINOP&basla=1&bitir=5&rC=111&rZ=101423" align="center" style="width:98%; height:90px;" alt="SİNOP" />
burada iki tane il adı var onları değiştirsen de olur. Arka plan(101423) ,yazı rengi(111), boyut ayarları (width:98%; height:90px)
Güncel yükleme dosyasında "Hava durumu" Başlığını admin panelinden o il için "ANKARA HAVA DURUMU" gibi değiştirebiliyorsun. Yada panel kod alanına da yazabilirsin .
 
Son düzenleme:
DİJİTAL SAAT-TARİH:
"Orbitron" dijital saat için seçtiğim font tipinden kaynaklanıyor. Font tipini örneğin "roboto" yap."index.html" sayfasındaki kodları şöyle değiştir sorun % yüz çözülür.
Kod:
#time-widget { font-family: 'Roboto'; text-align: right; color: var(--green); }
       #time-widget .clock {font-size: 2.2em; font-weight: 700; line-height: 1;text-shadow: 0 0 15px var(--green);font-variant-numeric: tabular-nums;
}
HAVA DURUMU:
Örnek .json yedeğinde var. Yüklersen gelir.Admin panelinde göründüğü halde anasayfada çıkmıyorsa admin panelinde yeniden "kaydet ve yayınla" yap. "https://www.mgm.gov.tr/site/link-vermek-icin.aspx" vb sitelerden kod alabilirsin
Kod:
<img src="http://www.mgm.gov.tr/sunum/tahmin-show-1.aspx?m=SINOP&basla=1&bitir=5&rC=111&rZ=101423" align="center" style="width:98%; height:90px;" alt="SİNOP" />
burada iki tane il adı var onları değiştirsen de olur. Arka plan(101423) ,yazı rengi(111), boyut ayarları (width:98%; height:90px)
Güncel yükleme dosyasında "Hava durumu" Başlığını admin panelinden o il için "ANKARA HAVA DURUMU" gibi değiştirebiliyorsun. Yada panel kod alanına da yazabilirsin .
Tamamdır hocam çok teşekkür ederim açıklayıcı yorum için. İlk müsait olduğumda okulda deneyeceğim.
 
Tenefüse kalan süre

Gibi bir açıklama eklenirse zil geri sayım bölümüne iyi olur gibi, üstteki saatle.karışıyor
 
Tenefüse kalan süre

Gibi bir açıklama eklenirse zil geri sayım bölümüne iyi olur gibi, üstteki saatle.karışıyor
index.html sayfasını not defteri ile açıp function updateDers() fonksiyonun tamamını aşağıdaki kod ile(function updateDers() ile başlayıp function loadNobetci() a kadar olan kısmı) değiştirip kaydedin. Kaçıncı derste olduğu, tenefüse kalan süreyi, tenefüs veya öğle arasında ise sıradaki derse kalan süreyi "KALDI" diye gösterir.
Kod:
function updateDers() {
    const now = new Date();
    const gun = now.getDay();
    const nowSec = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds();
    const saatler = JSON.parse(localStorage.getItem("dersSaatleri") || "[]");
    const program = JSON.parse(localStorage.getItem("dersProgrami") || {});
    const renkler = JSON.parse(localStorage.getItem("dersRenkleri") || "{}");
 
    const msg = document.getElementById("ders-durum-mesaj");
    const body = document.getElementById("ders-tablo-body");
    const tablo = document.getElementById("ders-tablo");
    const notlarAlani = document.getElementById("verimli-notlar-display");

    const bugunAdi = ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"][gun];

    const dersDisiGoster = (mesaj) => {
        msg.innerHTML = `<span style="width:100%; text-align:center;">${mesaj}</span>`;
        tablo.style.display = "none";
        const notlar = JSON.parse(localStorage.getItem("verimliNotlar") || "[]");
        if (notlar.length > 0) {
            notlarAlani.style.display = "block";
            const saniye30 = Math.floor(now.getTime() / 30000);
            const secilenNot = notlar[saniye30 % notlar.length];
            notlarAlani.innerHTML = `<div style="border-top: 1px solid rgba(0,234,255,0.2); margin-top:10px; padding-top:10px;">
                <p style="color:var(--orange); font-size:0.9em; margin-bottom:10px;">🌟 GÜNÜN NOTU</p>
                <p style="color:#fff;">${secilenNot}</p>
            </div>`;
        }
    };

    if (gun === 0 || gun === 6) {
        dersDisiGoster("📅 HAFTA SONU TATİLİ");
        return;
    }

    if (!saatler.length) { msg.innerHTML = "Saat ayarı yok"; return; }

    const zamanlar = saatler.map(s => ({
        bas: s.bas.split(":").map(Number)[0] * 3600 + s.bas.split(":").map(Number)[1] * 60,
        bit: s.bit.split(":").map(Number)[0] * 3600 + s.bit.split(":").map(Number)[1] * 60
    }));

    const ilkDersBaslangic = zamanlar[0].bas;
    const sonDersBitis = zamanlar[zamanlar.length - 1].bit;

    let anaMetin = "";
    let hedefMetin = "";
    let targetIdx = -1;
    let hedefSaniye = 0;
    let ozelMesaj = "";

    if (nowSec < ilkDersBaslangic) {
        anaMetin = "DERSLERİN BAŞLAMASINA";
        hedefMetin = "1. DERSE";
        targetIdx = 0;
        hedefSaniye = ilkDersBaslangic;
    }
    else if (nowSec >= ilkDersBaslangic && nowSec < sonDersBitis) {
        zamanlar.forEach((s, i) => {
            // DERSTE MİYİZ?
            if (nowSec >= s.bas && nowSec < s.bit) {
                anaMetin = (i + 1) + ". DERSTEYİZ";
                hedefMetin = "TENEFÜSE";
                targetIdx = i;
                hedefSaniye = s.bit;
            }
            // TENEFFÜSTE MİYİZ?
            else if (i < zamanlar.length - 1 && nowSec >= s.bit && nowSec < zamanlar[i+1].bas) {
                const fark = zamanlar[i+1].bas - s.bit;
                if (fark > 1740) {
                    anaMetin = "ÖĞLE ARASINDAYIZ";
                } else {
                    anaMetin = "TENEFÜSTEYİZ";
                }
                hedefMetin = (i + 2) + ". DERSE";
                targetIdx = i + 1;
                hedefSaniye = zamanlar[i+1].bas;
            }
        });
    }
    else {
        ozelMesaj = "💡 BUGÜNLÜK DERSLER BİTTİ";
    }

    if (ozelMesaj !== "") {
        dersDisiGoster(ozelMesaj);
    } else {
        notlarAlani.style.display = "none";
        tablo.style.display = "table";
    
        const kalan = Math.max(0, hedefSaniye - nowSec);
        const dk = Math.floor(kalan / 60);
        const sn = (kalan % 60).toString().padStart(2, '0');

        // ÖRNEK ÇIKTI: "TENEFÜSTEYİZ 2. DERSE 05:10 KALDI"
        msg.innerHTML = `
            <div style="display:flex; flex-direction:column; align-items:center; width:100%;">
                <div style="font-size:0.7em; color:var(--cyan); margin-bottom:-5px; letter-spacing:1px;">${anaMetin}</div>
                <div style="display:flex; align-items:center; justify-content:center;">
                    <span style="font-size:0.8em; margin-right:10px;">${hedefMetin}</span>
                    <span class="kalan-sure">${dk}:${sn}</span>
                    <span style="font-size:0.8em; margin-left:10px; opacity:0.8;">KALDI</span>
                </div>
            </div>
        `;
    
        if (kalan === 1) calZil();

        if (program[bugunAdi]) {
            body.innerHTML = "";
            Object.keys(program[bugunAdi]).sort().forEach(sinif => {
                const ders = program[bugunAdi][sinif][targetIdx] || "---";
                const dersRengi = renkler[ders] || "rgba(255,255,255,0.05)";
                body.innerHTML += `<tr><td class="sinif-hucre">${sinif}</td><td style="background:${dersRengi}; color:#000; font-weight:bold;">${ders}</td></tr>`;
            });
        }
    }
}

kaldi.webp
 
Son düzenleme:
Geri
Üst