我想基于特定文件夹中的文件使用PHP生成HTML,一切都适用于第一个文件,但如果我添加第二个文件,我只看到:
致命错误:无法在第4行的[path] .php中重新声明getTitle()(先前在[path]:3中声明)
我理解这个问题,但我不知道如何解决它。这是主文件的PHP代码:
foreach (glob("content/blog/*.php") as $file) {
require_once $file;
$index = str_replace("content/blog/", "", str_replace(".php", "", str_replace("img/", "", $file)));
?>
<div class="content">
<h3><?php getTitle() ?><span><?php getPublishedDate() ?></span></h3>
<p><?php getContent() ?></p>
</div>
<?php
$file = null;
}
?>
这是每个博客文件中的PHP代码:
<?php
function getTitle() {
echo "Lorem Ipsum 2!";
}
function getPublishedDate() {
echo "When Time has finally come";
}
function getContent() {
echo "<p>Text</p>";
}
?>
我搜索了include,include_once,require或require_once的对立面。我还尝试在再次调用foreach之前将变量设置回null。
感谢您提前提供任何帮助。
答案 0 :(得分:2)
定义一个类来存储有关一篇博文的信息。
@NonNull
@Valid
@Column(name = "type")
@Enumerated(EnumType.STRING)
private ServiceType type;
对于每篇博文,创建一个简单的php文件来设置它的不同属性
// name this file class.blogEntry.php
class blogEntry {
var $title;
var $publishedDate;
var $content;
public function getTitle() {
return $this->title;
}
public function setTitle($title) {
$this->title = $title;
}
public function getPublishedDate() {
return $this->publishedDate;
}
public function setPublishedDate($date) {
$this->publishedDate = $date;
}
public function getContent() {
return $this->content;
}
public function setContent($content) {
$this->content = $content;
}
}
修改输出以使用类和基于类的博客条目
$entry->setTitle("Lorem Ipsum 2!");
$entry->setPublishedDate("When Time has finally come");
$entry->setContent("<p>Text</p>");
答案 1 :(得分:1)
问题是你有几个文件,定义相同的函数getTitle
,你需要它们。
要求或包含*.php
文件就像将所有代码合并到一个文件中一样,这解释了错误,因为您需要n个文件,并且每个文件都定义了相同的函数。
您可以执行此类操作,而不是使用关联数组的函数。
<?php
// blog_file_1.php
$prop = array(
'title' => "This is file 1!",
'published_date' => "When Time has finally come",
'content' => "<p>Text</p>"
);
<?php
// blog_file_2.php
$prop = array(
'title' => "This is file 2!",
'published_date' => "When Time has finally come",
'content' => "<p>Text</p>"
);
<?php
// blog.php
foreach (glob("content/blog/*.php") as $file) {
require_once $file;
$index = str_replace("content/blog/", "", str_replace(".php", "", str_replace("img/", "", $file)));
?>
<div class="content">
<h3><?php echo $prop['title'] ?><span><?php echo $prop['published_date'] ?></span></h3>
<p><?php echo $prop['content'] ?></p>
</div>
<?php
$file = null;
}
?>
答案 2 :(得分:0)
我不确定这是否会对您有所帮助,但也许会帮助其他可能会遇到此问题的人,因为它符合我的要求。几天前,我一直在寻找确切的结果,并且对于使用简单的PHP脚本生成博客并没有太多发现。在搜索Stack以查找不同功能(将带有文件夹链接的库,PHP分页,从另一个PHP文件传递变量,排序文件)生成后,将它们放在一起并将其放在一起。
博客主页面的代码
\\Blog.php
<?php
$directory = "blog/folder/";
$blogfiles = glob($directory . "*.php");
usort($blogfiles, function($file_1, $file_2)
{
$file_1 = filectime($file_1);
$file_2 = filectime($file_2);
if($file_1 == $file_2)
{
return 0;
}
return $file_2 < $file_1 ? 1 : -1;
});
$post_count = 5;
$total_pages = ceil(count($blogfiles)/$post_count);
$page = $_REQUEST['page']; ///make it dyanamic :: page num
$offset = ($page-1)*$post_count;
$files_filter = array_slice($blogfiles, $offset,$post_count);
foreach ($files_filter as $blogfile) {
ob_start();
include "$blogfile";
ob_end_clean();
echo '<div class="blog-post"><a href="'.$blogfile.'"><img src="'.$BLOG_IMG.'"><h1
class="blog-title">' . $BLOG_TITLE . '</h1></a><br><p class="blog-summary">' .
$SUMMARY . '</p></div><hr>', "\n";
}
if($total_pages > 1){
if($page > 1){
echo '<div class="blog-pagination prev-page"><a href="blog.php?page='.($page-
1).'">Prev Page</a></div>';
}
if($page != $total_pages){
echo '<div class="blog-pagination next-page"><a href="blog.php?page='.
($page+1).'">Next Page</a><div class="blog-pagination">';
}
}
?>
这是博客文章模板
\\post1.php
<?php
$DOC_TITLE = "Document Title for browser tab";
$BLOG_TITLE = "Blog Post Title";
$SUMMARY = "Page summary";
$BLOG_IMG = "/Path/to/blog/image.jpg";
require $_SERVER['DOCUMENT_ROOT'] . '/header.php'; //Pre-made HTML header in the root folder - or just replace with HTML header
?>
\\content
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/footer.php'; //Pre-made HTML footer in the root folder - or just replace with HTML footer
?>