2012-05-14 21 views
6

Thông thường tôi sử dụng khung công tác Zend và đây là thứ tôi nhớ trong Lithium. Partials. Có một phương thức render trong khung nhìn nơi bạn có thể sử dụng 'elements' gần nhất.Partials in lithium

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

Thao tác này yêu cầu tệp form.html.php nằm trong thư mục/views/elements. Có thể để cho nó tìm kiếm trong một con đường khác? Giống như/views/users/vì vậy nó nhận được tệp /views/users/form.html.php.

Tôi đã thử những điều sau, vì tôi phát hiện ra rằng render method chấp nhận một đối số tùy chọn trong đó bạn có thể chỉ định đường dẫn. Vì vậy, tôi đã thực hiện một người trợ giúp để khắc phục sự cố này cho tôi.

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 
    ); 
} 
} 

Tuy nhiên nó vẫn chỉ tìm kiếm trong thư mục/xem/yếu tố, không phải trong con đường tôi đã chỉ định.

Có điều gì tôi đang làm sai?

Trả lời

2

Đã sửa lỗi. Làm việc như một say mê. Zend như Partials trong 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); 

    } 

} 

có thể được sử dụng trong các mẫu như:

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

Tại sao sử dụng plugin khi công cụ này hy vọng có thể được thực hiện bằng Lithium :-)

Tôi không biết Zend, nhưng đây là một dụ để cấu hình các yếu tố đường dẫn mặc định khác nhau, để tải chúng từ quan điểm liên quan thư mục, thay vì đường dẫn được chia sẻ.

Và chúng ta hãy thêm điều thêm một: chúng tôi muốn phân biệt các yếu tố/partials từ một cái nhìn bình thường, bằng cách thêm un gạch tên của tập tin (Rails bắt chước partials)

Thứ nhất, cấu hình lại phương tiện trong bootstrap quá trình (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' 
     ) 
    ) 
)); 

Sau đó, sử dụng nó

Giả sử một bộ điều khiển Documents. Gọi một cái nhìn:

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

này sẽ tìm kiếm một tập tin bên trong views/documents/_foo.html.php và nếu không tồn tại, dự phòng để /views/elements/foo.html.php

Đây là loại đơn giản tái cấu hình mặc định khuôn khổ, có thể được thực hiện trong Lithium cho một loạt các nội dung (đường dẫn bộ điều khiển mặc định để tạo không gian tên, đường dẫn lượt xem, thư viện, v.v ...)

Một ví dụ khác để tái bản đồ đường dẫn mẫu của bạn để bạn có thể có các thứ như pages/users_{username}.php thay vì mặc định Lithium: https://gist.github.com/1854561

+0

Như thường lệ, giải pháp đơn giản/dễ dàng hơn và ít xâm nhập hơn là đến với tâm trí. :) – Oerd

+0

Lớp lithium Media là một trong những tính năng chính của nó. Nó thực sự là mạnh mẽ –

Các vấn đề liên quan