Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор 
:(
    Опции темы
chiffa
Дата 20.5.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Всем добрый вечер. Пишу небольшой шаблонизатор. Столкнулся с проблемой. Как подключить к выводу скрипт из другого файла. тоест ьу меня есть 1.tpl

Код

<table>

<tr> <td>{new}</td> </tr>

<tr> <td>TEST</td> </tr>

<tr> <td>{reg}</td> </tr>

</table>


мини функция шаблонизатора 

Код

function Template($tpl , $patterns , $replacements ) {
   $tpl = file_get_contents($tpl);
   echo str_ireplace($patterns,$replacements,$tpl);
}



и сам код скрипта

Код


$inc [0]='{new}';
$inc [1]='{reg}';

$put6 [0]='{new.php}'; //исполняемый файл пхп с определенным кодом
$put6 [1]='{reg.php}'; //исполняемый файл пхп с определенным кодом


Template("shablon/".$_SESSION ['tpl']."/1.tpl" , $inc, $put6);


При таком раскладе вставляется просто строка с именем файла, как вставить исполняемый код?... Заранее спасибо за помощь! smile
PM MAIL   Вверх
zibox86
Дата 21.5.2010, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 11.12.2007

Репутация: нет
Всего: 1



Инклюдить шаблон в кеш и потом заменить шаблонные переменные на реальные.

Что то типа:
Код


ob_start();

include шаблон

ReaplaceVar();

ob_end_flush();

function ReplaceVar(){
    Поиск и замена

}


Плюс в этом еще то что можно кеширование сделать
PM MAIL WWW   Вверх
chiffa
Дата 21.5.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



спасибо за ответ! суть уловил, но принцип реализации не очень. можешь на конкретном примере? Если я раньше проинклудю шаблон и ниже вызову функцию то как он проведет замену?....
PM MAIL   Вверх
zibox86
Дата 21.5.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 11.12.2007

Репутация: нет
Всего: 1



Ну тут же дело твоей фантазии!! 

Пишешь функцию к примеру, а еще лучше класс.

Код

class Template{

              function includeTemplate($name, $args = false){
                     $this-StartBuffer();
                     include $name;
                     $this->StopBuffer();
           
                     return true;
              }   
  
              /**
     * Запускает буферизацию
     *
     */
    
    function StartBuffer(){
                     @ob_start();
    }
    
    /**
     * Заменяет переменные шаблона
     *
     * @return string
     */
    
    function ReplaceVar(){
        
           $buffer = preg_replace();

           return $buffer;
    }
    
    /**
     * Останавливает буфкризацию
     *
     */
    
    function StopBuffer(){
        echo $this->ReplaceVar();
        @ob_end_flush();    
    }
}

PM MAIL WWW   Вверх
SamDark
Дата 21.5.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Вот мой вполне рабочий вариант:
http://rmcreative.ru/blog/post/mvc-view


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
chiffa
Дата 22.5.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



А такой вопрос по кешированию, немного для себя прояснить. насколько я понимаю принцип работы на стороне сервера следующая:
1. Заходит клиент
2. Сервер проверяет есть ли сохраненный кеш
3. Если есть то выдает сохраненную версию
4. Если нет, но сохраняет кеш

Отсюдова возникает вопрос: если сохраненная версия кеша изменилась (допустим это магазин товаров и добавился новый товар) пользователь его получается не увидит? Или перед каждым выводом сравнивать устарел кеш или нет, тогда теряется весь смысл, ведь запрос к серваку и обработка ПХП будет все равно происходить.... или я что то неправильно понимаю?
PM MAIL   Вверх
chiffa
Дата 24.5.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



up smile
PM MAIL   Вверх
chiffa
Дата 24.5.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



С принципом создания шаблонизатора все понятно, суть проблемы в том что если я хочу вставить вместо тега подключить php-файл у меня вставляется путь к этому файлу, а нужно что бы он выполнялся и результат выводился вместо тега шаблонизатора
PM MAIL   Вверх
chiffa
Дата 25.5.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Код вот:

Код

<?php
class html_generator
{
public $manual_configs;
public $template;
public $buffer;
   

public function load_template($type, $name)
{
buffer = file_get_contents("shablon/".$_SESSION ['tpl']."/".$name);
}
public function mount_vars($rep, $param)
{
echo str_ireplace($rep, $param, $this->buffer);
    }
  }?>


вызов:

Код

$generator = new html_generator();
   $generator->load_template('pages','reg.tpl');
   $generator->mount_vars($inc, $put6);


В свою очередь
$inc='{reg}';
$put6='modules/user_mod/reg/index.php';

тоесть мне необходимо вместо тега шаблонизатора {reg} подключить файл пхп. При совершении выше описных действий 

выводится просто строка адреса modules/user_mod/reg/index.php и сам файл не подключается.
PM MAIL   Вверх
NewDima
Дата 25.5.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Естественно, не подключится...
Самый простой способ будет записывайть полученный в результате парсинга контент в файл и включайть его инклудом,
PM ICQ   Вверх
chiffa
Дата 25.5.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



гм... а каким образом локально спарсить контент? не подскажешь?
PM MAIL   Вверх
NewDima
Дата 25.5.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Нет, я что-то поторопился с ответом в предыдущий раз.
используй ob_start()  и иже с ним
PM ICQ   Вверх
chiffa
Дата 25.5.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



тоесть так?

Код

ob_start();

$generator = new html_generator();
$generator->load_template('pages','reg.tpl');
$generator->mount_vars($inc, $put6);

 @ob_end_flush();

PM MAIL   Вверх
NewDima
Дата 25.5.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



chiffa, вы требуете слишком большой универсальности от метода mount_vars, но при этом он работает с одним простым синтаксисом
Код

{VARIABLE_NAME}

?
Сначала ответьте, почему mount_vars должен вдруг вставлять контент из файла. Когда поймете, что ответа нет, разберитесь наконец с тем, что делает этот метод. Когда разберетесь с ним, либо расширите синтаксис метки, либо заведете новый метод, одно из двух.
PM ICQ   Вверх
chiffa
Дата 25.5.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



ага. суть я понял. обработчик нужно делать внутри вызываемого класса. Допустим я его инклудю:

$content=include ($put6);

дальше заменяю, через реплейс подставляю $content, но дело в том что при выполнении $content=include ($put6); файл выводится, как "запретить" вывод?. весь код:



Код

<?php

class html_generator
{
public $manual_configs;
 public $template;
 public $buffer;


 public function load_template($type, $name)
   {
 $this->buffer = file_get_contents("shablon/".$_SESSION ['tpl']."/".$name);
   }


 public function mount_vars($rep, $param)
   {


 echo str_ireplace($rep, include ($param), $this->buffer);
   }
}


?>




Это сообщение отредактировал(а) chiffa - 25.5.2010, 14:30
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1205 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.