Простейший вариант библиотеки загрузки страницы (Layout)
Материал из Wiki
Часто спрашивают, как упростить вывод страницы. Я набросал простенькую библиотеку, которая просто выводит главную страницу.
class Layout {
private $ci = null;
private $scripts = array();
private $styles = array();
private $js_code = array();
private $js_code_onload = array();
private $css_code = array();
function __construct()
{
$this->ci =& get_instance();
}
private function head_tags()
{
$tags = '';
if ($this->scripts)
{
foreach ($this->scripts as $filename) {
$tags .= sprintf('<script type="text/javascript" src="/js/%s" ></script>'."\n", $filename);
}
}
if ($this->styles)
{
foreach ($this->styles as $filename) {
$tags .= sprintf('<link type="text/css" rel="stylesheet" href="/css/%s" />'."\n", $filename);
}
}
if ($this->js_code_onload)
{
$this->js_code[] = sprintf("$(function() { %s });", implode(" ", $this->js_code_onload));
}
if ($this->js_code)
{
$tags .= '<script type="text/javascript">';
$tags .= implode(" ", $this->js_code);
$tags .= '</script>';
}
if ($this->css_code)
{
$tags .= '<style type="text/css">';
$tags .= implode(" ", $this->css_code);
$tags .= '</style>'."\n";
}
return $tags;
}
function add_scripts($scripts)
{
if ( ! is_array($scripts))
{
$scripts = array($scripts);
}
$this->scripts = array_merge($this->scripts, $scripts);
return $this;
}
function add_styles($styles)
{
if ( ! is_array($styles))
{
$styles = array($styles);
}
$this->styles = array_merge($this->styles, $styles);
return $this;
}
function add_js_code($js, $onload = FALSE)
{
if ($onload)
{
$this->js_code_onload[] = $js;
}
else
{
$this->js_code[] = $js;
}
return $this;
}
function add_css_code($css)
{
$this->css_code[] = $css;
return $this;
}
function add_js_var($name, $value, $onload = FALSE)
{
$js_code = sprintf("var %s = %s;\n", $name, $value);
if ($onload)
{
$this->js_code_onload[] = $js_code;
}
else
{
$this->js_code[] = $js_code;
}
return $this;
}
function view($vars = array(), $page = FALSE)
{
$page = $page ? $page : 'main_page';
$content = array(
'head_tags' => $this->head_tags(),
);
$content = array_merge($content, $vars);
$this->ci->load->view($page, $content);
}
}
?>
К ней прилагается простенький шаблон (view) main_page.php.
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Your title here</title>
<link rel="stylesheet" type="text/css" href="css/reset.css"/>
<link rel="stylesheet" type="text/css" href="css/base.css"/>
<script type="text/javascript" src="/js/jquery.js" ></script>
<? if (isset($head_tags)) print $head_tags ?>
</head>
<body>
<div id="header">
Заголовок
</div>
<div id="content" class="holygrail">
<div class="wrapper">
<div class="columns">
<div class="center">
Центр
</div>
<div class="left">
Лево
</div>
<div class="right">
Право
</div>
</div>
</div>
</div>
<div id="footer">
Подвал
</div>
</body>
</html>
Единственное, что в этом шаблоне статично — переменная $head_tags. Все остальное — чистая заготовка.
Это не образцовая библиотека, а просто пример для новичков, для тех, кому сложно определиться, как и что делать. С помощью библиотеки можно подключать файлы css, куски css-кода, аналогично с js + js-код, который должен грузиться на onReady (реализация под jQuery).
Что с этим делать дальше? Например, если у вас стандартный сайт, состоящий из 3-х основных блоков (хидер, контент, футер), вы можете создать для каждого из этих блоков свою функцию в библиотеке и делать так:
function header()
{
// здесь, возможно, вызов модели и загрузка шаблона хидера
}
function content()
{
// аналогично с контентом. Наверняка, здесь будет несколько вызов различных моделей
}
function footer()
{
// вероятнее всего, здесь загрузка шаблона с подвальной менюшкой и счетчиками
}
// ...
function view($vars = array(), $page = FALSE)
{
$page = $page ? $page : 'main_page';
$content = array(
'head_tags' => $this->head_tags(),
'header' => $this->header(),
'content' => $this->content(),
'footer' => $this->footer(),
);
$content = array_merge($content, $vars);
$this->ci->load->view($page, $content);
}
Надеюсь, это поможет вам начать думать в верном направлении.