Nasıl ile render PHP şablona parametreleri geçirmek için 'include'?

3 Cevap php

PHP çiftleşmiş ile yardıma ihtiyacım var. Ben PHP için yeni kulüpler (Perl + Embperl geliyorum). Neyse, benim sorunum basit:

  • Bazı öğeyi işlemek için küçük bir şablon var, bir blog yazısı olsun.
  • Ben bu şablonu kullanmak bilmek tek yolu yönergesi 'include' kullanmaktır.
  • Ben tüm ilgili blog mesaj geçiyor bir döngü içinde bu şablonu aramak istiyorum.
  • Problem: Ben bu şablona bir parametre (ler) geçmek gerekir; bir blog yazısı temsil diziye bu durumda referans.

Kod şöyle:

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

Herhangi bir fikir bunu gerçekleştirmek nasıl? Gerçekten stumped :) bir şablon işlemek için başka bir yolu var mı?

3 Cevap

Eğer dahil-deyim duruyor pozisyona dahil gelen kodu kopyala-yapıştırma sanki bir PHP dosyası dahil düşünün. Bu akım scope miras anlamına gelir.

Yani, senin durumunda, $ param verilen şablonda zaten mevcuttur.

$ Param şablon içinde zaten mevcut olmalıdır. Eğer () Bir dosya eklediğinizde o dahil nereye kadar aynı kapsam olmalıdır.

dan http://php.net/manual/en/function.include.php

When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward. However, all functions and classes defined in the included file have the global scope.

Ayrıca böyle bir şey yapabilirsiniz:

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);
   include($template);
   //etc.

Sonra $ satır mevcut olacaktır, ama yine de $ satır denir.

Ben basit web siteleri üzerinde çalışırken ben aşağıdaki yardımcı işlevlerini kullanın:

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

doğrudan ekrana çıktısı şablonu görüntüler. hale bir dizge olarak dönecektir. Bir fonksiyonun yazdırılan çıktıyı dönmek için ob_get_contents kullanır.