Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
5a6c5ccb
Commit
5a6c5ccb
authored
Mar 23, 2013
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finished ContentDecorator.
parent
a5ee5b84
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
86 deletions
+62
-86
View.php
framework/base/View.php
+29
-31
ContentDecorator.php
framework/widgets/ContentDecorator.php
+33
-55
No files found.
framework/base/View.php
View file @
5a6c5ccb
...
...
@@ -119,7 +119,9 @@ class View extends Component
}
$oldContext
=
$this
->
context
;
$this
->
context
=
$context
;
if
(
$context
!==
null
)
{
$this
->
context
=
$context
;
}
if
(
$this
->
renderer
!==
null
)
{
$output
=
$this
->
renderer
->
render
(
$this
,
$viewFile
,
$params
);
...
...
@@ -276,6 +278,7 @@ class View extends Component
* @param boolean $renderInPlace whether to render the clip content in place.
* Defaults to false, meaning the captured clip will not be displayed.
* @return \yii\widgets\Clip the Clip widget instance
* @see \yii\widgets\Clip
*/
public
function
beginClip
(
$id
,
$renderInPlace
=
false
)
{
...
...
@@ -294,6 +297,31 @@ class View extends Component
$this
->
endWidget
();
}
/**
* Begins the rendering of content that is to be decorated by the specified view.
* @param string $view the name of the view that will be used to decorate the content enclosed by this widget.
* Please refer to [[View::findViewFile()]] on how to set this property.
* @param array $params the variables (name=>value) to be extracted and made available in the decorative view.
* @return \yii\widgets\ContentDecorator the ContentDecorator widget instance
* @see \yii\widgets\ContentDecorator
*/
public
function
beginContent
(
$view
,
$params
=
array
())
{
return
$this
->
beginWidget
(
'yii\widgets\ContentDecorator'
,
array
(
'view'
=>
$this
,
'viewName'
=>
$view
,
'params'
=>
$params
,
));
}
/**
* Ends the rendering of content.
*/
public
function
endContent
()
{
$this
->
endWidget
();
}
//
// /**
// * Begins fragment caching.
...
...
@@ -336,33 +364,4 @@ class View extends Component
// $this->endWidget();
// }
//
/**
* Begins the rendering of content that is to be decorated by the specified view.
* @param mixed $view the name of the view that will be used to decorate the content. The actual view script
* is resolved via {@link getViewFile}. If this parameter is null (default),
* the default layout will be used as the decorative view.
* Note that if the current controller does not belong to
* any module, the default layout refers to the application's {@link CWebApplication::layout default layout};
* If the controller belongs to a module, the default layout refers to the module's
* {@link CWebModule::layout default layout}.
* @param array $params the variables (name=>value) to be extracted and made available in the decorative view.
* @see endContent
* @see yii\widgets\ContentDecorator
*/
public
function
beginContent
(
$view
,
$params
=
array
())
{
$this
->
beginWidget
(
'yii\widgets\ContentDecorator'
,
array
(
'view'
=>
$view
,
'params'
=>
$params
,
));
}
/**
* Ends the rendering of content.
* @see beginContent
*/
public
function
endContent
()
{
$this
->
endWidget
();
}
}
\ No newline at end of file
framework/widgets/ContentDecorator.php
View file @
5a6c5ccb
<?php
/**
* CContentDecorator class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright
2008-2013
Yii Software LLC
* @copyright
Copyright (c) 2008
Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
yii\widgets
;
use
Yii
;
use
yii\base\InvalidConfigException
;
use
yii\base\Widget
;
use
yii\base\View
;
/**
* CContentDecorator decorates the content it encloses with the specified view.
*
* CContentDecorator is mostly used to implement nested layouts, i.e., a layout
* is embedded within another layout. {@link CBaseController} defines a pair of
* convenient methods to use CContentDecorator:
* <pre>
* $this->beginContent('path/to/view');
* // ... content to be decorated
* $this->endContent();
* </pre>
*
* The property {@link view} specifies the name of the view that is used to
* decorate the content. In the view, the content being decorated may be
* accessed with variable <code>$content</code>.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @package system.web.widgets
* @since 1.0
* @since 2.0
*/
class
C
ContentDecorator
extends
COutputProcessor
class
C
ontentDecorator
extends
Widget
{
/**
* @var mixed the name of the view that will be used to decorate the captured content.
* If this property is null (default value), the default layout will be used as
* the decorative view. Note that if the current controller does not belong to
* any module, the default layout refers to the application's {@link CWebApplication::layout default layout};
* If the controller belongs to a module, the default layout refers to the module's
* {@link CWebModule::layout default layout}.
* @var View the view object for rendering [[viewName]]. If not set, the view registered with the application
* will be used.
*/
public
$view
;
/**
* @var array the variables (name=>value) to be extracted and made available in the decorative view.
* @var string the name of the view that will be used to decorate the content enclosed by this widget.
* Please refer to [[View::findViewFile()]] on how to set this property.
*/
public
$data
=
array
();
public
$viewName
;
/**
* @var array the parameters (name=>value) to be extracted and made available in the decorative view.
*/
public
$params
=
array
();
/**
* Processes the captured output.
* This method decorates the output with the specified {@link view}.
* @param string $output the captured output to be processed
* Starts recording a clip.
*/
public
function
processOutput
(
$output
)
public
function
init
(
)
{
$output
=
$this
->
decorate
(
$output
);
parent
::
processOutput
(
$output
);
if
(
$this
->
viewName
===
null
)
{
throw
new
InvalidConfigException
(
'ContentDecorator::viewName must be set.'
);
}
ob_start
();
ob_implicit_flush
(
false
);
}
/**
* Decorates the content by rendering a view and embedding the content in it.
* The content being embedded can be accessed in the view using variable <code>$content</code>
* The decorated content will be displayed directly.
* @param string $content the content to be decorated
* @return string the decorated content
* Ends recording a clip.
* This method stops output buffering and saves the rendering result as a named clip in the controller.
*/
p
rotected
function
decorate
(
$content
)
p
ublic
function
run
(
)
{
$owner
=
$this
->
getOwner
();
if
(
$this
->
view
===
null
)
$viewFile
=
Yii
::
app
()
->
getController
()
->
getLayoutFile
(
null
);
else
$viewFile
=
$owner
->
getViewFile
(
$this
->
view
);
if
(
$viewFile
!==
false
)
{
$data
=
$this
->
data
;
$data
[
'content'
]
=
$content
;
return
$owner
->
renderFile
(
$viewFile
,
$data
,
true
);
}
else
return
$content
;
$params
=
$this
->
params
;
$params
[
'content'
]
=
ob_get_clean
();
$view
=
$this
->
view
!==
null
?
$this
->
view
:
Yii
::
$app
->
getView
();
echo
$view
->
render
(
$this
->
viewName
,
$params
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment