atayahmet/elisa

Elisa is as Template Engine

dev-master / 1.0.0.x-dev 2015-07-11 08:29 UTC

This package is auto-updated.

Last update: 2024-04-17 08:19:41 UTC


README

#Elisa PHP Template Language

Elisa bir template language kütüphanesidir. Template Language nedir sorusuna kısa cevap olarak görünüm (view) dosyalarından php kodlarını arındırma yöntemi diyebiliriz.

Template dilinde kullanılacak olan php tarafındaki kodların karşılığı olan terimlerin bir kısıtlaması bulunmuyor. Bu tamamen paketi geliştiren developer'ların hayal gücüne bağlı olan bir şey diyebiliriz.

Ama elbetteki buradaki amaç kullanımı kolay ve hızlıca ortaya bir şeyler çıkarabilmek olmalıdır.

##Kurulum Elisa composer üzerinden kurulmaktadır. Aşağıdaki json satırını composer dosyanızda require alanına ekleyin.

"atayahmet/elisa": "1.0.0.*@dev"

sonra komut satırında aşağıdaki komutu çalıştırın:

$ composer update

##Yapılandırma

use Elisa\Elisa;

$elisa = new Elisa;

$elisa->setup([
	'storage' => '/storage/path/',
	'cache'	  => false,
	'ext'	  => '.html',
	'master'  => 'master'
]);

Parametre detayları:

Name Type Description Default
storage string Template dosyalarının önbellekte saklanacağı dizin /
cache boolean Önbellekleme true
ext string Template dosyalarının uzantıları .html
tags array Açılış ve kapanış tag'leri { }
master string Ana template dosyasının adı master

##Kullanım

İlk olarak master template dosyasını görelim.

master.html

<html>
	<head>
		
	</head>

	<body>
	{ @content }
	</body>
</html>

Şimdide master dosyasında @content alanına gelecek olan dosyamızı görelim.

home.html

<h1>Home Page</h1>
<p>This is home page.</p>

Gerekli olan master ve content dosyalarını hazırladıktan sonra bunları tek seferde kullanmayı örneklendirelim.

$elisa->composer('home', true);

yada

$home = $elisa->composer('home');

Bu işlemlerin ardından yapılandırma aşamasında storage alanına tanımladığınız dizine template dosyalarının php dosyası olarak cache'lendiğini görebilirsiniz.

Composer metodunu çalıştırdıktan sonra sonuç şu şekilde olacaktır:

<html>
	<head>
		
	</head>
	<body>
		<h1>Home Page</h1>
		<p>This is home page.</p>
	</body>
</html>

##Metod Referansları

Name Description
setup Yapılandırma ayarlarını kaydeder.
storage Sadece cache dizinini sınıfa tanımlar.
aliases Fonksiyonlara kısa isimler atamanızı sağlar.
ext Sadece dosya uzantılarını sınıfa tanımlar.
tags Açılış kapanış tag'lerini değiştirir.
master Sadece master page dosyasını sınıfa tanımlar.
cache Sadece cache durumunu sınıfa tanımlar.
composer Template dosyalarını derler. (Render)
view Bir php dosyasını olduğu gibi bir değişkene aktarır.
show Bir php dosyasını direkt ekrana basar.
with Template ve php dosyalarına parametreler göndermenizi sağlar.
each Parametreleri tüm template ve php dosyalarına gönderir.
clear Php cache dosyalarını temizler.
beforeEvent İşlem öncesinde (composer(), view(), show()) olayları (event) çalıştırır.
afterEvent İşlem sonrasında (show()) olayları (event) çalıştırır.

##Template Yapılandırıcıları

Name Description
@content Sayfamızın gövdesini (body) oluşturan terim.
@extend() Sayfamızı başka template dosyaları ile genişletir.
@section() İçerik alanı oluşturur
@append() Oluştururan içerik alanlarına içerikleri iletir.

##Terimlerin Kullanımı

Kontrol terimleri, yazdırma terimleri ve diğer kullanımlar için linke tıklayınız: Terimler

#Metod Kullanımları

###setup Paket yapılandırma ayarlarında kullanılan metod.

Örnek:

$elisa->setup([
	'storage' => '/storage/path/',
	'cache'	  => false,
	'ext'	  => '.html',
	'master'  => 'master'
]);

###storage

setup metodundan bağımsız yapılandırma ayarlarından template dosyalarının hangi dizinde cache'leneceği ayarını tanımlar.

Örnek:

$elisa->storage('/storage/path/');

###ext

setup metodundan bağımsız template dosyalarının hangi uzantıda olacağını tanımlar.

Örnek:

$elisa->ext('.html');

###tags

setup metodundan bağımsız açılış ve kapanış tag'lerini değiştirir.

Örnek:

$elisa->tags(['{{', '}}']);

###master

setup metodundan bağımsız ana template çatı dosyasını tanımlar.

Örnek:

$elisa->master('master_layout');

###cache

setup metodundan bağımsız render (derlenen) edilen template dosyalarının önbellekte tutulup tutulmayacağını tanımlar.

Örnek:

$elisa->cache(true); // default true

###aliases

Fonksiyon isimlerine kısa isimler yada farklı isimler vererek kendi fonksiyon terminolojinizi oluşturabilirsiniz.

Örnek:

$elisa->aliases(['length' => 'strlen', 'dump' => 'var_dump']);

strlen:

{ length('Hello World!') }

var_dump:

{ dump('Hello World!') }

###composer

Template dosyasını önbellekte yok ise derler (render) ve önbelleğe ekler.

Örnek:

$elisa->composer('home.index');

###view

Php dosyasının içeriğini direkt olarak bir değişkene aktarmanızı sağlar. Örnek:

$elisa->view('common.sidebar');

###show

Php dosyasının içeriğini direkt olarak ekrana basmanızı sağlar.

Örnek:

$elisa->show('tools.slider');

###with

Template ve view dosyalarına parametre göndermenizi sağlar.

Örnek:

$elisa->with(['name' => 'Ahmet']);

$elisa->composer('home.contet', true);

home/content.html:

Hello {! $name }

###each

Tüm template ve view dosyalarına her zaman gitmesi istediğiniz parametreleri gönderir.

Örnek:

$elisa->each(['name' => 'Ahmet']);

Parametreler aşağıdaki her iki view dosyasına gönderilecektir.

Örnek:

$elisa->view('common.header');

$elisa->view('common.footer');

###clear

Önbellekteki derlenmiş template dosyalarını temizler.

Örnek:

$elisa->clear();

###beforeEvent

Dosya isimleri ile kayıt edilmiş event'ler dosyalar işleme alınmadan çalıştırılır.

Not: Göndereceğiniz parametreler çalıştırılan event'e gönderilecektir.

Örnek:

$elisa->beforeEvent(function($params){
	
	// do something...

});

###afterEvent

Dosya isimleri ile kayıt edilmiş event'ler dosyalar işleme alındıktan sonra çalıştırılır.

Not: afterEvent sadece show() metodu ile çalışmaktadır.

Not: Göndereceğiniz parametreler çalıştırılan event'e gönderilecektir.

Örnek:

$elisa->afterEvent(function($params){
	
	// do something...

});

#Yapılandırıcılar

###@content

Template içeriğinin gövde kısmını oluşturan bir etikettir. Sadece master template sayfasında kullanılabilir.

Örnek:

master.html

<html>
	<head>
		
	</head>

	<body>
	{ @content }
	</body>
</html>

Master template ile derlemek istediğiniz gövde (body) template dosyasını şu şekilde kullanabilirisiniz:

$elisa->composer('home.body');

###@extend()

Template sayfalarını genişletmek için yardımcı olur. Bu metod ile hem template dosyası hemde normal bir php dosyasını dahil edebilirsiniz.

Ayrıca bu dosyalara parametreler gönderebilirsiniz.

profile.html

<h1>User Profile</h1>

<header>
	{ @extend('profile.header', ['name' => 'Can']) }
</header>

<footer>
	{ @extend('profile.footer') }
</footer>

Yukarıda profile.html template dosyasına header ve footer template dosyalarını dahil ettik. Ayrıca header dosyasına bir de parametre gönderdik.

###@section()

Belirteceğiniz section alanlarına başka bir template dosyasından içerik gönderebilirsiniz.

Örnek:

master.html:

<html>
	
	<head>
		{ @section('header') }

		{ @end }
	</head>

	<body>
		{ @content }
		
		{ @section('footer') }

		{ @end }
	</body>

</html>

login.html:

<h1>Login page</h1>

{ @append('header') }
<title>Login page</title>
{ @end }

{ @append('footer') }
<script type="text/javascript">
	function hello()
	{
		alert('Hello World!');
	}
</script>
{ @end }

Yukarıda bir master page dosyamız var ve içinde tanımladığımız iki adet section alanları bulunuyor.

Sonrasında login.html adında bir template dosyası oluşturduk ve append metodlarıyla master page alanındaki section'lara içerikler gönderdik.

###@append()

Belirtilen section alanlarına içerik gönderir.

Not: Yukarıda detaylı örneği bulabilirsiniz.

Örnek:

{ @append('header') }
<title>Login page</title>
{ @end }

{ @append('footer') }
<script type="text/javascript">
	function hello()
	{
		alert('Hello World!');
	}
</script>
{ @end }

#Terimler

Elisa'da PHP terimleri direkt olarak kullanılabilir. Kendi tagları arasında gerek döngüler gerekse kontrol yapıları basitce kuygulanabilir.

###if Operatörü

Örnek 1:

{ if($status === true) }
	<h1>Is logged in!</h1>
{ endif }

Örnek 2:

{ if($status === true) }
	<h1>Is logged in!</h1>
{ else }
	<h1>Is not logged in!</h1>
{ endif }

Örnek 3:

{ if($status == 1) }
	<span>status: 1</span>
{ elseif($status == 2) }
	<span>status: 2</span>
{ else }
	<span>--</span>
{ endif }

###Döngüler (for, foreach, while)

for:

{ for($i=1; $i<=5; $i++) }
	<h3>{! $i }</h3>
{ endfor }

foreach:

{ foreach($users as $user) }
	<div>{! $user['name']} {! $user['surname'] }</div>
{ endforeach }

while:

{ while($product == $products) }
	<div>{! $proudct['name']}</div>
{ endwhile }