【问题标题】:Zend Framework: what is the difference between partials and placeholdersZend 框架:部分和占位符有什么区别
【发布时间】:2012-03-01 16:20:43
【问题描述】:

在 Zend Framework 中,谁能解释部分和占位符之间的区别?

据我了解,可以同时使用占位符和部分渲染特定模板/容器。

在什么情况下应该使用部分占位符,什么场景是占位符的最佳使用?

【问题讨论】:

    标签: zend-framework partial placeholder


    【解决方案1】:

    这很简单,占位符用于在视图和布局之间保存数据,而部分用于在特定视图中执行特定任务。
    请参阅参考资料中的这些摘录。

    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 是在引导程序中设置的,但这并不简单。

    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>
    

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

    【讨论】:

    • 感谢您的解释。是否有两个用例的简单示例?我有一个要求,我需要在差异控制器和模块处填充国家下拉列表。那么,将模板保存在一个地方并在模块和控制器中重复使用它的最佳方式是什么?
    【解决方案2】:

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

    【讨论】:

    • 我想做的是从一个地方提供国家的动态数组,而不是从每个控制器的 preDispatch 提供。我的 dropdown.phtml 放在 /application/views/scripts 文件夹中,我想在我的不同模块和控制器中使用 zend 部分/占位符重用该 phtml。
    • 这是我的 dropdown.phtml 代码 countries) && count($this->countries)>0): ?> >
    猜你喜欢
    • 2012-06-14
    • 2011-02-02
    • 2013-03-23
    • 1970-01-01
    • 2019-06-05
    • 2022-10-13
    • 2017-04-26
    • 2010-10-17
    • 2011-04-15
    相关资源
    最近更新 更多