в основном идея в том, что один, но шаблон - это то, что предлагает гораздо больше, например, RainTPL - это WYSIWYG, потому что он заменяет относительные пути в шаблон на пути к серверу, таким образом вы создаете свой шаблон локально, и он работает на сервере. без необходимости менять img / css.

аю, что основной принцип системы шаблонов PHP - замена строк, верно? Так что я могу просто использовать строку для хранения моего HTML-кода шаблона, как

$str_template = "<html><head><title>{the_title}</title><body>{the_content}</body></html>"

и в следующем коде просто сделайте str_replace, чтобы вставить данные в мою переменную шаблона, как

str_replace( $str_template, '{the_title}', $some_runtime_generated_title );
str_replace( $str_template, '{the_content}', $some_runtime_generated_content );

тогда наконец

echo $str_template; 

Надеемся, это немного ускорит процесс передачи переменных? Я знаю, что это может быть странный вопрос, но кто-нибудь пробовал это?

Ответы на вопрос(9)

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

Вы можете использовать HTML-файлы, содержащие теги php для вывода (например,<?=$var?>) и только петли. включить их через «включить» в ваш PHP-код. это намного быстрее.

Взгляни навсезнайка, это мой любимый шаблонизатор для php. У smarty есть много полезных функций, таких как кеширование, и его можно расширять с помощью плагинов.

если вы понимаете по-немецки, посмотритеВот, есть небольшое введение в smarty.

$str_template = "<html><head><title>$the_title</title><body>$the_content</body></html>";

Это будет работать так же ...
Несколько человек задаются вопросом, почему существует система шаблонов, когда PHP уже является системой шаблонов ...

Конечно, у этих систем есть и другие преимущества, такие как более безопасный доступ к переменным, возможно, более простой в обращении для дизайнеров (или для генерации с помощью инструментов), ограничение логики на уровне представления ... Что является обычной критикой тяжелого шаблона такие системы, как Smarty, с такой большой логикой, что вы можете все, большинство пишут с ним еще одну систему шаблонов! ;-)

Некоторые системы шаблонов, такие какученый, занимает среднюю дорогу. :-)


Реальный шаблон потребует заполнения не только простых переменных, но также нескольких управляющих структур или, по крайней мере, каких-то блоков для управления определенными областями страницы (например, для создания циклов).
Таким образом, вы не можете сделать шаблон только с str_replace. Также понадобятся некоторые регулярные выражения и сложный синтаксический анализ.

Таким образом, лучше придерживаться механизма шаблонов, который уже в вашем распоряжении - самого PHP!

 CoR06 мая 2014 г., 16:01
Сам PHP ... Лучший ответ!

Твоего здравого смысла" правильный. Вы можете использовать PHP для использования текущего контекста и замены переменных. Вместо того, чтобы записывать вывод, вы можете сделать ob_start (), чтобы сохранить его в буфере и получить замененный контент. Легко и элегантно!

это основная идея шаблонной системы. Вы можете дополнительно его абстрагировать, например, добавьте скобки другим методом.

Вы также можете использовать массивы с str_replace и, таким образом, сделать гораздо больше замен одним вызовом функции, подобным этому

str_replace(array('{the_title}', '{the_content}'), array($title, $content), $str_template);

Система, с которой я работаюЛожка Библиотекаих система шаблонов довольно прочная, включая скомпилированные шаблоны, которые значительно увеличивают производительность.

 Shawn25 янв. 2009 г., 10:32
Является ли Spoon Lib быстрее, чем умнее?
 matpie25 янв. 2009 г., 10:53
Массивы очень хороши в этой функции. Что касается Smarty, почти все, что быстрее и лучше.
Решение Вопроса

это основная идея шаблонной системы. Реальные шаблонные системы имеют гораздо больше возможностей, но в основном это то, что они делают.

Вы спрашиваете, сделает ли это "процесс передачи всей переменной немного быстрее". Быстрее чем что? У вас проблемы с производительностью, которые вы делаете сейчас?

 Greg Hewgill25 янв. 2009 г., 10:39
Использование Smarty, вероятно, будет более эффективным, чем то, что вы предложили. Учтите, что каждый раз, когда вы вызываете str_replace (), один раз для каждой заменяемой переменной, необходимо сканировать всю строку шаблона, чтобы найти фигурные скобки для замены. Smarty сделает эту операцию более эффективно.
 Greg Hewgill25 янв. 2009 г., 22:08
О, еще одна трудность с простой заменой строки заключается в том, что произойдет, если ваш $ some_runtime_generated_title содержит что-то, похожее на замену переменной, например "куда идет {the_content}?" Следующая замена для {the_content} также будет некорректно заменена в заголовке.
 Bernd Ott25 янв. 2009 г., 22:38
smarty анализирует шаблон один раз для генерации php-кода. тогда php-код выполняется для каждого запроса
 Shawn25 янв. 2009 г., 10:30
извини, я имел в виду быстрее, чем обычный шаблонный подход, такой как Smarty. Нет, я не сталкиваюсь с проблемами с производительностью, просто любопытство. Благодарю.

который разбивает код на его токены (переменные и простой текст). В качестве простого подхода вы можете использоватьpre_split Функция для этого:

$tokens = preg_split('/(\{[^\}]+\})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

Теперь вы можете перебрать токены и проверить, является ли он переменным или простым текстом:

foreach ($tokens as $token) {
    if ($token[0] === '{' && $token[strlen($token)-1] === '}') {
        // token is a variable
    } else {
        // token is plain text
    }
}

Преимущество этого подхода состоит в том, что переменные не заменяются в тексте, который уже был заменен. Так:

$foo = '{bar}';
$bar = 'bar';
$template = 'Lorem {foo} {bar} sit amet …';

Здесь текст будет заменен наLorem bar {bar} sit amet … и нетLorem bar bar sit amet … как это случилось бы с вашим кодом, когда{bar} заменяется после{foo}.

что один, но шаблон - это то, что предлагает гораздо больше, например, RainTPL - это WYSIWYG, потому что он заменяет относительные пути в шаблон на пути к серверу, таким образом вы создаете свой шаблон локально, и он работает на сервере. без необходимости менять img / css.

str_replace()

Также может быть хорошей идеей поместить шаблоны в отдельный файл, а не хранить их в строке. Тогда просто прочитайте их черезfile_get_contents() или похожие.

Ваш ответ на вопрос