
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Template
{
/**
* ci super global
* @since 1.0
* @var object
*/
private $ci;
/**
* Tüm view değişkenleri bu dizi değişkende tutulur.
*
* @since 1.0
* @var array
*/
public $template_data = array();
/**
* örneğin frontend ya da backend
*
* @since 1.0
* @var string
*/
private $side = null;
/**
* Layout dosyalarının bulunduğu klasörün adı
*
* @since 1.0
* @var string
*/
private $layout_path = 'layout';
/**
* layout dosyasının adı.
* default: default
*
* @since 1.0
* @var string
*/
private $layout = 'default';
/**
* Kurucu metod
*
* @since 1.0
* @param null | array $config
*/
public function __construct($config = null)
{
$this->ci =& get_instance();
$this->init();
}
/**
* Yapılandırma
*
* @since 1.0
*/
private function init()
{
empty($this->side) OR $this->side = trim($this->side, '/') . '/';
$this->layout_path = trim($this->layout_path, '/') . '/';
// VARSAYILAN TEMPLATE DATA
$data = array(
'site_title' => 'Test',
// Diğer
'metadata' => ''
);
$this->template_data = $data;
}
/**
* View dosyaları içerisinde kullanılmak üzere herhangi bir değişkene değer set eder.
*
* @since 1.0
* @param string $name değişkenin adı
* @param string $value değişkenin değeri
* @return object
*/
public function set($name = '', $value = '')
{
if (is_array($name)) {
$this->template_data = array_merge($name, $this->template_data);
return null;
}
$this->template_data[$name] = $value;
return $this;
}
/**
* Metadata değişkenini set eder.
* Bu fonksiyon aracilığı ile meta etiketi eklenir.
*
* @since 1.0
* @example $this->template->set_metadata('<script type="text/javascript" charset="utf-8" src="assets/js/jquery.js" />');
* @staticvar strıng $_metadata
* @param string $metadata
* @return object
*/
public function set_metadata($metadata = '')
{
static $_metadata = '';
$metadata = trim($metadata);
$_metadata .= $metadata . PHP_EOL;
$this->set('metadata', $_metadata);
return $this;
}
/**
* Bir view parçası yükler
*
* @since 1.0
* @param string $view view dosyası
* @param array $view_data yüklenecek olan view dosyası içerisinde kullanılmak üzere varsa data
* @param bool $return view dosyasının çıktı şekli TRUE direk ekrana basılmaz FALSE direk ekrana basar
*/
public function load_partial($view = '', $view_data = array(), $return = FALSE)
{
if ($return)
return $this->ci->load->view($this->side . $view, $view_data, $return);
else
$this->ci->load->view($this->side . $view, $view_data, $return);
}
/**
* Bir layout ile birlikte herhangi bir view dosyasını yükler
*
* @since 1.0
* @param string $view layout dosyası içeriğine yüklenecek view dosyası
* @param array $view_data yüklenecek olan view dosyası içerisinde kullanılmak üzere varsa data
* @param bool $return view dosyasının çıktı şekli TRUE direk ekrana basılmaz FALSE direk ekrana basar
* @return string
*/
public function load($view = '', $view_data = array(), $return = FALSE)
{
$template = $this->side . $this->layout_path . $this->layout;
$view = $this->side . $view;
$this->set('content', $this->ci->load->view($view, $view_data, TRUE));
$this->ci->load->view($template, $this->template_data, $return);
}
/**
* Tarafı set eder.
*
* @since 1.0
* @param string $side taraf
* @return object
*/
public function set_side($side = '')
{
$this->side = $this->side = trim($side, '/') . '/';
;
return $this;
}
// tarafı döndürür
public function get_side()
{
return $this->side;
}
/**
* Layout dosyasını set eder.
*
* @since 1.0
* @param string $layout
* @return object
*/
public function set_layout($layout = '')
{
$this->layout = $layout;
return $this;
}
}MY_Controller'da kullanım örneği:<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('template');
$this->template->set_side('frontend');
}
}
class Admin_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
// izin kontrolü burada yapılabilir
$this->load->library('template');
$this->template->set_side('backend');
}
}Controller örneği:<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Main extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$videos = $this->video_model->get_all(10);
$data = array(
'videos' => $videos
);
$this->template->set('og_video', 'http://a.com/b.swf');
$this->template->set_metadata('<script type="text/javascript">console.log("meta");</script>');
$this->template->load('main', $data);
}
public function ajax_sifrem()
{
$data = array();
$this->template->load_partial('user/forgot_password', $data);
}
}Metadata kullanacaksanız view'da gereken yere <?php echo $metadata; ?> yazınız.Template'de herhangi bir view dosyasında aşağıdaki şekilde de kullanım olabilmektedir:
<?php $this->template->load_partial('video/comment', array('video_id' => $video_id)); ?>
sen mi yazdın ?