mysql / php - хранит HTML-шаблоны в базе данных - PullRequest
4 голосов
/ 01 декабря 2009

Мне интересно, как лучше всего хранить шаблоны HTML в базе данных, где я могу их извлечь и вставить переменные.

Очевидно, я мог сохранить их как php, а затем 'EVAL' запись ... но я слышал, что это зло.

есть ли лучший способ? :)

редактирование:

Извините, я не совсем понял ... Я попытался упростить это, сказав html-шаблоны ... что я действительно имел в виду, это небольшие встраиваемые html-элементы (например, youtube) ... а не целый сайт. *

Ответы [ 3 ]

4 голосов
/ 02 декабря 2009

Я бы также советовал не хранить HTML в базе данных. Гораздо удобнее хранить их как шаблоны в файловой системе и включать их или анализировать, когда это необходимо. Я также рекомендую использовать что-то вроде Smarty. Это очень удобный инструмент.

Однако, если бы вы предпочли сделать это вручную, вот что я бы сделал.

Во-первых, я бы сохранил шаблон в файле в файловой системе. Если вы предпочитаете использовать базу данных, это можно сделать для. Просто знайте, что база данных, как правило, вызывает больше накладных расходов при использовании для подобных вещей.

Например, в случае видео на YouTube:

<object width="{$width}" height="{$height}">
    <param name="movie" value="http://www.youtube.com/{$path}"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/{$path}"
           type="application/x-shockwave-flash"
           allowscriptaccess="always"
           allowfullscreen="true"
           width="{$width}" height="{$width}">
    </embed>
</object>

Тогда я бы просто str_replace включил переменные PHP, как и сам PHP со строками.

<?php
$template_path = 'templates/youtube_vid.tpl';
$template_data = file_get_contents($template_path);

$old = array('{$width}', '{$height}', '{$path}');
$new = array(425, 344, 'v/zuZB2O6orV0&hl=en_US&fs=1&');

echo str_replace($old, $new, $template_data);
?>

И это было бы.

Конечно, вы можете использовать <?php $width; ?> -подобные заполнители и просто include шаблон, но это подвергает вас риску инъекционных атак. Это более безопасный маршрут.

2 голосов
/ 02 декабря 2009

Марк, вам нужно хранить шаблоны в базе данных? Это будет увеличивать нагрузку на сервер БД при каждом запросе этих шаблонов, если только вы не кешируете их.

Сравните это с файловой системой, которая имеет встроенные кэши для упрощения чтения файлов.

Кроме того, у вас не будет потенциальной дыры в безопасности, которая может возникнуть при использовании eval ().

1 голос
/ 01 декабря 2009

Не нужно заново изобретать колесо, вы можете использовать шаблонизатор и хранить сами шаблоны в базе данных. Лично мне нравится хранить шаблоны в файловой системе, потому что это упрощает поддержку вещей намного , но это ваш проект:)

...