【问题标题】:Include file/template foreach user为每个用户包含文件/模板
【发布时间】:2013-05-28 08:36:27
【问题描述】:

我正在尝试为每个用户加载一个“模板”文件。

文件为每个用户加载,所以如果我有 2 个用户,它会加载两次,但是变量 $user['profileimg']$user['name'] 没有。

我不知道为什么这不起作用,而且我觉得这可能是一种不好的做法。所以我的问题是:我如何让它工作/我应该如何做这样的事情。

提前感谢您提供的任何帮助。

这是我现在得到的代码:

类:

class Cprint 
{
    public static function Template($name, $path = 'template')
    {
         include ROOT_DIR . '/' . $path . '/' . $name . '.php';
    }
}

page.php

foreach($Users->getAll() as $user)
{
   Cprint::Template('userlist_template');
}

userlist_template.php:

<div class="userholder">
   <img class="profileimg" src="<?php echo $user['profileimg'] ?>"/>
   <p><?php echo $user['name'] ?></p>
</div>

【问题讨论】:

  • $user['profileimg'] and $user['name'] does not. 没有什么?
  • 如果我检查 html 它应该是

    username

    但它是

  • 为什么要为每个用户加载一个模板?我想你想要做的是为每个用户加载一个看起来不同的模板?

标签: php templates variables include


【解决方案1】:

这是因为 foreach 循环不会将 $user 数据传输到模板。

您需要将 $user 数据传递给模板方法:

为了更好地解释,静态方法Template 需要一个额外的参数($users)。然后Cprint::Template() 方法需要将$user 数组作为第二个参数传递给Template() 方法

class Cprint 
{
    public static function Template($name, $path = 'template', $user= array())
    {
        include ROOT_DIR . '/' . $path . '/' . $name . '.php';
    } 
}

Page.php

foreach($Users->getAll() as $user)
{
   Cprint::Template('userlist_template', $user);
}

【讨论】:

  • 这行得通,有没有办法我不必在课堂上指定 $user,所以我也可以在其他东西上使用它?
  • 我不这么认为,我的建议是将方法声明中的$user = array() 更改为$data = array(),然后在userlist_template.php 文件中,将变量名从$user 更改为@ 987654331@。这至少可以让您将任何数据传递给Template() 方法
  • 我认为您目前的做法是最合乎逻辑的,我猜Template() 方法旨在包含一个 PHP 页面。事实上,你这样做的方式是我自己的模板 API 的一个非常简化的版本。在我自己的对象中,我有一个 template() 方法,我将模板文件的路径作为第一个参数传递,所有数据变量作为第二个参数中的数组传递。
  • 不幸的是,文件本身非常大,并且与站点内的其他模块高度集成,这使得它作为一个文件本身毫无意义!不过我想说的是,在设计模板引擎时,要好好设计它并深思熟虑!它可能是网站中更重要的部分之一(如果您沿着模板路线走)。
【解决方案2】:

当您执行include 时,包含的脚本看到的变量是相对于其调用范围的

因此,由于您在 Cprint 的静态函数中调用它,因此只能看到该函数范围内的变量。

你需要做的是传递用户

public static function Template($user,$name, $path = 'template')
{
     include ROOT_DIR . '/' . $path . '/' . $name . '.php';
}

适当地称呼它

foreach($Users->getAll() as $user)
{
   Cprint::Template($user,'userlist_template');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多