Skip to content
Permalink
Browse files

It should be possible to set the template from the action of the cell

  • Loading branch information...
HavokInspiration committed Feb 4, 2016
1 parent 7cb7c1a commit 225e8dd4b66405e8ef78853cff532fc485c3789e
@@ -176,6 +176,17 @@ public function render($template = null)
}
$render = function () use ($template) {
try {
$reflect = new ReflectionMethod($this, $this->action);
$reflect->invokeArgs($this, $this->args);
} catch (ReflectionException $e) {
throw new BadMethodCallException(sprintf(
'Class %s does not have a "%s" method.',
get_class($this),
$this->action
));
}
if ($template !== null &&
strpos($template, '/') === false &&
strpos($template, '.') === false
@@ -194,17 +205,6 @@ public function render($template = null)
$name = substr($className, 0, -4);
$builder->templatePath('Cell' . DS . $name);
try {
$reflect = new ReflectionMethod($this, $this->action);
$reflect->invokeArgs($this, $this->args);
} catch (ReflectionException $e) {
throw new BadMethodCallException(sprintf(
'Class %s does not have a "%s" method.',
get_class($this),
$this->action
));
}
$this->View = $this->createView();
try {
return $this->View->render($template);
@@ -132,6 +132,24 @@ public function testDefaultCellAction()
$this->assertEquals('display', $pluginCell->template);
}
/**
* Tests that cell action setting the template renders the correct template
*
* @return void
*/
public function testSettingCellTemplateFromAction()
{
$appCell = $this->View->cell('Articles::customTemplate');
$this->assertContains('This is the alternate template', "{$appCell}");
$this->assertEquals('alternate_teaser_list', $appCell->template);
$appCell = $this->View->cell('Articles::customTemplate');
$this->assertContains('This is the alternate template', $appCell->render());
$this->assertEquals('alternate_teaser_list', $appCell->template);
}
/**
* Tests manual render() invocation.
*
@@ -361,4 +379,28 @@ public function testCachedRenderArrayConfig()
$this->assertEquals("dummy\n", $result);
Cache::drop('cell');
}
/**
* Test cached render.
*
* @return void
*/
public function testCachedRenderSimpleCustomTemplate()
{
$mock = $this->getMock('Cake\Cache\CacheEngine');
$mock->method('init')
->will($this->returnValue(true));
$mock->method('read')
->will($this->returnValue(false));
$mock->expects($this->once())
->method('write')
->with('cell_test_app_view_cell_articles_cell_customTemplate', "<h1>This is the alternate template</h1>\n");
Cache::config('default', $mock);
$cell = $this->View->cell('Articles::customTemplate', [], ['cache' => true]);
$result = $cell->render();
$this->assertContains('This is the alternate template', $result);
Cache::drop('default');
}
}
@@ -0,0 +1 @@
<h1>This is the alternate template</h1>
@@ -51,6 +51,22 @@ public function teaserList()
]);
}
/**
* Renders articles in teaser view mode.
*
* @return void
*/
public function customTemplate()
{
$this->template = 'alternate_teaser_list';
$this->set('articles', [
['title' => 'Lorem ipsum', 'body' => 'dolorem sit amet'],
['title' => 'Usectetur adipiscing eli', 'body' => 'tortor, in tincidunt sem dictum vel'],
['title' => 'Topis semper blandit eu non', 'body' => 'alvinar diam convallis non. Nullam pu'],
['title' => 'Suspendisse gravida neque', 'body' => 'pellentesque sed scelerisque libero'],
]);
}
/**
* Simple echo.
*

0 comments on commit 225e8dd

Please sign in to comment.
You can’t perform that action at this time.