从PHP类生成页面

问题描述 投票:3回答:8

我实际上是为了娱乐而创建网站,我的一些朋友告诉我,如果我可以使用代表整个页面的php类来创建页面的输出,则可以提高效率。

我想知道你们的人民会怎么做。

谢谢

php class code-generation
8个回答
1
投票

我建议您研究一些PHP框架,例如对初学者来说很不错的Cake,或者,如果您比较熟练,可以使用Symfony或Zend框架。这些将大大简化您的PHP开发。


8
投票

我不是OO程序员..但是,作为概念证明,根据您的问题,您可以做/尝试类似的事情。

class Page {
    public $meta_title;
    public $meta_keywords;
    public $html_body;

    public function displayPage() {
        $page ='
        <html>
        <head>
            <title>'.$this->meta_title.'</title>
            <meta name="keywords" content="'.$this->meta_keywords.'" />
        </head>
        <body>
            '.$this->html_body.'
        </body>
        </html>
';
        echo $page;
    }
}

然后您仅将此Page类用作..

$page = new Page();
$page->meta_title ="Hello world!";
$page->meta_keywords = "some text keywords";
$page->body = '<h1>Contact Us </h1>
<p>you can contact us at blah ... blah .. etc.</p>
<address>Dummy Address </address>
';

$page->displayPage();

[请注意,您可以向其中添加很多内容,例如..类变量(类型数组)以定义样式表,javascript文件。然后,您只需循环遍历即可为各个页面动态定义这些文件。

您可以修改显示页面功能,使其适应左侧,右侧或顶部导航栏。然后,您还可以使用$ show_right_bar,$ show_left_bar之类的变量来控制哪些页面显示哪个侧面导航栏。因此,您可以修改并扩展到您的要求。

或者,您可以尝试一些php框架,这些框架是经过改进的解决方案,但这实际上取决于您的编程技巧和要求。

希望这会有所帮助。


0
投票

您可以做的是将页面中的所有标签存储为多维数组。 PHP足够糊状,可以做到这一点。这样,每个标签都将存储在数组的元素中。然后,您可以使用控制语句根据特定条件在不同时间打印页面的不同部分。看起来有点像将XML文件转换为数组时所得到的。这就是我的想法。

$page['html']['title'] = "Page's Title";
$page['body']['p'][1] = "1st Paragraph";
$page['body']['p'][2] = "2nd Paragraph";

然后您可以使用自己的函数将它们打印为HTML字段。


0
投票

我建议使用某些MVC(模型,视图,控制器)框架,例如KohanaPHP。本质上就是这个。您在严格的面向对象的环境中工作。在Kohana中的一个简单页面,完全由一个类构建,如下所示:

class Home_Controller extends Controller
{
  public function index()
  {
    echo "Hello World";
  }
}

然后您将通过访问您的URL,类名和方法名来访问该页面:

http://www.mysite.com/home/index()可以在home /之后调用,但是是隐式的)]

[当您开始希望引入数据库活动时,您将开始使用另一个称为Model的类。这将包含与数据库交互的方法,如下所示:

class Users_Model extends Model
{
  public function count_users()
  {
    return $this->db->count_records('users');
  }
}

请注意,我没有编写自己的查询。 Kohana带有直观的Query Builder

该方法将在您的Controller中调用,这是我们在此解决方案开始时提到的第一个类。看起来像这样:

class Home_Controller extends Controller
{
  public function index()
  {
    $usersModel = new Users_Model;
    $userCount = $usersModel->count_users();

    echo "We have " . $userCount . " users!";
  }
}

最终,您将需要更复杂的布局,其中涉及HTML / CSS / Javascript。此时,您将引入“ Views”,它只是表示层。无需从Controller内部调用echoprint,而是可以加载视图(本质上是HTML页面)并向其传递一些变量:

class Home_Controller extends Controller
{
  public function index()
  {
    $myView = new View("index");
    $usersModel = new Users_Model;
    $userCount = $usersModel->count_users();

    $myView->userCount = $userCount;
    $myView->render(TRUE);
  }
}

将加载以下“视图”的人

<p>We have <?php print $userCount; ?> users!</p>

这应该足以让您入门。使用MVC样式确实很干净,并且非常有趣。


0
投票

确实有很多方法可以做到这一点。

[当我制作一个简单的个人网站时,通常在顶部有一个横幅,在一侧有一个菜单。为了防止自己不得不复制所有内容,我的index.php检查了一个get变量,并根据该get变量在中间加载了适当的内容。举例来说,我的index.php。我的菜单实际上是通过函数加载内容的,但这不是必需/推荐的:

<?php

$page = strtolower($_GET['page']);
if(!isset($page) || $page === '')
{
    $page="home";
}

switch($page)
{
    case "loomis":
        require_once("loomis.php");
        break;
    case "home":
    default:
        $page = "home";
        require_once("home.php");
        break;
}

include "menu.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Nebulous - <?php getTitle($page) ?></TITLE>
<link href="style.css" rel="stylesheet" type="text/css" />
</HEAD>

<body>
<?php displayMenu() ?>
</body>
</html>

类实际上仅作为数据或功能的表示,而对呈现页面没有作用。


0
投票

OOP在页面呈现中很有用,如果您在整个页面中都有静态内容。 (例如,页眉,页脚)

$index = new Page();
$index->displayHeader();
// php/html per needs
$index->displayFooter();

这并不是那么直观,但正如其他人所说,可能性是巨大的。我建议找一本关于这个主题的书。


0
投票

实现目标的最佳方法是从html类开始。其目的是编写任何HTML标记并正确缩进它们。这不是一个简单的任务,因为我几乎没有在网络上找到一个正确编写的此类html类。提示:您将需要一个堆栈来管理HTML标签的自动关闭,并需要一个用于当前标签的工作缓冲区,该缓冲区将滚动到更大的保留缓冲区中。

使用html类的服务,您可以构建一个将通过设置创建页面的网页类。这里的窍门是保持灵活性,而不是在类中进行过多的硬编码。您需要一个用于基本设置的设置程序,例如标题,作者,关键字等,并将它们保存在一个数组中。然后webpage-> header()应该自动输出页面顶部。然后,您应该使用诸如webpage-> heading($ string,$ size)之类的功能来创建标题,webpage-> paragraph($ text),webpage-> image()等。最后,您只需要webpage-> footer()。

要使网页类值得,请使其也创建CSS。例如,如果要使用引导程序,则可以让类包含CSS并设置代码样式。请注意,您还可以使webpage类创建高级对象,例如webpage-> breadcrumbs()或webspage-> pagination()


0
投票

我有完全相同的想法,找不到任何现代的OO PHP库来完成我想要的事情。我还想使用Foundation CSS framework,所以我编写了自己的PHP库,并且已经使用了多年。设置基本页面和菜单后,制作页面非常容易。在Packagist.org上签出。我还写了一个PHP documentor库,因为我不喜欢现有的任何静态生成软件包及其复杂的设置。看一下PHPFUI.com,了解正在使用的库的示例。如果需要,可通过HTML验证器运行HTML。非常干净,因为在构建网站时没有人碰过HTML。

© www.soinside.com 2019 - 2024. All rights reserved.