Zend Framework:部分和占位符之间的区别是什么

时间:2012-02-09 07:08:54

标签: zend-framework partial placeholder

在Zend Framework中,有人可以解释部分和占位符之间的区别吗?

根据我的理解,可以使用占位符和部分来渲染特定的模板/容器。

在哪种情况下应该使用部分情况,哪种情况最适合占位符?

2 个答案:

答案 0 :(得分:8)

非常简单,placholder用于在视图和布局之间保留数据,而部分用于特定视图以执行特定任务。
请参阅参考文献的这些摘录。

  

77.4.1.6。占位符助手:占位符视图助手用于在视图脚本和视图实例之间保留内容。它也是   提供一些有用的功能,如聚合内容,捕获   查看脚本内容供以后使用,并添加前后文本   内容(以及聚合内容的自定义分隔符)。

     

77.4.1.5。部分帮助程序:部分视图帮助程序用于在其自己的变量范围内呈现指定的模板。主要用途是   对于可重用的模板片段,您不必担心   关于变量名称冲突。此外,它们允许您指定   来自特定模块的部分视图脚本。

这是一个占位符的简单示例,听起来像你想要的。 (保留数据)

<?php
//this is placed in my layout above the html and uses an action helper
//so that a specific action is called, you could also use view helpers or partials
$this->layout()->nav = $this->action('render', 'menu', null,
        array('menu' => $this->mainMenuId))
?>


    <div id="nav">
        //Here the placeholder is called in the layout
        <?php echo $this->layout()->nav ?>&nbsp;
    </div>

在这种情况下,菜单ID是在bootstrap中设置的,但是这并不简单。这只是简单的。

protected function _initMenus() {

        $view = $this->getResource('view');
        $view->mainMenuId = 4;
        $view->adminMenuId = 5;
    }

<强> [编辑]

我认为更好的占位符示例可能是有序的。这个占位符是一个小搜索表单,我在几个不同配置的控制器中的几个动作中使用。

在此配置中,此表单设置为仅搜索音乐艺术家,使用此占位符的控制器将具有setAction()的不同路径,不同的标签以及有时不同的占位符文本。我使用相同的表格搜索音乐和视频数据库。

我总是使用相同的设置或者更喜欢这样做,然后我可以将其设置为插件。

//in the controller 
public function preDispatch() {
        //add form
        $searchForm = new Application_Form_Search();
        $searchForm->setAction('/admin/music/update');
        $searchForm->query->setAttribs(array('placeholder' => 'Search for Artist',
            'size' => 27,
        ));
        $searchForm->search->setLabel('Find an Artist\'s work.');
        $searchForm->setDecorators(array(
            array('ViewScript', array(
                    'viewScript' => '_searchForm.phtml'
            ))
        ));
        //assign form to placeholder
        $this->_helper->layout()->search = $searchForm;
    }

我在布局中使用占位符(也可以在任何视图脚本中使用)。当占位符具有值时呈现搜索表单,而当占位符没有值时不呈现搜索表单。

//in the layout.phtml
<?php echo $this->layout()->search ?>

并且只是为了完成,这里是表单用作viewscript装饰器的部分。

<article class="search">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th><?php echo $this->element->query->renderLabel() ?></th>
            </tr>
            <tr>
                <td><?php echo $this->element->query->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->search ?></td>
            </tr>
        </table> 
    </form>
</article>

这个例子应该真正说明部分和占位符之间的区别。

答案 1 :(得分:1)

我认为对您来说可能更有帮助的是自定义视图助手,可能会扩展现有的 Zend_View_Helper_FormSelect 类或创建适合的自定义 Zend Form元素您的需求。或者,位于一般位置的帮助程序脚本可能是最好的选择。