[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите допилить класс
McLotos
Пишу уже вторую версию класса.
Мой велосипед по обработке шаблонов. Идея в том чтобы найти все переменные в шаблоне и заменить их на значения.
проблема та же, которая была и в первой версии.
Не могу придумать как обрабатывать массивы.

проблемная часть
//что делает этот метод:
//найти в шаблоне элементы из массива $vars и заменить их на значения - это прекрасно работает,кроме одного момента - никак не могу придумать что делать

public function prepare($pageinfo,$matherial)
{
$vars['{HEAD.Title}'] = $pageinfo['name'];
$vars['{HEAD.KeyWords}'] = $pageinfo['keywords'];
$vars['{HEAD.Description}'] = $pageinfo['description'];
$vars['{HEAD.Author}'] = $pageinfo['author'];
if(is_file($this -> tmp_dir . $this -> skin . 'styles.css'))
{$vars['{HEAD.Styles}'] = 'http://' . $_SERVER['SERVER_NAME'] . '/' . $this -> tmp_dir . $this -> skin . 'style.css';}
$handle = opendir($this -> tmp_dir . $this -> skin . $this -> js_dir);
while (false !== ($script = readdir($handle))) {
if ($script != "." && $script != "..") {
$filename = explode('.',$script);
$extension = $filename[1];
if($extension=='js')
{$scripts[]=$script;}}
}

if (count($scripts)==1)
{$vars['{HEAD.Scripts}']='http://' . $_SERVER['SERVER_NAME'] . '/' . $this -> tmp_dir . $this -> skin . $this -> js_dir . $scripts[0];}
else
{$vars['{HEAD.Scripts}']=$scripts;}


for($i=0;$i<count($matherial);$i++)
{$keys[$i]=array_keys($matherial[$i]);}
for($i=0;$i<count($matherial);$i++)
{$values[$i]=array_values($matherial[$i]);}
for($i=0;$i<count($keys);$i++)
{foreach($keys[$i] as $k => $v)
{}
}


$header = file($this -> tmp_dir . $this -> skin . 'header' . $this -> ext);
$page = file($this -> tmp_dir . $this -> skin . $pageinfo['type'] . $this -> ext);
$footer = file($this -> tmp_dir . $this -> skin . 'footer' . $this -> ext);
$this -> file = array_merge ($header, $page,$footer);
for($i=0;$i<count($this -> file);$i++)
{$this -> file[$i] = trim(str_replace(array("\r\n","\n","\r"),'',$this -> file[$i]));}
$this -> file=array_diff($this -> file,array(''));
$this -> file=array_values($this -> file);

for($i=0;$i<count($this -> file);$i++)
{foreach($vars as $k => $v)
{if(!is_array($v))
{$this->buffer[$i]=str_replace($k,$v,$this->file[$i]);}
else
{$pos = strpos($this -> file[$i], '<script');
if($pos !== false)
{}

}

}
}
}

Даже не могу толком сформулировать вопрос, но примерно так:
Если в значении ключа массива Vars находится массив, то нужно произвести замену столько раз сколько значений в массиве.
Допустим если
{HEAD.Style} содержит адрес одного файла. то вывести строку
<list src="{HEAD.Style}"> 1 раз
а если файлов несколько то вывести столько раз сколько файлов. каждый раз подставляя новое значение
Это сделать легко, но как быть, если мне нужно например распарсить вот этот блок
<div class="block" id="{GOODS.Name}">
<div
class="name">
<a
href="{GOODS.Link}"><h2>{GOODS.Name}</h2>{GOODS.Descr}</a><img src="{GOODS.Logo}"/>
</div>
<div
class="image"><img src="{GOODS.Image}"></div>
<input
type="checkbox" id="{GOODS.Id}" name="{GOODS.Name}" value="{GOODS.Value}" class="buy"/>
<label
for="{GOODS.Id}">
<span
class="checked">В корзину</span>
<span
class="unchecked">Убрать</span>
</label>
<span
class="price">{GOODS.Price} T</span>
<div
class="description">
{GOODS.Description}
</div>
</div>

Каждый раз нужно подставлять новый ID товара, название, ссылку, логотип, описание, цены
Подскажите как это спроектировать?
Можно составить карту блока. Понять где его начало и где конец. а потом просто клонировать эту карту подставляя новые значения. Вот только не соображу как это реализовать =)
И за одно, может кто-нибудь подскажет что ещё можно подправить в этом классе.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

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