• 16-11-2012, 14:34:00
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Umarım işinizi görür
    <?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)); ?>
  • 16-11-2012, 15:57:41
    #2
    Üyeliği durduruldu
    faydalı olabilir, merak ettiğim birşey var sen mi yazdın ?
  • 16-11-2012, 16:17:17
    #3
    RobinsonCrusoe adlı üyeden alıntı: mesajı görüntüle
    faydalı olabilir, merak ettiğim birşey var sen mi yazdın ?
    Geçen sene şuradakinin üzerinden geliştirmiştim: http://maestric.com/doc/php/codeigniter_template
    Normal hali:
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Template {
    		var $template_data = array();
    		
    		function set($name, $value)
    		{
    			$this->template_data[$name] = $value;
    		}
    	
    		function load($template = '', $view = '' , $view_data = array(), $return = FALSE)
    		{               
    			$this->CI =& get_instance();
    			$this->set('contents', $this->CI->load->view($view, $view_data, TRUE));			
    			return $this->CI->load->view($template, $this->template_data, $return);
    		}
    }
    
    /* End of file Template.php */
    /* Location: ./system/application/libraries/Template.php */