• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نحوه استفاده از Twig
#1
Question 
سلام به همه دوستان
یک اسکریپت بصورت MVC ساختم، حالا میخوام از Twig استفاده کنم. دقیقا باید چجوری پیاده سازیش کنم. ممنون میشم راهنمایی کنید.
  پاسخ
تشکر شده توسط :
#2
یک نمونه MVC ساده که داخلش از twig استفاده شده:
https://github.com/rezaee/raspina

تمپلت:
https://github.com/rezaee/raspina/blob/m...mplate.php

کنترلر ها رو هم مشاهده کنید:
https://github.com/rezaee/raspina/tree/m...controller

کد پی‌اچ‌پی:
$this->view->render=array('categories'=>$categories,'information'=>$information); 

کد ها رو بررسی کنید تا متوجه بشین.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Y.P.Y mhdev
#3
ممنون از راهنماییتون! من تونستم قالب رو لود کنم. فقط یک مورد رو خوب متوجه نشدم، چطوری صفحات view رو داخل قالب لود کنم؟
  پاسخ
تشکر شده توسط :
#4
کد:
raspina/library/Raspina/Template/Template.php

کد پی‌اچ‌پی:
    public function view()
{
require_once(
'library/Raspina/Template/Twig/Autoloader.php');
Twig_Autoloader::register();
$dirTemplate1='application/theme/default/';
$dirTemplate2='application/view/'.$this->controller.'/';
$load=new Twig_Loader_Filesystem(array($dirTemplate1,$dirTemplate2));
$twig = new Twig_Environment($load, array(
'cache' => 'library/Raspina/Template/Cache',
'auto_reload' => true
));
$template=$twig->loadTemplate($this->view.'.php');
$tmp=$template->render($this->render);
$escaper = new Twig_Extension_Escaper(true);
$twig->addExtension($escaper);
echo 
$tmp;


با استفاده از Twig_Loader_Filesystem این کارو میکنیم.
dirTemplate1 مسیر قالب ماست و dirTemplate2 مسیر view ما...
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#5
من هم همین کار رو کردم ولی متاسفانه جواب نداد!
کد پی‌اچ‌پی:
public function view($viewname,$data) {
        require_once 
'vendor/autoload.php';
        
$theme 'public/default/';
        
$viewpage 'views/'.$viewname.'/';
        
$loader = new Twig_Loader_Filesystem(array($theme,$viewpage));
        
$twig = new Twig_Environment($loader,array(
                
'cache'=>'cache/',
                
'auto_reload'=>true
        
));
        
        
$template $twig->loadTemplate('index.php');
        
$tmp $template->render($data);
        
$escaper = new Twig_Extension_Escaper(true);
        
$twig->addExtension($escaper);
        echo 
$tmp;
    } 
  پاسخ
تشکر شده توسط :
#6
چه خطایی میده؟
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#7
هیچ خطایی نمیده! فقط خود قالب لود میشه. متغییر هم توی کنترلر ست میکنم نشون میده! ولی محتوای view رو نمایش نمیده
  پاسخ
تشکر شده توسط :
#8
کد پی‌اچ‌پی:
$template $twig->loadTemplate('index.php'); 

این index.php چیه؟! باید اسم فایل view رو قرار بدین جاش که با توجه به درخواست کاربر ممکنه تغییر کنه

مثلا با درخواست آدرس www.site.com/index/about

کد پی‌اچ‌پی:
$template=$twig->loadTemplate($this->view.'.php'); 

مقدرا this->view میشه about که همون view مورد نظر ماست.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#9
من به این صورت طراحی کردم:
کد پی‌اچ‌پی:
Controllers
        index
.php
        help
.php
    Libs
        Controller
.php
        View
.php
        Boostrap
.php
    Views
        index
/index.php
        help
/index.php
    
public
        default/
index.php
    Vender
/Twig 
این کد رو تغییر دادم
کد پی‌اچ‌پی:
$template $twig->loadTemplate($viewname.'.php'); 
فابل help/index.php رو به help/help.php تغییر دادم ، محتوای view نشون داده شد ولی قالب رو دیگه لود نمیکنه! وقتی کنترلر index رو فراخوانی میکنم قالب رو لود میکنه ولی view رو نه!
این اررور رو هم داد:
کد پی‌اچ‌پی:
Fatal errorUncaught exception 'LogicException' with message 'Unable to register extension "escaper" as extensions have already been initialized.' in /srv/www/htdocs/mvc/vendor/twig/twig/lib/Twig/Environment.php on line 696
LogicException
Unable to register extension "escaper" as extensions have already been initializedin /srv/www/htdocs/mvc/vendor/twig/twig/lib/Twig/Environment.php on line 696 
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان