自动博客 - 多个PHP函数声明?

时间:2015-12-02 09:34:08

标签: php html

我想基于特定文件夹中的文件使用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。

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

3 个答案:

答案 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
    ?>