Oluşturduğumuz controller'dan veri alma

İyi günler
Edge template sistemini kavramaya çalışıyorum. tasarımı parçaladım(header/footer/yanbar) ancak şimdi aklıma takılan bişey var.Manşet ve son makaleleri veritabanından çekmem lazım bunu nasıl yapacağım ?
Controller da dizi değişken oluşturmanın dışında herhangi başka bir yöntem yok mu?
tema/header.edge.php

@php
//header kodları
@endphp

tema/footer.edge.php

@php
//footer kodları
@endphp

tema/yapi.edge.php

@php
include("tema.header")
@yield("content")
include("tema.footer")
@endphp

home.edge.php

@php
//temaları dahil edelim
//burada Veritabanından manşet içeriğini çekmek istiyorum
//bunun sınıfını oluşturduğumu varsayarsak bunu buraya nasıl dahil edebilirim?
/*
class Siteicerik extends db{
public function manset(){
$hbrSon5=$this->db()->query("select * from gonderiler where gonderi_tip='haber' order by g_sira Asc Limit 10")->fetchAll(PDO::FETCH_OBJ);
return $hbrSon5;
}
}
*/
@endphp
@entends("tema.yapi")


Şimdiden teşekkür ederim.

Cevaplar (7)


Turan Karatuğ
Software Developer - Creator of TitanMVC
5 ay önce

Layout kullanımınız yanlış. Aşağıdaki bağlantıya tıklayıp layout yapısını inceleyin.
http://v2.titanphp.com/doc/template#layout-tanimlama

View dosyaları içinde mümkün olduğunca php kodu kullanmamaya çalışın. Örneğinizdeki gibi @php tagı içinde class tanımlamak son derece kötü bir practise olacaktır. Kullanacağınız tüm datayı controller içerisinden viewa gönderin.
5 ay önce

Laravelde aynı tema motorunu kullandığı için bu şekilde tanımladım çıktı verdi hatalı olan kısmı neresidir? Baştan düzelteyim :)

View üzerinden veri gönderin demişsiniz ancak benim view dosyasından tema dosyama gönderceğim birden fazla veri var
{
site ayarları(logo ,site url, meta )
manşet alanı
benzer konular
son makaleler
anket sınıfı
yolcu bilgi alanı (saat kaçta araç var )
menüler
}
bunları ben view alanından parametre olarak gönderirsem karışık bir alabilir view alanında dışarıda tanımladığımız bir değişkeni(controller/helper/config dosyalarından herhangi biri) global olarak tanımlayıp kullanamazmıyız ?

php tagı içine aldığım herşey sadece bilgi amaçlı yorum satırında yazdım. Oluşturduğum sınıfın yapısı ve döndürdüğü değeri bilmeniz adına
php tagı kullanmanın zararı nedir ?
Şimdiden teşekkür ederim :)
Turan Karatuğ
Software Developer - Creator of TitanMVC
5 ay önce

Titan'da kullanılan Edge, Laravel'deki Blade ile benzer söz dizimine sahiptir ancak birbirinin aynı kütüphaneler değillerdir.

View üzerinden değil, controller üzerinden verilerinizi gönderin demiştim. Veri sayısının bir önemi yok. Bu konudaki best practise, bir sayfaya ait tüm verileri controller üzerinden viewa aktarmaktır. Karışık bir hal almasını istemiyorsanız, birçok sayfada kullanacağınız ortak verileri, bir base controller yaratıp, render() methodunu ezerek buradan gönderebilirsiniz. Bu tamamen kuracağınız yapıya bağlı.

Ayrıca helper ve config dosyalarında bulunan verilerinize view içerisinden erişebilirsiniz. Aşağıda bununla ilgili bir örnek görebilirsiniz;
{!! get_js('js/custom.js') !!}
Tema motorları, projedeki php ve html kodlarını birbirinden ayırarak hem daha okunabilir kod yazmayı sağlar hem de belirli standartlara sahip söz dizimleri ile farklı tasarımları sisteme adapte etmeyi kolaylaştırır. Dolayısıyla view içerisinde php yazmak son derece kötü bir practise olacaktır. Edge, Blade ve Twig gibi kütüphaneler buna ihtiyaç duyurmayacak şekilde hazırlanmıştır.
5 ay önce

Cevabınız için çok teşekkür ederim.
base controller yaratıp, render() methodunu ezerek buradan gönderebilirsiniz. Demişsin iz doküman da bir örneğini göremedim.
Turan Karatuğ
Software Developer - Creator of TitanMVC
5 ay önce

Evet dökümanda bir örneği yok. Temel seviyede OOP bilgisine sahipseniz rahatlıkla uygulayabilirsiniz. Kısaca bahsetmek gerekirse, bir base controller olusturup sayfanızı üreten controllerı buradan extend edersiniz. Bu base controller içinde bir render methodu olusturup view'a göndereceğiniz dataları burada alıp render edersiniz. Kendi controllerınızda da base'deki methoudnuzu çağırarak datalarınızı view'a gönderirsiniz.
5 ay önce

Anladım hocam :
basecontroller oluşturup controllerdan gelen verileri aldım array_merge ile birleştirdim ve gönderdim

<?php

namespace AppControllers;
use View;
use DB;
class BaseController
{
function __construct(){
echo "Girdim";
}
function anasayfa($b)
{
$data['sonmakale'] = Model::run('makale')->manset();
$data= array_merge($data,$b);
View::theme("mavi")->render('home',$data);
}
}


home.php controller

<?php

namespace AppControllers;
namespace AppControllersFrontend;

use View;
use AppControllersBaseController as Ezici;
class Home extends Ezici
{

public function index()
{
$bilgi["baslik"]="Davulga köyü Web sitesine hoş geldiniz";
Ezici::anasayfa($bilgi);
}

}

Makale.php model dosyası oluşturdum manşet içeriğini çektim

<?php
namespace AppModels;

use DB;

class Makale
{
public function manset()
{
return DB::table('gonderiler as g')
->innerJoin('postag as p', 'g.sira=p.post_sira')
->select('g.*,p.*')
->where('p.post_tip', '!=', 'galeri')
->where('p.post_tip', '!=', 'sayfa')
->where('p.post_tip', '!=', 'etiket')
->orderBy('g.sira')
->limit(5)
->getAll();
}
}

Arayüz alanı burada yaptım ve sonuç çıktı verdi :)
home.edge.php Arayüz

<?php
@extends('tema.yapi')
@section("content")
@foreach ($sonmakale as $makale)
@endforeach
@endsection


Bu şekilde tanımlayıp verileri aldım. Daha önce mvc yapısında site kodlamadığım için (CI var ama basit düzenlemeler yaptım ) biraz zor geldi ama kolaylık sağlıyor herşey düşünülmüş :)
Bir önerim var controllerda tema belirliyoruz ancak public dosyasında tema klasörüne göre işlem yapsak daha iyi olmaz mı? View::theme("mavi")->render('home',$data);
get_asset() metoduyla stil dosyası çekmek istediğimizde theme metoduyla gönderdiğimiz klasörde işlem yapmaya çalışsa daha iyi olmaz mı?
)
Bayramınız mübarek olsun.
Turan Karatuğ
Software Developer - Creator of TitanMVC
5 ay önce

Evet söylediğiniz gibi assetlerin de seçili temadan getirilmesi ile ilgili düzenleme yapılabilir. Gelecek sürümler için notlarım arasına ekledim. Size de iyi bayramlar.

Cevap Yazın


[code=php,css,sql]kod[/code] , [url=http:...com] , [img=imaj linki] , [color=renk_kodu]metin[/color]