0

我正在 Zend 之上构建一个 cms,只是为了练习和娱乐。我希望能够将布局脚本和视图脚本存储在数据库中,并从那里检索它们,以便在我的 CMS 中轻松编辑它们。有人能指出我正确的方向吗?我现在做的是这样的:

// Disable view
        $this->_helper->viewRenderer->setNoRender(true);
        $this->_helper->layout()->disableLayout();

    $pageDB = new Application_Model_DbTable_Page();
    $page = $pageDB->fetch($identifier);

         // Display the page or a 404 error
        if ($page !== null) {
            $this->view->headTitle($page->title);

            // Get the layout from the DB
            $layoutDB = new Application_Model_DbTable_Layout();
            $layout = $layoutDB->fetch($page->layout);

            $layout = str_replace('{LCMS:title}', $page->title, $layout->content);
            $layout = str_replace('{LCMS:content}', $page->content, $layout);

            $this->getResponse()->setBody($layout);
        } else {
            $this->_forward('notfound', 'error');
        }

但这显然意味着我在 rega 中失去了 Zend 的所有优势

4

1 回答 1

2

我认为更好的方法是让您的 CMS 代码在每次更改文件时编写版本化布局脚本。然后从数据库中为应用程序设置适当的布局脚本。

我仍然会将所有代码存储在数据库中以用于备份和加载以进行编辑,但在完成编辑后将其写入文件。

布局数据库表

| id | layout | version | filename | content |
  • layout 具有页面的标识符。
  • version 是一个自动增量器,每次更改都会更新
  • 文件名是 [布局]-[版本]
  • 内容就是内容……

当您保存到此表时。将内容写入 application/layout/[layout]-[version].phtml 中的文件

然后在您的引导程序中使用此伪代码来加载您在 CMS 中创建的页面。

引导程序.php

public function _initLayout() {
    $layoutDB = new Application_Model_DbTable_Layout();
    $layout = $layoutDB->fetch($page->layout);
    Zend_Layout::getMvcInstance()->setLayout($layout->filename);
}

这样,您可以将所有服务器端脚本保留在布局文件中,并使用占位符组件而不是 str_replace

于 2012-07-03T10:40:03.633 回答