Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: В str_replace поменистить функцию оО

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
etoYA
Отправлено: 06 Марта, 2012 - 21:05:49
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




В общем начал издеватся над php, написал свой велосипед ездить на нем конечно не очень шикарно, но за то не ощущаются все неровности, колеса же квадратные!).
Чтобы сделать ЧПУ взял за основу статью DeepVarvar'a. Вот как эти модули включить в нужное мне место, я тут понял, что этот самый controller нужно подключить в нужный мне блок, но у меня тут такой вопрос, как в функцию str_replace подключить другую функцию, либо вообще результат запроса БД?

Вот шаблонизатор

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class Template{
  4.         private $dir = './templates/'; // папка с шаблонами
  5.         private $vars = array(); // переменные
  6.         private $template; // шаблон
  7.        
  8.         function __construct(){
  9.                 $this->conf = Config::getInstance();
  10.         }
  11.         function load($name){ // загрузка шаблона
  12.                 if (!is_dir($this->dir.$name)) $name = 'default'; // если шаблона не существует, то подключить стандартный шаблон
  13.                 $this->template =  file_get_contents($this->dir.$name.'/'.'main.tpl'); // подключение главного шаблона
  14.                 // сканирование папки с шаблоном для определения подключаемых щаблонов
  15.                 $scan = scandir($this->dir.$name);
  16.                 foreach ($scan as $file){
  17.                         if (is_file($this->dir.$name.'/'.$file)){
  18.                                 $tpl[] = substr($file, 0, -4);
  19.                         }
  20.                 }
  21.                 // создание шаблона
  22.                 for ($i=0; $i<count($tpl); $i++){
  23.                         $this->template = str_replace(strtoupper('{'.$tpl[$i].'}'),file_get_contents($this->dir.$name.'/'.$tpl[$i].'.tpl'), $this->template);
  24.                 }
  25.                 // подключение css
  26.                 $this->template = str_replace('CSSURL', $this->conf->get('main','url').'/templates/'.$name.'/css/style.css', $this->template);
  27.                 $this->template = preg_replace('#\[/(.*?)\]#', '</div>', $this->template);
  28.                 $this->template = preg_replace('#\[(.+?)\]#','<div id="$1">',$this->template);
  29.                 return $this->template;
  30.         }
  31.         function set($key, $value){
  32.                 // установка переменной
  33.                 $this->vars[$key] = $value;
  34.         }
  35.         function get(){
  36.                 foreach($this->vars as $k=>$v){
  37.                         $this->template = str_replace($k, $v, $this->template);
  38.                 }
  39.                 echo $this->template;
  40.         }
  41. }
  42. ?>
  43.  


Вот его вызов

PHP:
скопировать код в буфер обмена
  1. $tmp = new Template;
  2. $tmp->load('default');
  3. $tmp->set('{TITLE}', 'Так то титул');
  4. $tmp->get();

(Отредактировано автором: 06 Марта, 2012 - 21:19:03)

 
 Top
snikers987
Отправлено: 06 Марта, 2012 - 21:59:29
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. public function get(){
  3.         echo strtr($this->template, $this->vars);
  4. }
  5.  


тоже самое, но не буду говорить о скорости работы. но думаю быстрее

(Отредактировано автором: 06 Марта, 2012 - 21:59:57)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
etoYA
Отправлено: 06 Марта, 2012 - 22:17:39
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




snikers987, учту, точнее уже учел)).

PHP:
скопировать код в буфер обмена
  1. $tmp->set('{TITLE}', require_once('engine/inc/controller.php'));
Как сделать, чтобы возвращало не true, а подключало файл? Я тут думаю file_get_conents и eval?
 
 Top
Opposite
Отправлено: 06 Марта, 2012 - 23:27:21
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




PHP:
скопировать код в буфер обмена
  1. class Templater {
  2.                 public function load($template) {
  3.                         ob_start();
  4.                         include ... / require ...;
  5.                         return ob_get_clean();
  6.                 }
  7. }


Мммм, тебе это надо? Не понял
 
 Top
etoYA
Отправлено: 06 Марта, 2012 - 23:42:53
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Opposite, ob_start ... это вроде бы хэш?

Мне нужно заменить вместо {BLABLA} подключить php код
 
 Top
snikers987
Отправлено: 06 Марта, 2012 - 23:48:58
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




etoYA пишет:
Opposite, ob_start ... это вроде бы хэш?

Мне нужно заменить вместо {BLABLA} подключить php код

ob_start() - буферизация вывода


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
etoYA
Отправлено: 06 Марта, 2012 - 23:58:53
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Все, вроде бы понял

PHP:
скопировать код в буфер обмена
  1.  
  2.         function inc(){
  3.                 ob_start();
  4.                 include $_SERVER['DOCUMENT_ROOT'].'/engine/modules/controller.php';
  5.                 return ob_get_clean();
  6.         }
  7.  

PHP:
скопировать код в буфер обмена
  1. $tmp->set('{CONTROLLER}', $tmp->inc());
 
 Top
Opposite
Отправлено: 07 Марта, 2012 - 00:04:40
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




etoYA пишет:
Как сделать, чтобы возвращало не true, а подключало файл? Я тут думаю file_get_conents и eval?

etoYA пишет:
Opposite, ob_start ... это вроде бы хэш?

snikers987 пишет:
ob_start() - буферизация вывода

Я отвечал на твой вопрос. Ты в функции подключаешь файл, содержимое заносится в буффер и, соответственно, присваивается переменной.

PHP:
скопировать код в буфер обмена
  1.  
  2.      public function load($template) {
  3.                         ob_start();
  4.                         require_once($template);
  5.                         return ob_get_clean();
  6.                 }
  7.  

PHP:
скопировать код в буфер обмена
  1.  
  2. $tmp->set('{TITLE}', load('engine/inc/controller.php'));
  3.  


В $vars['{TITLE}'] будет содержимое файла engine/inc/controller.php
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB