https://github.com/windwalker-io/windwalker-view
[READ ONLY] Subtree split of Windwalker Framework
https://github.com/windwalker-io/windwalker-view
Last synced: 2 months ago
JSON representation
[READ ONLY] Subtree split of Windwalker Framework
- Host: GitHub
- URL: https://github.com/windwalker-io/windwalker-view
- Owner: windwalker-io
- Created: 2014-09-21T16:21:51.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-04-02T05:37:50.000Z (about 10 years ago)
- Last Synced: 2025-01-02T06:44:55.270Z (over 1 year ago)
- Language: PHP
- Homepage: https://github.com/ventoviro/windwalker
- Size: 13.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Windwalker View
## Installation via Composer
Add this to the require block in your `composer.json`.
``` json
{
"require": {
"windwalker/view": "~2.0"
}
}
```
## Create A Simple View
### AbstractView
`AbstractView` is very simple, it only need a render method to render what you want.
``` php
use Windwalker\View\AbstractView;
class MyView extends AbstractView
{
public function render()
{
$tmpl = <<data['foo']));
}
}
// Create view and set data
$view = new MyView;
$view->set('foo', 'World');
$view->render();
```
The Result will be:
``` html
The is a Markdown Article
Hello World~~~!
```
### SimpleHtmlView
`SimpleHtmlView` can set a php file to render:
``` php
use Windwalker\View\SimpleHtmlView;
class MyHtmlView extends SimpleHtmlView
{
public function prepare($data)
{
// Format dome data
$data['time'] = $data['time']->format('Y-m-d H:i:s');
$data['link'] = '/flower/' . OutputFilter::stringUrlSafe($data['name']) . '.html';
}
}
$view = new MyHtmlView;
$view->set('time', new DateTime);
$view->set('name', $name);
$view->setLayout('/path/to/template.php')->render();
```
The template file:
``` php
Now is: escape($time); ?>
I'm:
escape($data['name']); ?>
```
## HtmlView
`HtmlView` is more powerful than `SimpleHtmlView`, we can set [Renderer](https://github.com/ventoviro/windwalker-renderer)
as a render engine into it, and find template in several paths.
``` php
use Windwalker\View\HtmlView;
$paths = new SplPriorityQueue;
$paths->insert('path/of/system', 300);
$paths->insert('path/of/theme', 500);
$data = array(
'time' => new DateTime
);
$view = new HtmlView($data, new PhpRenderer($paths));
$view->setLayout('foo')->render(); // Will find foo.php in every paths.
```
See also: [Windwalker Renderer](https://github.com/ventoviro/windwalker-renderer)
### Extends It
``` php
use Windwalker\View\HtmlView;
use Windwalker\Renderer\BladeRenderer;
// A Blade View
class BladeHtmlView extends HtmlView
{
public function __construct($data = array(), BladeRenderer $renderer = null)
{
$renderer = $renderer ? : new BladeRenderer('default/path', array('cache_path' => 'cache/path'))
parent::__construct($data, $renderer);
}
}
// View for different MVC structures
class ArticleHtmlView extends BladeHtmlView
{
public function prepare($data)
{
$data['time'] = $data['time']->format('Y-m-d H:i:s');
}
}
$view = new MyHtmlView;
$view->['time'] = new DateTime; // Use array access
$view->setLayout('template')->render(); // Will find template.blade.php
```
### The Data object
HtmlView use `Windwalker\Data\Data` as data store, we don't need to worry about data exists or not.
``` php
title; // Also support object access.
```
See [Windwalker Data](https://github.com/ventoviro/windwalker-data)
## JsonView
JsonView use Registry as data store, we can separate different level by dot(.).
``` php
$view = new JsonView;
$view['foo.bar'] = 'baz';
$view->render();
```
The result will be:
``` json
{
"foo": {
"bar": "baz"
}
}
```