What are your templating strategies?

后端 未结 5 472
感情败类
感情败类 2020-12-16 07:36

I try to develop my own little framework. For this, I\'d like to read up some templating techniques. I know that templating is a really complex topic, but knowing some strat

相关标签:
5条回答
  • 2020-12-16 07:45

    My strategy is as follows:

    1. Try and use the minimum of PHP in the template and if possible down to none.
    2. I have created classes for various components commonly found in web pages, one of them is tpanel which I am using to demonstrate the concept below
    3. tpanel for example would handle all the logic to create a menu, parses a small template for 'navigation_menu' and sends the result for final inclusion to overall template.

    Effectively I am creating 'blocks', very similar to what Drupal does - if you are familiar with it.

            $this->load->library('tpanel');
            $s=$this->tpanel->get('date',$data);
            $s.=$this->tpanel->get('navigation_menu',$data);
            $s.=$this->tpanel->get('ajax_menu',$data);
            $s.=$this->tpanel->get('spacer',$data);
            $data['title']='List of Databases';
            $post=$this->uri->segment(5);
            $blog=(file_get_contents('../'.$dir.'/'.$post.'.dat'));
            $s.=markdown($blog);
            $data['content']=$s;
            $view='/admin/admin_simple_view';
    

    The system is much more flexible that what I have shown above. For example the tpanel->get('ajax_menu, $data) also handles the script settings using jQuery.

    I have been also looking at Django lately and they have some very good ideas on templating. It might be worth getting a look, even if you are not a Python programmer, especially how they handle inheritance.

    0 讨论(0)
  • 2020-12-16 07:45

    This is not directly related to your question, but have you considered client side templating? John Resig has a nice micro-template in Javascript that will work with web services and other Ajax techniques. It's quite simple to do a get or post for the template, and then do another get/post for your data. It's quite handy.

    0 讨论(0)
  • 2020-12-16 07:53

    This is exactly how I do it, instead of calling a Controller in the View (WHAT?!?) I just compute all the necessary data for the view in the Controller that calls the View in the first place.

    A View should never call a Controller / Model! BUT, if you must you can do something like this:

    function Controller($pathToControler) // instantiates and returns the Controller
    function Model($pathToModel) // instantiates and returns the Model
    

    That way, inside your view you can do something like this:

    $this->Controller('path/to/blog/tags.php')->List();
    

    Again, you shouldn't use this pattern, I'm just giving you solutions, not encouraging them.

    Similarly, you can also call another view from within a view, like this:

    $this->View('path/to/views/header.php', array('title' => 'Hello World!'));
    
    0 讨论(0)
  • 2020-12-16 07:55

    I really enjoyed zend-framework approach to this, and have used it myself in our framework. You will have a view class with will have things like:

    $view = new View();
    $view->setTemplatesPath('.....');
    $view->assign('name','value');
    $view->render('index');
    

    the render method will take all the variables stored and make them properties and include the template based on the Path set, so in your templates you will have:

    <?php echo $this->foo; ?>
    ....
    <?php echo $this->load('header'); // this includes another template ?>
    
    0 讨论(0)
  • 2020-12-16 08:08

    Have a look at the section Web Presentation Patterns, especially Template View, Transform View, Two-Step View. For stuff like rendering breadcrumbs or pagination, you can utilize a View Helper pattern.

    0 讨论(0)
提交回复
热议问题