首页 文章

Zend框架中的布局

提问于
浏览
-1

我曾经制作自己的布局来管理索引页面内的加载页面

<div id="content">
            <ul>
                <li><a href="<?php echo $this->url(array('module' => 'visits', 'controller' => 'visit', 'action' => 'index', 'page' => 'view'), NULL, TRUE); ?>" class="showVisists">Display all visits</a></li>
                <li><a href="<?php echo $this->url(array('module' => 'visits', 'controller' => 'visit', 'action' => 'index', 'page' => 'add'), NULL, TRUE); ?>" class="addVisit">Add new visit</a></li>
            </ul>

            <span class="result"><?php echo $this->message ?></span>
            <div id="innerpage">
             <?php include_once($this->pageToInclude . ".phtml") ?>
            </div>
        </div>

当我从导航中选择锚点时,通过控制器索引操作接收参数,该操作选择我必须包含的页面并将其返回到索引页面以便可以查看页面 .

public function indexAction() {
    $status = $this->getRequest()->getParam('page');
    switch ($status) {
        case 'view':
            $pageToInclude = 'get-visits';
            break;
        case 'add':
            $pageToInclude = 'add';
            break;
   default:
            $pageToInclude = 'get-visits';

    }

    $this->view->pageToInclude = $pageToInclude;
}

现在我想使用Zend框架支持的布局 .

我启用了布局并将索引中的所有内容复制到layout.phtml .

当我在布局中包含页面时发生错误 . 我知道我不应该在Zend框架中使用 includes 甚至 require ,但是当我点击布局页面内的锚"Display all visits"时,我不知道如何显示"get all visits"的视图 .

我想做这样的事情:

<div id="innerpage">
               <?php echo $this->layout()->content; ?>

            </div>

但是我应该如何动态指定内容?

注意:我是Zend框架的新手,还不熟悉如何有效地使用它 .

2 回答

  • 1

    嗯你的问题不是100%清除 . 它是基于AJAX的吗?

    非基于Ajax:

    只需从导航链接到您的控制器操作,而不是相应的“.phtml”视图在“内容区域”中重新编辑:

    // reders: view/scripts/index/addvisit.phtml
    public function addvisitAction 
    {
    
    }
    

    在导航中 Build 链接的最佳方式是“url”帮助:

    <?php
    
    $linkToAllVisits = $this->url(array(
        'controller' => 'index',
        'action'     => 'addvisits',
        'module'     => 'default'
    ));
    
    ?>
    
    <div id="navi">
        <li><a href="<?php echo $linkToAllVisits; ?>">AllVisits</a></li>
    </div>
    

    如果你想用ajaxRequest加载内容(我想你想这样做),只需打开相同的控制器操作,如上例所示,但禁用此操作的布局:

    // reders: view/scripts/index/addvisit.phtml
    public function addvisitAction 
    {
        // disable layout and return only .phtml
        $this->_helper->layout->disableLayout();
    
    }
    

    顺便说一句,如果你想使用带有“ - ”的Actionnames,你必须在CamelCase中命名这样的Actions:

    // add-visits with add-visits.phtml
    puhlic function addVisitsAction()
    {}
    
  • 0

    我认为这是你问题的关键部分:

    <?php include_once($this->pageToInclude . ".phtml") ?>
    

    然后你可以使用视图的 render() 方法实现相同的功能:

    <?php echo $this->render($this->pageToInclude . ".phtml") ?>
    

    您必须确保.phtml页面位于 render() 的允许路径中 . 如果它只是同一控制器中常规操作的视图脚本,则它应该已经在路径中 .

相关问题