【问题标题】:Partials in lithium锂成分
【发布时间】:2012-05-21 20:42:19
【问题描述】:

通常我使用 Zend 框架,这是我在 Lithium 中错过的东西。部分。视图中有一个渲染方法,您可以在其中使用我得到的最接近的“元素”。

<?php $this->_render('element', 'form); ?>

这确实有效,但它要求 form.html.php 文件位于 /views/elements 文件夹中。是否可以让它在另一条路径中搜索?与 /views/users/ 一样,它获取文件 /views/users/form.html.php。

我尝试了以下方法,因为我发现render method 确实接受一个选项参数,您可以在其中指定一个路径。所以我做了一个助手来为我解决这个问题。

namespace app\extensions\helper;
use lithium\template\TemplateException;

class Partial extends \lithium\template\Helper
{
public function render($name, $folder = 'elements', $data = array())
{
    $path = LITHIUM_APP_PATH . '/views/' . $folder;     
    $options['paths']['element'] = '{:library}/views/' . $folder . '/{:template}.{:type}.php';

    return $this->_context->view()->render(
        array('element' => $name),
        $data,
        $options
    );
}
}

但它仍然只在 /view/elements 文件夹中搜索,而不是在我指定的路径中搜索。

是不是我做错了什么?

【问题讨论】:

    标签: php templates view partials lithium


    【解决方案1】:

    当这些东西有望由 Lithium 完成时,为什么还要使用插件 :-)

    我不知道 Zend,但这里有一个示例,可以不同地配置元素默认路径,从相关视图文件夹加载它们,而不是从共享路径加载。

    让我们再添加一件事:我们希望通过在文件名后附加 un 下划线(模拟 Rails 部分)来区分元素/部分和普通视图。

    首先,在引导过程中重新配置 Media (config/bootstrap/media.php)

    Media::type('default', null, array(
        'view' => 'lithium\template\View',
        'paths' => array(
            'layout' => '{:library}/views/layouts/{:layout}.{:type}.php',
            'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
            'element'  => array(
                '{:library}/views/{:controller}/_{:template}.{:type}.php',
                '{:library}/views/elements/{:template}.{:type}.php'
            )
        )
    ));
    

    那么,使用它

    假设一个控制器Documents。调用视图:

    <?= $this->_render('element', 'foo', $data, array('controller' => 'documents')); ?>
    

    这将在views/documents/_foo.html.php 中查找文件,如果不存在,则回退到/views/elements/foo.html.php

    这种对框架默认值的简单重新配置,可以在 Lithium 中完成一堆东西(用于创建命名空间的默认控制器路径、视图路径、库等......)

    还有一个重新映射模板路径的示例,以便您可以使用 pages/users_{username}.php 之类的东西而不是 Lithium 默认值: https://gist.github.com/1854561

    【讨论】:

    • 像往常一样,该解决方案比想象的更简单/更容易且侵入性更小。 :)
    • 锂媒体类是它的主要功能之一。真的很强大
    【解决方案2】:

    有一个局部插件。 https://github.com/dmondark/li3_partials

    【讨论】:

      【解决方案3】:

      修复它。奇迹般有效。 Zend like Partials in Lithium。

      <?php
      
      namespace app\extensions\helper;
      
      use lithium\template\View;
      
      class Partial extends \lithium\template\Helper
      {
      
          public function render($name, $folder = 'elements', array $data = array())
          {
      
              $view = new View(array(
                  'paths' => array(
                      'template' => '{:library}/views/' . $folder . '/' . $name . '.{:type}.php'
                  )
              ));
      
              return $view->render('all', $data);
      
          }
      
      }
      

      可用于以下模板:

      <?php echo $this->partial->render('filename', 'foldername', compact('foo', 'bar')); ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多