/**
  * Tests that conditions related with inheritance works as expected.
  */
 public function testConditions()
 {
     $storage = new BlockStorage();
     $helpers = new \Handlebars\Helpers(array('block' => new BlockHelper($storage), 'extends' => new ExtendsHelper($storage), 'override' => new OverrideHelper($storage), 'ifOverridden' => new IfOverriddenHelper($storage), 'unlessOverridden' => new UnlessOverriddenHelper($storage)));
     $engine = new \Handlebars\Handlebars(array('helpers' => $helpers));
     // Test "ifOverridden" helper
     $engine->setLoader(new \Handlebars\Loader\ArrayLoader(array('parent' => '{{#block "name"}}{{/block}}{{#ifOverridden "name"}}true{{else}}false{{/ifOverridden}}', 'child' => '{{#extends "parent"}}{{#override "name"}}{{/override}}{{/extends}}', 'another_child' => '{{#extends "parent"}}{{/extends}}')));
     $this->assertEquals($engine->render('parent', array()), 'false');
     $this->assertEquals($engine->render('child', array()), 'true');
     $this->assertEquals($engine->render('another_child', array()), 'false');
     // Test "unlessOverridden" helper
     $engine->setLoader(new \Handlebars\Loader\ArrayLoader(array('parent' => '{{#block "name"}}{{/block}}{{#unlessOverridden "name"}}false{{else}}true{{/unlessOverridden}}', 'child' => '{{#extends "parent"}}{{#override "name"}}{{/override}}{{/extends}}', 'another_child' => '{{#extends "parent"}}{{/extends}}')));
     $this->assertEquals($engine->render('parent', array()), 'false');
     $this->assertEquals($engine->render('child', array()), 'true');
     $this->assertEquals($engine->render('another_child', array()), 'false');
 }
 /**
  * Render given template using supplied data
  *
  * @param $path string Path to template file (absolute)
  * @param $data array Data to be rendered
  * @return string Template output
  */
 public function render($path, $data)
 {
     wfProfileIn(__METHOD__);
     $templateName = $this->extractTemplateNameFromPath($path);
     $templateDir = $this->extractTemplateDirFromPath($path);
     $partialsDir = $templateDir . DIRECTORY_SEPARATOR . self::PARTIALS_DIRECTORY;
     $partials = is_dir($partialsDir) ? $partialsDir : $templateDir;
     wfProfileIn(__METHOD__ . " - template: {$path}");
     $handlebars = new \Handlebars\Handlebars();
     $handlebars->setLoader(new \Handlebars\Loader\FilesystemLoader($templateDir));
     $handlebars->setPartialsLoader(new \Handlebars\Loader\FilesystemLoader($partials, ['prefix' => self::PARTIALS_PREFIX]));
     $contents = $handlebars->render($templateName, $data);
     wfProfileOut(__METHOD__ . " - template: {$path}");
     wfProfileOut(__METHOD__);
     return $contents;
 }
示例#3
0
 /**
  * Test partial loader
  */
 public function testPartialLoader()
 {
     $loader = new \Handlebars\Loader\StringLoader();
     $partialLoader = new \Handlebars\Loader\FilesystemLoader(realpath(__DIR__ . '/../fixture/data'));
     $engine = new \Handlebars\Handlebars();
     $engine->setLoader($loader);
     $engine->setPartialsLoader($partialLoader);
     $this->assertEquals('test', $engine->render('{{>loader}}', array()));
 }