-
Notifications
You must be signed in to change notification settings - Fork 7.6k
render
Category:View | Category:View::Community | Category:View::Class
Do you love the simplicity of the CI view loader but just can't stomach loading a whole file just to add a couple of span tags and a whole other file just to close them? I think you might find a happy medium with this library.
Essentially, it’ll let you call a view with a wrapper command and some data like so:
$data[’wrap’] = htmlentities(‘<span class="bigbox"><span class="littlebox></span></span>’);
$this->render->wrap(’content’,$data);
That’ll produce the equivalent of ```php
If your 'wrap' data doesn’t have a middle, it'll prefix or post-fix the tags as you might expect. I was aiming for the jQuery 'wrap' function, if you’re familiar with it.
```php
$this->render->wrap('header',array('wrap'=>htmlentities('<body onload="init()">')));
$this->load->view('content');
$this->render->wrap('footer',array('wrap'=>htmlentities('</body>')));
I also threw in my XSLT send() function.
Codeigniter will not let you pass unencoded entities, so your tags will have to be within htmlentities().
You will need to rewrite all of the html brackets in this code before you can use it. This wiki automatically interpret's them into < and >. Make sure that you put them back to < and > as I intended.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter Render Class
*
* @package CodeIgniter
* @subpackage Library
* @category View
* @author Bradford Mar
* @version 0.1
* @link http://codeigniter.com/wiki/render/
* @license http://creativecommons.org/licenses/by-sa/3.0/
*/
class Render
{
/**
* wrap
*
* Quickly wrap tags around your view.
*/
function wrap($view, $vars = array(), $return = FALSE)
{
if (isset($vars['wrap']))
{
if (substr($vars['wrap'],0,5) == '</')
{
$this->load->view($view, $vars, $return);
$this->bypass_view($vars['wrap']);
} elseif (strstr($vars['wrap'],'></') == FALSE)
{
$this->bypass_view($vars['wrap']);
$this->load->view($view, $vars, $return);
} else
{
$bookends = explode('></',$vars['wrap'],2);
$this->bypass_view($bookends[0].'>');
$this->load->view($view, $vars, $return);
$this->bypass_view('</'.$bookends[1]);
}
} else
{
log_message('debug', "No wrapping for ".$view);
$this->load->view($view, $vars, $return);
}
}
/**
* bypass_view
*
* All the benefits of a view sans the file.
*/
function bypass_view($rushtml)
{
// PHP 4 requires that we use a global
global $OUT;
$OUT->append_output(html_entity_decode($rushtml));
}
/**
* send
*
* Call this after loading all of your views to run XSLT before sending.
*/
function send($xslview)
{
$xml = new DOMDocument();
$xml->loadXML($this->output->get_output());
$xsl = new DOMDocument();
$xsl->loadXML($this->load->view($xslview,null,true));
$xslt = new XSLTProcessor();
$xslt->importStylesheet($xsl);
$html = $xslt->transformToXML($xml);
$this->output->set_output($html);
}
}
?>