Как передать параметры шаблону PHP, представленному с помощью 'include'?

нужна ваша помощь с шаблонами PHP. Я новичок в PHP (я исхожу из Perl + Embperl). Во всяком случае, моя проблема проста:

  • У меня есть небольшой шаблон для рендеринга некоторого элемента, пусть это будет сообщение в блоге.
  • Единственный способ, которым я знаю использовать этот шаблон, – использовать директиву include.
  • Я хочу вызвать этот шаблон внутри цикла, проходящего через все соответствующие сообщения в блоге.
  • Проблема: мне нужно передать параметр (ы) в этот шаблон; в данном случае ссылку на массив, представляющий сообщение в блоге.

Код выглядит примерно так:

$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; } 

Любые идеи, как это сделать? Я действительно в тупик 🙂 Есть ли другой способ визуализации шаблона?

Related of "Как передать параметры шаблону PHP, представленному с помощью 'include'?"

Рассмотрим, в том числе, файл 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 для возврата напечатанного вывода функции.