Son kullanıcı Bloglar sayfası

Son kullanıcının sitede yayında olan blogları görebilmesi için yayında olan blogların listelendiği bir sayfa yapalım.

Bunun için App/Controller dizini altına BlogController.php isimli bir dosya oluşturup içine isim uzayı "App\Controller" sınıf ismi de "BlogController" olan ve "BaseController"'dan türeten sınıf tanımını yapalım.

Not: Sınıfın tanımlandığı dosya ismi ile sınıf ismi aynı olmalıdır.

Yönlendirme (Routing) belgesinde anlatıldığı üzere bu sayfanın linki "/blog" olacaktır.

Sayfa herkes tarafından görüntülenebilir olacağı için bu kontrolcünün checkAccess metoduna sadece "return true;" yazmamız yeterlidir.

Sayfa özelleştirilebilir tema ile render edileceği için getTheme() metodu ile CustomTheme sınıfını dönderdik..

Son durumda kontrolcü sınıf aşağıdaki gibidir.

Blogların kayıtlarının çekilebilmesi için "SearchForm" ve "ViewableQueries" sınıflarını kullanacağız.

Öncelikle "Varlıklar" -> "Görüntülenebilir Sorgular" -> "Ekle" yolunu izleyerek yeni bir kayıt ekliyoruz.

Bu kayıtta blogların "title", "body" ve "created_at" kolonlarını eğer blog yayında ("published" = 1) ise listeleyeceğiz.

Sayfalama limiti olarak 10 vermemiz yeterli.

Sıralama şeklinide "created_at" kolonuna göre azalan seçiyoruz.

Sayfa görüntüleme şablonu olarak şimdilik "Tablo" seçelim.

Aşağıdaki şekilde bir "Görüntülenebilir sorgu" oluşturuyoruz.

Blog Görüntülenebilir Sorgu

 

Kaydet'e bastıktan sonra "Görüntülenebilir Sorgular" belgesinde anlatıldığı gibi sınıf tanımını yapıyoruz.

 

Bu sorgu sınıfı tanımından sonra oluşturduğumuz kontrolcü sınıfın preprocessPage() metodunda bir arama formu oluşturuyoruz ve echoContent() metodunda içeriğimizin arama formu olacağını belirtiyoruz.

Son durumda kontolcü metodun durumu aşağıdaki gibidir.

Arama formuna "p-3" sınıfı yapışık görünmemesi için eklenmiştir.

<?php

namespace App\Controller;

use App\Entity\Blog;
use App\Queries\BlogQuery;
use App\Theme\CustomTheme;
use CoreDB\Kernel\BaseController;
use Src\Entity\Translation;
use Src\Form\SearchForm;
use Src\Theme\ThemeInteface;

class BlogController extends BaseController
{
    public $blogForm;
    public ?Blog $blog = null;
    public function getTheme(): ThemeInteface
    {
        return new CustomTheme();
    }

    public function checkAccess(): bool
    {
        return true;
    }

    public function preprocessPage()
    {
        $this->setTitle(Translation::getTranslation("blog"));
        $this->blogForm = SearchForm::createByObject(BlogQuery::getInstance());
        $this->blogForm->addClass("p-3");
    }

    public function echoContent()
    {
        return $this->blogForm;
    }
}

/blog sayfası aşağıdaki gibi görünmektedir.