我正在努力尝试在页面上显示表格中的所有条目但是我希望它完成,以便我有“functions.php”获取数据并将其全部循环,但之后只需要一个简单的包含在page.php。
中的某种(不使用include或require等)所以基本上page.php可以作为模板文件,如果有意义的话,函数文件将是所有代码编写和整理等等的地方?
到目前为止,我已经按照我的意愿从表中提取信息了,但是我不知道在page.php中循环它时我会怎么做。
如果我可以将{DISPLAY_POSTS}放在page.php中并且它可以正常工作,那就太棒了,但这真的只是一厢情愿的想法。可以这样做,phpBB团队为论坛软件做了这件事,但我确信它更复杂。
我从表中获取数据的代码是......
$posts = mysqli_query($sql, "SELECT * FROM " . $dbprefix . "posts") or die($posts . "<br/>" . mysqli_error());
while($postsData = mysqli_fetch_array($posts)) {
$data1 = $postsData['post1'];
$data2 = $postsData['post2'];
}
谢谢!
P.S。你可能已经从之前的帖子中猜到了,我是StackOverflow的新手,而且我是PHP的初学者,所以有些事情可能会让我头疼。
答案 0 :(得分:1)
如果您想使用单个短代码输出模板页面上的所有循环数据,那么您必须合并所有循环数据..
$posts = mysqli_query($sql, "SELECT * FROM " . $dbprefix . "posts") or die($posts . "<br/>" . mysqli_error());
while($postsData = mysqli_fetch_array($posts)) {
$data1.=$postsData['post1'];
$data2.=$postsData['post2'];
}
echo $data1;
echo $data2;
现在尝试在模板页面上添加短代码。
答案 1 :(得分:1)
首先,您的代码将导致$data1
和$data2
仅包含表格最后一行的信息,因为您在每次迭代中都会覆盖变量。为了防止这种情况,你应该这样做:
$posts = []; // this is where a new array is created
while($postsData = mysqli_fetch_array($posts)) {
$posts[] = $postsData; // adds the current record to the array
}
将为您提供包含所有帖子的二维数组。
其次,要将逻辑与演示文稿分开,您可以使用TWIG之类的模板引擎。引擎需要template并插入数组中的数据以呈现完整的结果。模板page.twig
的示例如下:
<ul>
{% for item in posts %}
<li>{{ post.data1 }} - {{ post.data2 }}</li>
{% endfor %}
</ul>
page.php
只会包含使用$posts
中的数据呈现模板的说明:
echo $twig->render('page.twig', array('posts' => $posts));
有关详细信息,请参阅TWIG的文档。
逻辑和表述的分离总体上涵盖了广泛框架所涉及的许多方面。最常见的方法是模型 - 视图 - 控制器或MVC,它可能会为您指出更高级的信息。