我打算编写动态创建文章和新闻列表的功能,但不确切知道什么是正确的方法。
我有/articles
和/news
个文件夹,其中包含article1.php
,article2.php
等文件。
这些文件包含变量$date
(发布日期),$type
(新闻/文章),$h1, $h2
(标题,副标题),$short
(要显示的短缩略图)列表)。
我想在一个页面上显示这些文件的列表。
HTML:
<div>
$content <!--here goes list of all articles/news-->
</div>
是否会更好:
1
articlelist.php
中写入while循环:[pseudocode] $content = ""; while (get another filename from /articles) include filename $content .= (variables from filename.php parsed into html) display $content
newslist.php
。(使用这种方法,例如按日期排序文章可能很困难。)
或者也许:
2
articlearray.php
和newsarray.php
个文件,以key : value = $date : [$type, $h1, $h2, $short]
parsearray
函数,将整个给定数组解析为HTML(包含所有文件中的数据)$content = parsearray(...)
和articlelist.php
newslist.php
或者还有其他更好的解决方案吗?
修改
我没有任何数据库,因为文章/新闻非常少。如果它真的有必要,我会使用一个,但此刻请假设它应该用纯PHP完成。 (我也问这个问题是为了学习目的,不仅实用。)
答案 0 :(得分:2)
首先:建议管理您的内容和/或不同文件中的代码(为了更好的可理解性和可维护性),但不是强制性的。我会选择以下方法。将您的内容分成三个文件:
index.php
(包含“主要”功能)data.php
(包含数据)functions.php
(包含可调用函数)// index.php
require_once 'data.php';
require_once 'functions.php';
$allowedModules = array('articles', 'news');
if(empty($_GET['m']) || null === $_GET['m']) {
die('Module is required');
} else {
$module = $_GET['m'];
}
if(!in_array($module, $allowedModules)) {
die('Invalid module');
}
echo execute($module);
// data.php
$data = array(
'articles' => array(
array(
'date' => '2014-06-10',
'type' => 'article',
'h1' => 'My Headline #1',
'h2' => 'Subheadline #1',
'short' => 'My teaser'
),
array(
'date' => '2014-06-09',
'type' => 'article',
'h1' => 'My Headline #2',
'h2' => 'Subheadline #2',
'short' => 'My teaser'
)
),
'news' => array(
array(
'date' => '2014-06-08',
'type' => 'news',
'h1' => 'My News Headline #3',
'h2' => 'Subheadline #3',
'short' => 'My teaser'
),
)
);
// functions.php
function execute($module) {
global $data;
$content .= '<div>';
foreach($data[$module] as $item) {
$content .= '<span>' . $item['date'] . '</span>';
$content .= '<h1>'. $item['h1'] . '</h1>';
// $content .= ...
}
$content .= "</div>";
return $content;
}
现在,您可以通过index.php?m=articles
或index.php?m=news
致电您的信息页以显示您的文章或新闻。
旁注:这种方法使得以后在某种程度上可以轻松切换到数据库。