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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация класса шаблонизатора, нужна помощь в реализации метода 
:(
    Опции темы
pirrat
Дата 3.11.2007, 18:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вообщем пишу свой класс,основной задачей которого будет парсинг переменных в шаблон,т.е. одним словом класс-шаблонизатор,
класс уже почти написан,но встала одна проблема- нужно написать метод класса который будет выполнять следующие задачи и идеи:

а идея такова: очень часто,практически в любом коде ,встречается такой код:

Код

$item= $db->query("SELECT * FROM table");
while($result=$db->fetchrow($item)) {
//тут обрабатываем и  парсим переменные в шаблон
}

думаю строки вам знакомы..
хотелось этот код оптимизировать ,и я практически справился с этой задачей,вот код:

создаем обьект класса и вызываем метод класса parselist в аргументах которого пишем запрос и название шаблона для вывода:

Код

$mtest = new index;
$query ="SELECT * FROM table";
$mtest->parselist($query,"test");


данный код выполняет следующее: обрабатывает запрос , и выводит шаблон test.tpl ,в котором прописаны переменные ,имена которых являются названиями полей таблицы..
все работает как надо,но проблема в том что не получается обработать эти самые переменные,их можно обработать в самом метогде,но из вне не получается,вот так это должно выглядить:

Код

$mtest = new index;
$query ="SELECT * FROM table";
$mtest->varsql['date']=format_time($mtest->varsql['date']); //обрабатываем значения из поля date функцией
$mtest->parselist($query,"test");


вот сам класс,привожу не полностью,а только те методы которые здесь участвуют..

Код

class index {
var $url;
var $template;
var $modulename;
var $tplfile;
var $varsql;
//функция установки файла шаблона
function tfile($tpl_name)
{
$tpl = $tpl_name;
if(empty($tpl) || !file_exists($tpl)){ print "<b>файла ".$tpl." не существут</b>"; }
else { $this->template = file_get_contents($tpl); }
}
//функция установки файла шаблона// 

//функция установки переменных шаблона
function temp($keys,$val='') {
 if ($val=='') {
foreach ($keys as $key=>$val)  {
$this->template = str_replace("{".$key."}", $val, $this->template);
    }
} else {
$this->template = str_replace("{".$keys."}", $val, $this->template);    
    }
}
//функция установки переменных шаблона// 

//функция парсинга списков//
 function parselist($query,$temp) 
 {
 global $db,$pagecont,$m;  
$qu=$db->query($query);     
 while($ff=$db->fetchassoc($qu))
 { 
     $this->varsql=$ff;
 $this->tfile("temp/".$m."/".$temp.".tpl");   
  $this->temp($this->varsql);
  $pagecont[$temp] .=$this->template;
  }
  $this->countfetch = count ($this->fetch);


  }
//функция парсинга списков//

  }




как я уже писал,этот код работает так как надо,за исключением того что нельзя обработать данные из бд,так как они парсятся сразу в шаблон, и что то не как не могу придумать как эти данные обработать из вне класса, т.е. нужно обработать член класса $varsql!!!

очень буду благодарен,если подскажете ,как это реализовать...

ЗЫ: я плохо знком с ООП,мб поэтому и не могу реализовать задачу...


Это сообщение отредактировал(а) pirrat - 3.11.2007, 18:38
PM MAIL   Вверх
HotHead
Дата 4.11.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не очень понял, что значит 3-ий кусок кода. Или там 3 и 4 строчки перепутаны местами?

А так сделайте $varsql массивом и push-те в него результаты запросов. На выходе получите массив. Правда не знаю что вы с ним будете делать. Я бы рекомендовал ввести в parselist  ещё как минимум название поля (по умолчанию = '') и если оно есть, то забивать данные в массив $varsql с ключами равными значению этого поля. Так хотя бы некоторая логика появится.

Или объясните куда должна обращатся строка $mtest->varsql['date']=format_time($mtest->varsql['date']); если в результате запроса вернётся несколько строчек.
PM MAIL   Вверх
pirrat
Дата 4.11.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



$valsql и так я вляется массивом,с ключами равными названиям полей таблицы,и значениями равными значениями этих полей,т.е. если сделать в цикле 
print_r($this->varsql); то получим следующие:
Код

Array ( [id] => 1 [title] => новость [text] => текст)

и таких несколько массивов в зависимости от того сколько раз прошел цикл...
можно его сделать многомерным массивом-ниже описал как..

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

по логике нужно делать так : делить эту функцию(parselist) на 2 или 3 функции,в первой мы получаем на выходе многомерный массив с индексными ключами и значениями другой массив в котором уже и будут ключи-имена полей,значения-значения этих полей... т.е. вот так:
Код

Array ([0] => Array ( [id] => 1 [title] => новость [text] => текст) [1] => Array ( [id] => 2 [title] => новость2 [text] => текст2))


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

но при таком раскладе,мне кажется игра не стоит свеч и проще будет применить стандартный процедурный подход...

Это сообщение отредактировал(а) pirrat - 4.11.2007, 13:08
PM MAIL   Вверх
HotHead
Дата 4.11.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кто вам мешает сделать массив массивов с ассоциативными ключами? Собственно fetchassoc и должен делать массив с ассоциативными ключами. Потом делаете array_push в varsql. А методе в дальнейшем используете $ff.
Код

 $this->varsql = Array();
 while($ff=$db->fetchassoc($qu))
 { 
    $this->varsql = array_push($this->varsql, $ff);
    $this->tfile("temp/".$m."/".$temp.".tpl");   
    $this->temp($ff);
    $pagecont[$temp] .= $this->template;
 }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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