Переменные не заменяются значениями в строке, извлеченной функцией file_get_contents () - PullRequest
0 голосов
/ 01 октября 2018

У меня есть файл, в котором я храню несколько шаблонов с разделителем.Я получаю содержимое с помощью file_get_contents (), а затем анализирую их с помощью preg_match_all ().В эти шаблоны я включаю переменные, которые я ожидал заменить их значениями, так как я использую метод фигурных скобок, как это можно сделать в строках (см. Пример ниже).У кого-нибудь есть советы, почему это не работает?

code.tpl:

### CHAPTER_FILE_LIST START ###
<item id="{$CHAPTER['id']}" href="{$CHAPTER['file']}.xhtml" media-type="application/xhtml+xml"/>
### CHAPTER_FILE_LIST END ###

### CHAPTER_LIST START ###
<itemref idref="{$CHAPTER['id']}"/>
### CHAPTER_LIST END ###

PHP-файл

function grab_templates() {
    global $tpl;
    if($raw_tpl = file_get_contents('templates/code.tpl')) {
        preg_match_all('/### ([A-Za-z._]+) START ###\s*([^#]+)### \1 END ###\s*/', $raw_tpl, $tpl_array);

        $count = count($tpl_array[1]);
        for($i = 0; $i < $count; $i++) {
            $tpl[$tpl_array[1][$i]] = $tpl_array[2][$i];
        }
    } else {
        echo 'Error getting code.tpl';
        exit;
    }
}

grab_templates();
$CHAPTER['id'] = 'name_of_chapter';
$CHAPTER['file'] = 'chapter_file';

echo $tpl['CHAPTER_FILE_LIST'].'<br />';
echo $tpl['CHAPTER_LIST'];

Это должно определять переменные шаблона: $tpl['CHAPTER_FILE_LIST'] и $tpl['CHAPTER_LIST'] и вывод:

<item id="name_of_chapter" href="chapter_file.xhtml" media-type="application/xhtml+xml"/>
<itemref idref="name_of_chapter"/>

, но вместо этого выводится:

<item id="{$CHAPTER['id']}" href="{$CHAPTER['file']}.xhtml" media-type="application/xhtml+xml"/>
<itemref idref="{$CHAPTER['id']}"/>

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете попробовать изменить свой код.

В code.tpl:

### CHAPTER_FILE_LIST START ###
<item id="[CHAPTER_ID]" href="[CHAPTER_FILE].xhtml" media-type="application/xhtml+xml"/>
### CHAPTER_FILE_LIST END ###

### CHAPTER_LIST START ###
<itemref idref="[CHAPTER_ID]"/>
### CHAPTER_LIST END ###

В вашем PHP-файле:

$vars = array("[CHAPTER_ID]" => "name_of_chapter", "[CHAPTER_FILE]" => "chapter_file"); 

function grab_templates() {
    global $tpl;
    global $vars;
    if($raw_tpl = file_get_contents('templates/code.tpl')) {
        preg_match_all('/### ([A-Za-z._]+) START ###\s*([^#]+)### \1 END ###\s*/', $raw_tpl, $tpl_array);
        $count = count($tpl_array[1]);
        for($i = 0; $i < $count; $i++) {
            $tpl[$tpl_array[1][$i]] = str_replace(array_keys($vars), array_values($vars), $tpl_array[2][$i]);
        }
    } else {
        echo 'Error getting code.tpl';
        exit;
    }
}

grab_templates();
echo $tpl['CHAPTER_FILE_LIST'].'<br />';
echo $tpl['CHAPTER_LIST'];
...