[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор
Remka
Всем привет!
Всю ноч сидел ну не могу я разобраться в чем ошибка

Шаблонизатор работает прекрпсно
Но проблемма в том что мне необходимо по средствам php сделать следующее:
В базе 4 строки у каждой номер, титул и название
Как мне сделать так чтобы вытащить из мускула эти 6 записей после чего провернуть черер while и засунуть в шаблон, не вмешивая пхп и html?




Спустя 28 минут, 27 секунд (13.11.2010 - 10:36) Семён написал(а):
Мы чё тут сборище гадалок и знаем что у тебя за шаблонизатор?
У людей похоже вообще крышак съехал последний год, думать мозгами вообще не хотят.

Спустя 23 минуты, 29 секунд (13.11.2010 - 10:59) Remka написал(а):
Семен побереги амбиции. И поакуратнее со словами. Я чисто физически не смогу сейчас исходники выложить так как нахожусь не зп компьютером, и какая разница какой шаблонизатор? Допустим я туда переменную вывожу

Мне не нужно код писать прошу лиш с мыслями направить.
Есть цикл который поочередно должен брать строки из базы.
После чего заносить принятое в квадратик 50 на 50 пикселей
Я всего напросто спросил возможно ли обойтись одним маленьким шаблоном который в результате работы цикла будет дублироваться?

Или создавать для каждой принимаемой переменной свой маленький шаблончик
И записывать как $text1 второй квадрат $text2 третий text$3
Я уверен что должно быть решение гараздо проще?

Спустя 39 минут, 11 секунд (13.11.2010 - 11:39) TMake написал(а):
Для решения твоей задачи есть масса вариантов реализации, довольно сложно вы объяснили суть своей проблемы, попробуйте наглядно привести то что вас затрудняет и тогда вас направят в оптимальную сторону.

Спустя 50 минут, 35 секунд (13.11.2010 - 12:29) Remka написал(а):
У меня есть шаблон

<div width="50" height="50">$text</div>

Есть сам скрипт.
Сейчас точно не помню но изобразиьь постараюсь
<?php
# тут подключаем таблицу бд
$Query = mysql_query ......

# дальше цикл
While($result = mysql_featch_array($Query)){
И вот тут по сути он и должен брать строку из базы
Заносить в шаблон в переменную $text и после чего брать следующую
Строку из базы заносить в тот же шаблон
И в результате нужно получить страничку с квадратами внутри которых текст
}

Я в итоге получил много квадратов
Но текст из базы присутствует только в последнем
Тоесть каждый раз когда цикл проходит он пишет переменную заного
Вот я и не могу додумать как же так сделать чтобы
Переменная осталась одна тоесть $text и вне зависимости от количества квадратов

Вот впринципе и все что у меня не получается.
Еще раз прошу прощенья я сижу с телефона поэтому более развернутой информации дать не смогу.
?>

Спустя 56 минут (13.11.2010 - 13:25) vagrand написал(а):
Ну так это у тебя не шаблон а HTML с php вставками. По сути и HTML c php вставками может использоваться в качестве шаблона но тогда по архитектуре никаких запросов к БД в шаблонах быть не должно.

Спустя 32 минуты, 13 секунд (13.11.2010 - 13:57) Remka написал(а):
Нет вы меня не поняли.
Я пытпюсь придти к тому чтобы в php небыло элементов html

Меня интересует совершенно другое
Мне нужно чтобы я мог подцепить маленький шаблончик со своим css
К основному дизайну и грубо говоря с помощью цыкла размножить этот маленький шаблончик с разными результатами

Это мне нужно для того чтобы php работал сам по себе и не был завязан с версткой что в дальнейшем позволит мне легко поменять дизайн сайта.

Спустя 1 час, 4 минуты, 44 секунды (13.11.2010 - 15:02) TMake написал(а):
Я так понял вы не можете дописывать переменую в цикле и в переменной остается только последнее значение:
while($result=...)
$text .= $result['text'];

Спустя 5 минут, 19 секунд (13.11.2010 - 15:07) walters написал(а):
в уроках на сайте irbis-team.com есть модуль новостей, там то что тебе нужно !

Спустя 11 минут, 16 секунд (13.11.2010 - 15:19) Remka написал(а):
Все я помоему понял
Почему то я про новости не подумал
Доберусь до дома буду глядетб где ошибка
Просто у меня все это через шаблонизатор может в нем дело

Спасибо!

Спустя 1 час, 13 минут, 46 секунд (13.11.2010 - 16:32) linklink26 написал(а):
Берешь smarty и смотришь реализацию.

Спустя 1 час, 5 минут, 17 секунд (13.11.2010 - 17:38) Basili4 написал(а):
linklink26
Вот тоже мне пример и скати смарти не самый лучшый шаблонизатор есть много лучше обратите внимание на twig

Спустя 6 минут, 55 секунд (13.11.2010 - 17:45) Семён написал(а):
Цитата (Basili4 @ 13.11.2010 - 18:38)
linklink26
Вот тоже мне пример и скати смарти не самый лучшый шаблонизатор есть много лучше обратите внимание на twig

Фанат Фабьена? biggrin.gif

Спустя 3 дня, 8 часов, 21 минута, 25 секунд (17.11.2010 - 02:06) Remka написал(а):
Вообщем продолжаю тему
задачу осуществил без шаблонизатора все прекрасно работает

но вот когда делаю через шаблонизатор
то почему то результат совершенно другой

может я что не так делаю незнаювообщем

шаблонизатор уже не помню где брал
смотрел smarty ну для меня он пока долек поэтому для начала хотелось бы с этим разобраться

вот сам шаблонизатор

	class Template{
public $dir = '.';
public $template = null;
public $copy_template = null;
public $data = array();
public $block_data = array();
public $result = array('info' => '', 'content' => '');
public $template_parse_time = 0;

# Задаём параметры основных переменных подгрузки шаблона
public function set($name , $var){
if (is_array($var) && count($var)){
foreach ($var as $key => $key_var){
$this->set($key , $key_var);
}
}

else{
$this->data[$name] = $var;
}
}


# Обозначаем блоки
public function set_block($name , $var){
if (is_array($var) && count($var)){
foreach ($var as $key => $key_var){
$this->set_block($key , $key_var);
}
}

else{
$this->block_data[$name] = $var;
}
}


# Производим загрузку каркасного шаблона
public function load_template($tpl_name){
$time_before = $this->get_real_time();

if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)){
die ("Unable to load the template: ". $tpl_name);
return false;
}

$this->template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name);

if (stristr( $this->template, "{include file=" )){
$this->template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies","\$this->sub_load_template('\\1')", $this->template);
}

if (stristr( $this->template, "{include file=" )){
$this->template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies","\$this->load_script('\\1')", $this->template);
}

$this->copy_template = $this->template;
$this->template_parse_time += $this->get_real_time() - $time_before;
return true;
}

# Этой функцией загружаем "подшаблоны"
public function sub_load_template($tpl_name){
if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)){
die ("Unable to load the template: ". $tpl_name);
return false;
}

$template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name);
return $template;
}

# Этой функцией загружаем "подшаблоны для работы с массивами базы"
public function load_block_template($tpl_name, $name , $var){
if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)){
die ("Unable to load the template: ". $tpl_name);
return false;
}
else{
$template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name);
return $template;
$this->block_data[$name] = $var;
}
}


# Очистка переменных шаблона
public function _clear(){
$this->data = array();
$this->block_data = array();
$this->copy_template = $this->template;
}

public function clear(){
$this->data = array();
$this->block_data = array();
$this->copy_template = null;
$this->template = null;
}

# Полная очистка включая результаты сборки шаблона
public function global_clear(){
$this->data = array();
$this->block_data = array();
$this->result = array();
$this->copy_template = null;
$this->template = null;
}

# Сборка шаблона в единое целое
public function compile($tpl){
$time_before = $this->get_real_time();
foreach ($this->data as $key_find => $key_replace){
$find[] = $key_find;
$replace[] = $key_replace;
}

$result = str_replace($find, $replace, $this->copy_template);
if (count($this->block_data)){
foreach ($this->block_data as $key_find => $key_replace){
$find_preg[] = $key_find;
$replace_preg[] = $key_replace;
}
$result = preg_replace($find_preg, $replace_preg, $result);
}
if (isset($this->result[$tpl])){
$this->result[$tpl] .= $result;
}
else{
$this->result[$tpl] = $result;
}
$this->_clear();
$this->template_parse_time += $this->get_real_time() - $time_before;
}

# Счётчик времени выполнения запросов сборки
public function get_real_time(){
list($seconds, $microSeconds) = explode(' ', microtime());
return (round($seconds, 3));
}
}



В самом сайте он прекручен примерно вот так

$tpl = new Template;
$tpl -> dir =SKIN;

# ВОТ ТУТ ПОДКЛЮЧЕН ФАЙЛ КОТОРЫЙ ПО ССЫЛКЕ ГРУЗИТ КОНКРЕТНЫЙ МОДУЛЬ
# И В САМОМ МОДУЛЕ СЛЕДУЮЩЕЕ


$Query = mysql_query("SELECT * FROM `table`ORDER BY `position`", $DB);
$tpl -> set('{content}', $tpl->sub_load_template('content.tpl'));

#ВОТ ТУТ Я СТАВЛЮ ЦИКЛ КОТОРЫЙ ДОЛЖЕН ИЗ БАЗЫ ВЫДЕРНУТЬ ЗНАЧЕНИЯ ЗАПИХАТЬ В block.tpl И ВЫВЕСТИ В ШАБЛОН {content}
while($result = mysql_fetch_array($Query)){
$tpl -> set('{block}', $tpl->sub_load_template('block.tpl'));
#$tpl -> set('{block_text}', $result['text']);
}


$tpl -> compile('main');
eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');
$tpl -> global_clear();


Вот уже какой день ломаю голову и никак не могу додумать.
может сам шаблонизатор как то надо дописать?

Помогите пожалуйста нет сил больше!

Спустя 1 месяц, 3 дня, 14 часов, 28 минут, 25 секунд (20.12.2010 - 16:34) linklink26 написал(а):
Учи xlst там все стандартно с описаловом.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.