Суть такая: есть 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 написал(а):
Для большей информации, функция отвечает за замену
$name_tpl: шаблон переведенный в string
$this->data_replace: массив содержит информацию для замены
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
{*AUTORIZATION*} - форма авторизации
функция замены
- $autirization - html форма авторизации
- весь вывод в буфер
- из буфера в переменную $content
- $content = str_replace("{*AUTORIZATION*}", $autorization, $content)
- echo $content
И замечательно то , что str_replace может принимать в качестве аргументов - массивы.
Это - микро Smarty.
использую в MVC, последний пост в моём журнале.
прям микро joomla
{*AUTORIZATION*} - форма авторизации
функция замены
- $autirization - html форма авторизации
- весь вывод в буфер
- из буфера в переменную $content
- $content = str_replace("{*AUTORIZATION*}", $autorization, $content)
- echo $content
И замечательно то , что str_replace может принимать в качестве аргументов - массивы.
Это - микро Smarty.
использую в MVC, последний пост в моём журнале.