1

別のページから呼び出されるビューにページ (ページは独自のテンプレートを使用) を追加したいと考えています。

これは機能し、データを取得しますが、blog.php の 3 つのコピーが index.php に表示されます。これがなぜこれを行うのかわかりません。

index.php:

<?php
class page_index extends Page {
    function init(){
        parent::init();
        $p=$this;

        $p=$this->add('View',null,null,array('view/home'));
        $p->template->tryset('pageblog',$this->add('page_blog'));

    }
}

home.html (index.php によって呼び出されます):

<div>
<?$pageblog?>
</div>

blog.php:

<?php
class page_blog extends Page {
    function init(){
        parent::init();
        $page=$this;

        //Get Articles
        $articles=$this->add('Model_News')->getRows();

        $page->add('H1')->set('Latest News');

        foreach($articles as $article){
            $content=$this->add('view',null,null,array('view/blog'));
            $content->template->set('title',$article['title']);
            $content->template->set('content',$article['content']);
        }

    }
}

blog.html (blog.php のテンプレート)

<div>
<h3><?$title?></h3>
<p><?$content?></p>
<hr>
</div>
4

1 に答える 1

2

わかりました、ここにはいくつかの基本事項がありません。

  1. ページを追加しません。ApiFrontend がそれを行います。
  2. defaultTemplate() を使用してそのようなビューを追加する必要なく、既存のページのテンプレートを定義できます。
  3. オブジェクトにオブジェクトを追加すると、スポットに配置できます。オブジェクトをテンプレートに手動で挿入するのは、良いことではありません。
  4. そのようなエントリを表示するには、lister を使用できます。

ページ/index.php

class page_index extends Page {
    function init(){
        parent::init();
        $this->add('MVCLister',null,'News','News')->setModel('News');

    }
    function defaultTemplate(){
        return array('page/home');  // separate pages from views to avoid mess in templates
    }
}

テンプレート/デフォルト/ページ/home.html:

<div>
<h1>My Blog page</h1>
<p>Welcome to my blog</p>
<hr/>
 <?News?>
   <?rows?>
   <?row?>
   <div><h3><?$title?></h3>
   <?$content?>
   </div>
   <?/row?>
   <?/rows?>
 <?/News?>
</div>

ここで、MVCLister についてコメントする必要があります。MVCGrid に似ていますが、デフォルトではテンプレートがないため、指定する必要があります。3 番目の引数は、ニュースをページのどこに表示するかを定義します。4 番目の引数はテンプレートで、通常は "array(...)" として指定します。配列なし - 親テンプレートからチャンクを取り出します。したがって、この場合、MVCLister に使用するコンテンツを取得し、コンテンツを同じタグに戻し、現在そこにあるものを置き換えます。

MVCLister はそのテンプレートで を探し、それを十分な回数繰り返し、結果を に入れます。内部のタグはすべて、モデル フィールドに正確な名前で自動的に割り当てられます。

タイピングの手間を大幅に省けます:)

于 2011-09-08T11:11:01.313 に答える