模板引擎。BEMJSON -> HTML 处理器。https://github.com/bem/bh 的 PHP 版本

5.2.1 2016-10-26 02:23 UTC

README

![Gitter](https://badges.gitter.im/Join Chat.svg) 最新稳定版本 总下载量

Build Status Coverage Status Dependency Status

BH 是一个将 BEMJSON 转换为 HTML 的处理器。换句话说,它是一个模板引擎。

PHP 5.4+ 兼容(不与 HHVM 兼容,因为它缺少许多必需的功能)

目录

友好的包

安装

通过 composer

在您的 shell 中执行

php composer.phar require bem/bh

或者(如果您已将 composer 添加到路径中)

composer require bem/bh

并在您的代码中使用

require "vendor/autoload.php";
$bh = new \BEM\BH();
// ...

手动安装

使用 git 下载(在您的 shell 中执行此操作)

# via git
git clone https://github.com/bem/bh-php.git ./vendor/bem/bh

使用 wgettar

# via wget + tar
wget https://github.com/bem/bh-php/archive/master.tar.gz # download archive
tar -xzvf master.tar.gz --exclude=tests        # extract
[ ! -d ./vendor/bem ] && mkdir ./vendor/bem -p # create vendor director
mv ./bh-php-master ./vendor/bem/bh             # move library to vendor
rm master.tar.gz                               # cleanup

或者直接下载 最新版本 并解压缩到 ./vendor/bem/bh 路径(或您想要的任何路径)。

并在您的代码中使用

// manual installation
require "vendor/bem/bh/index.php";
$bh = new \BEM\BH();
// ...

用法

项目中的 BH 文件具有 .bh.php 后缀(例如,page.bh.php)。该文件以类似于 CommonJS 的格式形成

return function ($bh) {
    $bh->match(/*...*/);
    // ...
};

要加载此文件格式,请使用 include 和 run 技术

// Instantiate BH object
$bh = new \BEM\BH();

// Load and apply matchers to BH object in $bh
$fn = include('file.bh.php');
$fn($bh); // done. and nothing in global

// ...

这允许您同时拥有多个实例

$bh1 = new \BEM\BH();
$bh2 = new \BEM\BH();

// load matchers
$indexMatchers = include('bundles/index/index.bh.php');
$mergedMatchers = include('bundles/merged/merged.bh.php');

// apply them
$indexMatchers($bh1); // bh1 now contains matchers for index page only
$mergedMatchers($bh2); // bh2 now contains all matchers

// use it with the same bemjson data
$bh1->apply($bemjson);
$bh2->apply($bemjson);

使用 apply 方法将 BEMJSON 的源树转换为输出 HTML。使用 processBemJson 方法以详细 BEMJSON 树形式获取中间结果。

常见用例

require "vendor/autoload.php";
$bh = new \BEM\BH();
$bh->match('button', function ($ctx) {
    $ctx->tag('button');
});

$bh->processBemJson([ 'block' => 'block' ]);
// [ 'block' => 'button', 'mods' => new Mods(), 'tag' => 'button' ]

$bh->apply([ 'block' => 'button' ]);
// '<button class="button"></button>'

转换

BEMJSON 的工作函数是 模板。使用 match 方法声明模板。BEMJSON 转换的逻辑在函数体中声明。

模板函数提供了两个参数

  • $ctx\BEM\Context 类的实例;
  • $json\BEM\Json 类的实例(当前 BEMJSON 树节点)。

注意:不要直接更改 $json 对象。请使用 $ctx 对象的方法。我们建议您仅用于读取 $json 对象(另请参阅 $ctx->json() 方法)。

语法

/**
 * Register matchers
 * @param string|array $expression bem css expression
 * @param closure [$matcher]
 * @return \BEM\BH
 */
$bh->match(/*string*/ $expression, function (\BEM\Context $ctx, \BEM\Json $json) {
    // ... actions
});

// or...
$bh->match([/*string*/ $expression], function (\BEM\Context $ctx, \BEM\Json $json) {
    // ... actions
});

// or...
$bh->match(/*array*/ $matchers = [
    "$expression" => function(\BEM\Context $ctx, \BEM\Json $json) {
        // ... actions
    },
    // ... more matchers
]);

请参阅 README.mdREADME.ru.md 中的更多示例。

许可证

MIT 许可证.