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');
        }

しかし、これは明らかに私がレガでゼンドのすべての利点を失うことを意味します

4

1 に答える 1

2

より良いアプローチは、CMSコードにファイルへの変更ごとにバージョン管理されたレイアウトスクリプトを記述させることだと思います。次に、データベースからアプリケーションに適切なレイアウトスクリプトを設定します。

バックアップと編集のためにロードするために、すべてのコードをデータベースに保存しますが、編集が終了したらファイルに書き込みます。

レイアウトデータベーステーブル

| id | layout | version | filename | content |
  • レイアウトにはページの識別子があります。
  • versionは、変更のたびに更新される自動インクリメント機能です
  • ファイル名は[レイアウト]-[バージョン]です
  • コンテンツはコンテンツです...

このテーブルに保存するとき。application / layout /[layout]-[version].phtmlのファイルにコンテンツを書き込みます

次に、ブートストラップでこの擬似コードを使用して、CMSで作成したページをロードします。

Bootstrap.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 に答える