[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP шаблонизотор
netforlife
Всем здрасте. Начну с того, что я в танке и строю новый велосипед, строго не судить.
Суть такая: есть html шаблон с метками типа
<tpl type="insert" name="module" position="top" /tpl>
.
Я загружаю файл и перевожу его в string, далее парсим метки и на выходе получаем многоуровневый массив:
$label[] = array(
[
0] = array(
[
"type"]=>"string",
[
"name"]=>"string",
[
"position"]=>"string"
)
)

На входе также массив в

$string["module"] = array(
"position"=>"top",
"insert"=>"Это модуль");

Далее через foreach произвожу замену. Все просто, но дуплюсь и не могу понять, знаю, что хочу сделать но сообразить как реализовать не получается.
Ожидание, что вместо метка подставиться "insert"=>"Это модуль" по нескольким атрибутам. Как так правильно организовать. И такой вопрос. Есть подозрение, что при большом количестве данных данный метод будет занимать много времени.



Спустя 7 минут, 34 секунды (7.09.2011 - 17:02) Winston написал(а):
Цитата (netforlife @ 7.09.2011 - 16:55)
$label[] = array(
[0] = array(
  ["type"]=>"string",
  ["name"]=>"string",
  ["position"]=>"string"
)
)

Это не верная запись
так верно
$label = array(
0 => array(
"type"=>"string",
"name"=>"string",
"position"=>"string"
));

Так надо ?

<tpl type="<?php echo $label['type']; ?>" name="<?php echo $label['name']; ?>" position="<?php echo $label['position']; ?>" /tpl>

Спустя 5 минут, 52 секунды (7.09.2011 - 17:08) netforlife написал(а):
Для большей информации, функция отвечает за замену

public function insert_html($name_tpl=null)
{
$insert = ($name_tpl) ? $this->load_template($name_tpl) : $this->load_template($this->main_tpl);
$tpl = ($name_tpl) ? $this->parse_html($name_tpl) : $this->parse_html($this->main_tpl);
if(!empty($this->data_replace)) {
foreach ($tpl as $key=>$atribut) {
switch ($atribut["type"]) {
case "insert":
$position = $atribut["position"] ? $atribut["position"] : null;
$name = $atribut["name"] ? $atribut["name"] : null;
$replace = $this->data_replace[$atribut["name"]]['string'];
$insert = str_replace($key, $replace, $insert);
break;
case "include":
$insert = str_replace($key, $this->insert_html($atribut["name"]), $insert);
break;
default:
$insert = str_replace($key, "<!-- Метка не опознана -->", $insert);
break;
}
}
}

return $insert;
}

$name_tpl: шаблон переведенный в string
$this->data_replace: массив содержит информацию для замены

Спустя 1 час, 52 минуты, 37 секунд (7.09.2011 - 19:01) Игорь_Vasinsky написал(а):
слишком сложно.
прям микро joomla biggrin.gif

{*AUTORIZATION*} - форма авторизации

функция замены biggrin.gif

- $autirization - html форма авторизации
- весь вывод в буфер
- из буфера в переменную $content
- $content = str_replace("{*AUTORIZATION*}", $autorization, $content)
- echo $content

И замечательно то , что str_replace может принимать в качестве аргументов - массивы.

Это - микро Smarty.

использую в MVC, последний пост в моём журнале.
Быстрый ответ:

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