ge1i0n/bitrix-blade

0.10.1 2024-03-06 09:42 UTC

README

Latest Stable Version Total Downloads

Bitrix Blade - 将 Blade 模板引擎集成到 Bitrix

安装

  1. composer require ge1i0n/bitrix-blade

  2. 在 init.php 中添加

use Arrilot\BitrixBlade\BladeProvider;

require $_SERVER['DOCUMENT_ROOT']."/vendor/autoload.php";

BladeProvider::register();

使用

将组件模板从 template.php 更改为 template.blade,然后可以开始使用 Blade

指令 @include('path.to.view') 被修改为以下方式

  1. 首先在当前模板组件目录(template.blade 所在位置)中查找 view
  2. 如果在该目录中没有找到 view,则在基本目录(默认为 local/views,但可以在调用 BladeProvider::register() 时指定)中查找

X-组件

您可以在模板中使用 x-组件。默认情况下,x-组件类从命名空间 View\\Components\\ 中加载,但可以在配置中指定自己的命名空间。如果您想使用特定的组件类,可以按照以下方式在编译器中注册它

$compiler = BladeProvider::getCompiler();
$compiler->component('your-component', \\Namespace\\YourComponent::class);

如果需要,您还可以使用 额外的命名空间。为此,您需要注册它们

$compiler = BladeProvider::getCompiler();
$compiler->componentNamespace('Any\\Components\\Namespace\\', 'any');

自定义指令(custom directives)

为了添加自己的指令,需要将其注册到编译器中

$compiler = BladeProvider::getCompiler();
$compiler->directive('directiveName', function ($expression) {
    return '...';
});

安装包时,BladeProvider::register() 会自动为您注册一些有用的指令

  1. @bxComponent$APPLICATION->IncludeComponent() 的等价物
  2. @block('key')@endblock - 之间的内容将在调用 $APPLICATION->ShowViewContent('key') 的地方输出
  3. @lang('key') 等同于 !! Bitrix\Main\Localization\Loc::getMessage('key') !!}
  4. @auth@endauth - 等同于 <?php if($USER->IsAuthorized()) ?> ... <?php endif ?>
  5. @guest@endguest - 类似,但检查未授权用户
  6. @admin@endadmin - 类似,但使用 $USER->IsAdmin()
  7. @csrf - 等同于 <input type="hidden" name="sessid" value="{!! bitrix_sessid() !!}" />
  8. 与缓存相关的指令

配置

如果需要,可以在配置中更改路径。.settings_extra.php

    'bitrix-blade' => [
        'value'    => [
            'baseViewPath' => '/absolute/path/or/path/from/document/root', // по умолчанию 'local/views'
            'cachePath' => '/absolute/path/or/path/from/document/root', // по умолчанию 'local/cache/blade'
            'namespace' => 'Custom\\Namespace\\', // по умолчанию 'View\\Components\\'
        ],
        'readonly' => true,
    ],

清除缓存

为了确保 Blade 的高效运行,它会将编译后的模板缓存为 php 文件。在大多数情况下,您不需要手动清理这个缓存,因为 Blade 会比较模板文件和缓存的修改时间,并自动使缓存失效。然而,在某些情况下(例如添加新的自定义指令时),您可能需要手动清除缓存。这可以通过 BladeProvider::clearCache() 方法完成

一些注意事项

  1. Bitrix 允许仅在组件模板中使用第三方模板引擎。网站模板只能使用 php。
  2. 由于显而易见的原因,无法充分利用模板继承。
  3. 不能将模板调用为 template.blade.php。Bitrix 会看到 .php 并启用 php 引擎。然而,在其他地方没有任何阻止您使用它的因素。
  4. 在模板中应使用 $template 代替 $this - 例如 $template->setFrameMode(true);
  5. 不需要在 blade-模板中编写 <?if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true) die();?> 检查,它将自动添加到编译后的 view 中。同时,也会执行 extract($arResult, EXTR_SKIP);
  6. 要使模板语言文件正确连接,必须按常规命名该语言文件 - template.php

附加信息

PhpStorm

  1. 要在PhpStorm中启用Blade文件的语法高亮显示,需要将此扩展添加到设置->编辑器->文件类型->Blade
  2. 为了使PhpStorm能够正确理解和高亮显示此包中的自定义指令,可以将它们添加进去。这可以通过在设置->语言和框架->PHP->Blade->指令中进行操作。