Görünümlerin Oluşturulması
"Başlangıç kontrolcüsü tanımlayarak bu kontrolcüde yer alan kodların diğer tüm kontrolcüler için geçerli olmasını sağlayabilirsiniz."
Görünümler kullanıcıların karşılaştığı ağırlıklı olarak HTML kodlarından oluşan web sayfalarıdır. Görünümler Projects/Any/Views/ dizini içinde oluşturulur. Oluşturulan bu sayfaların kullanıcılar tarafından görüntülenebilmesi için istek yapılan kontrolcüler tarafından yüklenmesi gerekir.
ZN Framework görünümler için kendi oluşturduğu Wizard isimli şablon sihirbazı kullanır. Zorunlu olmamakla beraber kod geliştirme sürecini kısaltan ve yazım aşamalarını oldukça kolaylaştıran şablon sihirbazının tarafınızca kullanılmasını şiddetle tavsiye ediyoruz. Bu nedenle aşağıda yer alan görünüm örnekleri bu durum dikkate alınarak verilmiştir.
# Bölüm Başlıkları
# Görünüm Yükleme Yöntemleri
# Görünüm Sayfası Oluşturun
# Görünüm Sayfasını Dahil Edin
# Dahil Edilen Görünüm Sayfasına Veri Gönderin# Tüm Görünümlere Data Gönderimi
# Görünümün Data Olarak Gönderimi# Görünümlerin Otomatik Yüklemesi [5.0.0]
# Alt Metotlarda Otomatik Yükleme
# Data Gönderimi
# Alt Görünümlerin Yüklemesi [5.7.4]# Görünüm Sınıfı [5.2.6]
# Görünüm Yükleme Yöntemleri
Görünümler 2 şekilde kontrolcüler tarafından yüklenebilir.
1 - Import Kütüphanesi ile Yükleme
2 - Controller/Method Formu ile Otomatik Yükleme [5.0.0]
# Görünüm Sayfası Oluşturun
Görünümlerin kontrolcüler tarafından yüklenmesinden önce oluşturulması gerekmektedir. Şimdi örnek olarak Views/ dizini içerisine homepage.wizard.php ve content.wizard.php isimli 2 adet dosya oluşturun ve içeriğini aşağıdaki gibi düzenleyin.
<html>
<head>
<title>{{ $title }}</title>
</head>
<body>
{{ $content }}
</body>
</html>
this is Content Page!
# Görünüm Sayfasını Dahil Edin
Oluşturulan görünümlerin URL üzerinden çalıştırılabilmesi için ilgili kontrolcüler tarafından çağrılması gerekmektedir. Views/ dizini içerisindeki görünümleri çağırmak için Import::view() komutu kullanılır. Bu yöntemler dışında otomatik olarak görünümlerin yükletilebilmesi de mümkündür.
Views/ dizininde yer alan görünümün Controllers/ dizinindeki kontrolcü tarafından nasıl dahil edileceğini gösterelim.
<?php namespace Project\Controllers;
use Import;
class Homepage extends Controller
{
public function main()
{
Import::view('content');
}
}
Views/content.wizard.php dosyasının ilgili kontrolcü tarafından yüklendiğini görebilirsiniz.
# Dahil Edilen Görünüm Sayfasına Veri Gönderin
Oluşturulan görünümler içerisine kontrolcüler üzerinden veri gönderilir. Çünkü görünümü şekillendirecek olan esas nesneler kontrolcüler tarafından hazırlanıp gönderilen verilerdir. Aşağıda bu işlemin nasıl yapılacağını gösteren örnek bir kod yer almaktadır.
<?php namespace Project\Controllers;
use Import;
class Homepage extends Controller
{
public function main(...$parameters)
{
$data['title'] = 'Welcome to Web Page';
$data['content'] = Import::usable()->view('content');
Import::view('homepage', $data);
}
}
Yukarıda Views/homepage.wizard.php görünümüne 2 adet data gönderilmiştir. Bunlardan 1. veri basit bir string ifade iken 2. veri Views/content.wizard.php görünümünün içeriğidir. Bu içeriğin değişkene aktarılabilmesi için usable() yönteminden yararlanılmıştır. Oluşturduğunuz Views/homepage.wizard.php görünümünün içeriğinde $title ve $content isimli 2 adet değişken yer almaktadır. İşte bu değişkenler yukarıda $data olarak gönderilen dizinin anahtarı temsil etmektedir.
View:: sınıfı ile yapılan gönderimler aynı zamanda o an yüklenen tüm görünüm sayfalarına data gönderir. Böylece iç içe kullanılan görünümler için tekrar gönderim yapılmasına gerek kalmaz.
<?php namespace Project\Controllers;
use Import;
class Homepage extends Controller
{
public function main(...$parameters)
{
View::example('Example Data');
$page = Import::usable()->view('content');
Import::view('home', ['page' => $page]);
}
}
Yukarıdaki kullanımda yer alan View::example() kullanımı ile hem content hem de home görünümlerine $example verisi göndermiş olduk.
Yukarıdaki örnekte hali hazırda bir görünüme zaten başka bir görünümün data olarak gönderildiği görülebilmekte. Ancak bu başlık altında View:: sınıfı ile bir sayfanın nasıl data olarak gönderildiğini göreceksiniz.
Kural: View::dataName('page:pageName')
<?php namespace Project\Controllers;
use Import;
class Homepage extends Controller
{
public function main(...$parameters)
{
# Views/content.wizard.php data olarak gönderiliyor.
View::subpage('page:content');
# Views/home.wizard.php
Import::view('home');
}
}
Yukarıdaki örnek kullanımda Views/content.wizard.php görünümü page: deyimi sayesinde Views/home.wizard.php görünümüne data olarak gönderilmiştir.
# Görünümlerin Otomatik Yüklenmesi [5.0.0]
Standart olarak kontrolcülerin yükleyecekleri görünümler Import::view() yöntemi ile ilgili metotun içerisine tanımlanır. Ancak her seferinde Import:: ile görünüm dahil etmek can sıkıcı olabilir. Sizi bu sıkıntıdan kurtaracak olan otomatik yükleme özelliği ile tanıştıralım. Otomatik yükleme yapılabilmesi için kontrolcü ismi ile görünüm ismi arasında belirli bir bağ olmalıdır. Bu bağı göstermek gerekirse;
Eğer alt fonksiyonlara otomatik olarak sayfa yükletmek isterseniz aşağıdaki gibi kullanıyorsunuz.
Yani kontrolcü adı Views/ içinde dizin adı olmalıdır. Kontrolcü içindeki yöntemler o dizin içindeki dosya adı olmalıdır.
Data gönderimi için View kütüphanesinden yararlanabilirsiniz. Namespace değeri kontrolcüler ile aynı olduğu için bu kütüphanenin use ile belirtilmesine gerek yoktur.
<?php namespace Project\Controllers;
class Example extends Controller
{
public function main(string $params = NULL)
{
View::pageName('Example Page');
}
public function try()
{
View::pageName('Example Try Page');
}
}
Example Page
Example Try Page
Aynı kontrolcü dizine sahip görünümlerin bir biri içerisine dahil edilmesi gereken durumlarda standart olarak görünümün tam yolu yazılır.
<?php namespace Project\Controllers;
use Import;
class Example extends Controller
{
public function main(string $params = NULL)
{
View::productPage('view:Example/product');
}
}
Yukarıdaki kullanımda Example/product görünümünü Example/main görünümüne $productPage datası olarak gönderildiğini gösteren örneğe yer verilmiştir.
Bu güncelleme ile aynı kontrolcü dizine sahip görünümler dizin adını yerine (/) sembolü kullanılarak da dahil edilebiliyor.
<?php namespace Project\Controllers;
use Import;
class Example extends Controller
{
public function main(string $params = NULL)
{
# Example/product.wizard.php görünümü gönderiliyor.
View::productPage('view:/product');
}
}
Yukarıda kullanılan bölü (/) sembolü başta kullanılması aktif kontrolcü dizinini temsil eder.
# Görünüm Sınıfı [5.2.6]
View:: sınıfı görünümlere veri gönderme ve görünümleri yükleme işlevlerini yerine getirmesi için oluşturulmuştur. Bu sınıf ile gönderilen veriler altında çağırılan tüm görünümlerde geçerli olur. Bu nedenle küresel veri gönderim sınıfı da denilebilir.
Kontrolcü isim alanına (Project\Controllers) sahip olduğu için kontrolcüler içerisinde use ile belirtilmesine gerek yoktur.
View:: sınıfı herhangi bir görünümü Import::view() yöntemi gibi dahil edebilir.
Parametreler
View::get(string $path, bool $usable = false) | |
string $path | Yüklenecek görünümün yolu. |
bool $usable = false | Görünüm içeriğinin aktarılabilir olup olmadığı. |
return mixed |
Kullanımlar
<?php namespace Project\Controllers;
class Home extends Controller
{
public function main()
{
# Views/home.wizard.php dosyası dahil ediliyor.
View::get('home');
}
}
View:: kütüphanesi görünüm yüklemeden ziyada veri gönderimi için daha çok tercih edilir. Veri gönderimi tanımlamadan sonra kullanılan tüm görünümlerde geçerli olur. Yani küresel kapsamda veri gönderilmiş olur. Veri olarak sadece bir değer değil aynı zamanda bir başka görünüm, script veya stil gibi dosyalarda göndermek mümkündür.
Parametreler
View::dataName(mixed $dataValue) | |||
5.2.6 | mixed | $dataValue | Gönderilen verinin tutacağı değer. |
return | mixed |
Kullanımlar
<?php namespace Project\Controllers;
class Home extends Controller
{
public function main()
{
View::name('Micheal')
->surname('Johnson')
->email('[email protected]')
->get('home');
}
}
Yukarıdaki örnekte $name, $surname ve $email verileri daha sonrasında yüklenen görünümler içerisinde kullanılabilir olacaktır.
{{ $name }} - {{ $surname }} - {{ $email }}
Görünümlere veri gönderilebildiği gibi bir görünüm içeriği veya bir stil/script linkleri de gönderilebilir. Aslında aşağıdaki kodlar Import:: yöntemlerinin bir çeşit kullanımını göstermektedir.
<?php namespace Project\Controllers;
class Home extends Controller
{
public function main()
{
View::emailTemplate('template:email') # Resources/Templates/email.wizard.php
->tableView('view:table') # Views/table.wizard.php
->listView('page:list') # Views/list.wizard.php
->jquery('script:js/jquery') # Themes/Default/js/jquery.js
->bootstrap('style:css/bootstrap') # Themes/Default/css/bootstrap.css
->get('home');
}
}
Yukarıdaki kullanımda çeşitli içeriklerin data olarak gönderildiğini görüyoruz. Bu gönderimlerde sonraki parametreler Import:: yöntemlerinin parametre dizilimi ile aynıdır.
<?php namespace Project\Controllers;
class Home extends Controller
{
public function main()
{
View::tableView('view:table', ['name' => 'My Table']) # Views/table.wizard.php
->get('home');
}
}