Привет! Например есть сайт разделен на 3 области, в 1 области 2 ссылки, нажав на 1 ссылку выведуться данные в область 2, а нажав на вторую ссылку в области 1, данные вивидуться в область 3 при этом в области 2 останеться то что выводилось до этого, тоеть надо обеспечить независимоть областей, как это реализовать, если шаблон отдельно будет например в папке templates???
Разбирайся index.php PHP: <? $result=array(); include_once "classes/tpl.php"; // класс шаблонизатора $tpl=new tpl(); if(!empty($_GET['act'])){ if(file_exists($modulname="moduls/{$_GET['act']}.php")){ // папка с модулями - moduls include $modulname; // инклюд модуля }else{ $result['error']="Нет такого модуля {$_GET['act']}"; } }else{ include "moduls/index.php"; // Дефолтный модуль } $tpl->set($result); print $tpl->load("index.tpl"); ?> classes/tpl.php PHP: <? class tpl { public $path="tpl"; // папка с шаблонами public $vars=array(); function Set($name,$val=false){ if(!is_array($name)){ $this->vars[$name]=$val; }else{ foreach($name as $k=>$v)$this->Set($k,$v); } } function load($tplname){ if(file_exists($tln=$this->path.'/'.$tplname)){ @ob_start(); extract($this->vars); include $tln; $res=ob_get_contents(); ob_clean(); return $res; }else{ trigger_error("Ошибка нет шаблона $tln",E_USER_ERROR); } } } ?> moduls/index.php PHP: <? $content=array( "res"=>"Какой-то контент", "name"=>"Чего-то там", ); $tpl->Set("result",$content); $result['content']=$tpl->load("index_index.tpl"); // Шаблон модуля ?> tpl/index.tpl HTML: <html> <body> <?if($error){?>Ошибка <?=$error;?><br><?}?> <?=$content?> </body> </html> tpl/index_index.tpl HTML: <div style="border:1px solid red"><?print_r($result);?></div>
Mr.M.I.T. PHP: if(file_exists($modulname="moduls/{$_GET['act']}.php")){ // папка с модулями - moduls include $modulname; // инклюд модуля этот код потенциально опасный в том плане, что можно заинклудить любой php файл. Безопасным его можно сделать так: PHP: $_GET['act'] = basename($_GET['act']);
Я очень благодарен, но я новечек в php и я не увидел сдесь реальзации задачи, можно в кратце пояснить
врятли, это готовый пример каркаса простого модульного сайта могу только если конкретно что-то не понятно Сергей, вообще не известно работает ли, писал в браузере с ходу
Не стоит в таком случае писать =) В чём именно проблема реализации? Есть какой-нибудь набросок? Попытка?
Впринцепе работает, только выдает ошибку:Warning: Missing argument 2 for tpl::Set(), called in /home/vov4i196/domains/free-library.ru/public_html/g/test/index.php on line 14 and defined in /home/vov4i196/domains/free-library.ru/public_html/g/test/classes/tpl.php on line 5, задача в том что сайт нужно разбить на модули и в каждый модуль подгружать php файлы, тоесть сайт разбит на 2 части в первой части находяться ссылки, при нажатии на ссылку например новости, в второю часть грузиться фаил news.php, благодаря этому коду я могу выводить значение переменной content, а прогрузить фаил news.php при этом миняеться только 2-я часть а 1-я в которой ссылки и 3-я не миняються
Вот смотрите, когда я нажимаю на link грузиться blok1 в первую область, а еще надо что при нажании на link2 block2 грузился во 2-ю, то есть соседнюю, область, при этом значение области 1 меняться не должно.....
ты не прав vova_b подредактировал код это меняет суть дела, если по путному, то нужно всё переписывать, а если по быстрому просто внести нужные изменения в сам модуль, типа так PHP: <? $content1=array( "res"=>"Какой-то контент", "name"=>"Чего-то там", ); $tpl->Set("result1",$content1); if($_GET['sub_act']=='newblock'){ $content2=array( "res"=>"Какой-то контент2", "name"=>"Чего-то там2", ); $tpl->Set("result2",$content2); } $result['content']=$tpl->load("index_index.tpl"); // Шаблон модуля ?> или нужно этот блок в главный шаблон? тогда в этом модуле присвой нужное значение $result например $result['content_block_2']="Контент блока 2";
Если чесно я не понял вопроса, мне уже не удобно перед вами. Я вообще пишу cms не чего сложного будет система новостей и впринцепе все, нужно просто разделить php от шаблона, я смотрел шаблонизаторы но не понял, у меня будут допустим модуль news.php вот я зашел на сайт http://sait.ru/ineex.php вверху шапка сбоку меню по средине будет выводиться инфа, я в меню выбрал пункт новости, и в средний блок должны вывестись новости, а сценарий описан в файле news.php(ну тоесть считывание сновости с бд и постраничный вывод), при этом шапка свержу и меню слева не должны меняться, тоесть 3 блока которые не зависимы друг от друга
Короче, смотрите код =) Главный буфер $result ключи этого массива будут переменные в шаблоне index.tpl абсолютно без разницы в какой части движка будет заполняться $result лишь бы до вывода как ещё объяснить я не знаю, может на примере index.php HTML: <? /* ... */ $result['menu']="Меню Меню Меню"; $tpl->set($result); print $tpl->load("index.tpl"); ?> в шаблоне PHP: <?=$menu;?>
Я практически все понял, единственное что не получаеться создать 2 блока...... и код который вы только что привели в файле с блоком писать?