добавить страницу в шаблон / представление - PullRequest
1 голос
/ 08 сентября 2011

Я хочу добавить страницу (страница использует свой собственный шаблон) в представление, которое вызывается другой страницей.

это работает, и я получаю данные, однако я получаю 3 копии файла blog.php, который отображается на 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>

1 Ответ

2 голосов
/ 08 сентября 2011

Хорошо, здесь вам не хватает некоторых основ.

  1. Вы не добавляете страницы. ApiFrontend делает это для вас.
  2. Вы можете определить шаблон для вашей существующей страницы, без необходимости добавлять подобное представление, используя defaultTemplate ()
  3. Когда вы добавляете объект в объект, вы можете поместить его в точку. Если вы вручную вставляете объект в шаблон, это не очень хорошая вещь.
  4. Вы можете использовать листер для отображения таких записей.

страница / 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-й аргумент определяет, где вы хотите, чтобы новости отображались на странице. Четвертый аргумент - это шаблон, который вы обычно указываете как «массив (...)». Без массива - он берет кусок из родительского шаблона. Так что в этом случае мы берем содержимое, используемое для MVCLister, и помещаем содержимое обратно в тот же тег, заменяя то, что у вас есть прямо сейчас.

MVCLister ищет в своем шаблоне, повторяет его достаточно много раз и помещает результат в. Любые теги внутри будут автоматически назначены полям модели с точным именем.

Экономит вас много печатать:)

...