нужна ваша помощь с шаблонами 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 уже доступен в данном шаблоне.
Параметр $ param должен быть уже доступен внутри шаблона. Когда вы включаете () файл, он должен иметь ту же область, в которой он был включен.
с 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 для возврата напечатанного вывода функции.