Ответ 1
Рассмотрим в том числе PHP файл, как если бы вы копировали код из include в позицию, в которой стоит include-statement. Это означает, что вы наследуете текущую область действия.
Итак, в вашем случае $param уже доступен в данном шаблоне.
нужна ваша помощь с шаблонами PHP. Я новичок в PHP (я исхожу из Perl + Embperl). Во всяком случае, моя проблема проста:
Код выглядит примерно так:
$rows = execute("select * from blogs where date='$date' order by date DESC");
foreach ($rows as $row){
print render("/templates/blog_entry.php", $row);
}
function render($template, $param){
ob_start();
include($template);//How to pass $param to it? It needs that $row to render blog entry!
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
Любые идеи, как это сделать? Я действительно в тупике:) Есть ли другой способ визуализации шаблона?
Рассмотрим в том числе PHP файл, как если бы вы копировали код из include в позицию, в которой стоит include-statement. Это означает, что вы наследуете текущую область действия.
Итак, в вашем случае $param уже доступен в данном шаблоне.
$должен быть уже доступен внутри шаблона. Когда вы включаете() файл, он должен иметь ту же область, в которой он был включен.
from http://php.net/manual/en/function.include.php
Когда файл включен, код его содержит наследует область переменных линии, на которой включают имеет место. Любые переменные, доступные в эта строка в вызывающем файле будет доступный в вызываемом файле, из этот момент вперед. Однако все функций и классов, определенных в включенный файл имеет глобальную область действия.
Вы также можете сделать что-то вроде:
print render("/templates/blog_entry.php", array('row'=>$row));
function render($template, $param){
ob_start();
//extract everything in param into the current scope
extract($param, EXTR_SKIP);
include($template);
//etc.
Тогда $row будет доступна, но все равно будет вызываться $row.
Я использую следующие вспомогательные функции, когда я работаю на простых веб-сайтах:
function function_get_output($fn)
{
$args = func_get_args();unset($args[0]);
ob_start();
call_user_func_array($fn, $args);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
function display($template, $params = array())
{
extract($params);
include $template;
}
function render($template, $params = array())
{
return function_get_output('display', $template, $params);
}
выводит шаблон непосредственно на экран. render вернет его как строку. Он использует ob_get_contents для возврата напечатанного вывода функции.