velosipedist/beatrix

整形后的Bitrix

1.1.0-beta 2015-12-17 23:40 UTC

README

Face the truth — now it is better, much better!

Beatrix

尝试打败Bitrix的缺陷性。你不应该知道里面是什么。

我该做什么?

只需从Github的发行版部分下载 beatrix.phar,或者使用 Phing 自己构建。

php phing-latest.phar

在Bitrix启动时包含 beatrix.phar(建议在 /bitrix/php_interface/init.php 中,如果不存在则创建)。

如果需要调整某些选项,请使用选项初始化。

// inside of init.php
Beatrix::init(array(
	Beatrix::SETTINGS_TEMPLATES_DIR => $_SERVER['DOCUMENT_ROOT'].'/.tpl' // where to look for templates
	//... any Slim options are acceptable
));

一些选项将在内部强制执行,其他选项如 Slim 文档 中所述。

没有变化。接下来是什么?

当然。没有魔法(几乎),你必须自己写一些代码 😒。

所有Beatrix实例方法都可通过 Beatrix::app() 获取(它为我们提供了访问应用程序的权限,这是一个经过改进的Slim应用程序),但我们还有一些有用的快捷函数。

目前我们有以下功能

Plates模板引擎

Plates引擎的强大功能替代了老式的模板切割(使用header.php和footer.php作为输出)。它为我们提供了模板继承、块等。

基本设置

只需在网站文档根目录创建一个 .tpl 文件夹(或使用选项配置任何其他目录)。现在你可以在这里放置任何PHP模板,并单独渲染它们。

Beatrix::app()->render('my/template', ['var1'=>$anyData, /* etc */]); // will seek /.tpl/my/template.php

非切割布局可以这样使用

  1. 在模板的header.php中只写以下内容
<?php Beatrix::templateHeader();
  1. 在模板的footer.php中写
<?php Beatrix::templateFooter();

之后,Beatrix将搜索 .tpl/layout/{templateName} 作为布局模板。

但你可以从任何地方在运行时更改布局,只需调用

Beatrix::layout()->setLayout('any/existing/template', ['varToBePassed'=>$var]);

! 任何布局模板 必须 包含 $this->section('content') 调用!

区域

在任意特定模板内部,你可以创建或重写现有命名区域以在布局中稍后打印。

// in any template or even outsid of it
Beatrix::layout()->setSection('name', $contents);

如果内容是字符串,它将被作为区域输出写入,如果需要可以稍后重写。

如果内容是回调,它将在布局模板渲染时刻执行。当某些复杂的渲染逻辑可能因某些原因变得无用时,这很有用,并且此区域将被省略而不会产生开销。

Slim实例运行

Beatrix在底层使用经过调整的Slim应用程序实例,以保持所有设置、常见容器功能和字段。

我们还拥有Slim的所有路由功能。这允许使用 不再需要 /urlrewrite.php! 处理任何非静态网站部分。

.htaccess 放在所需的网站子目录中,例如 /company/news

RewriteEngine On
#just for case:
RewriteBase /company/news

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

然后在内置的index.php中(保留Bitrix文件的头和尾)

// news/index.php with .htaccess in same dir:
Beatrix::app()->get('/', function(){
  /* news list */
  Beatrix::app()->render('blade/template', ['var' => $val]);
});
Beatrix::app()->get('/:category+', function($category){/* news list inside category, optionally nested*/});
Beatrix::app()->get('/:category+/:id', function($category, $id){/* news detail */});

// in the end of page, start listening http requests captured with .htaccess
Beatrix::app()->run();

文档 中可用的所有路由功能(get/post等、分组、条件中的正则表达式)。

数据库和信息块

有关iblocks的详细信息,请参阅readme(src/iblock/README.md)

辅助函数

is_ajax() 检查当前http请求是否通过AJAX发送。在Bitrix模板条件中很有用(在PHP条件中设置为空模板,以渲染“纯”应用程序响应)。

slimUrl() 命名路由的URL,支持路径参数和查询参数附加

最后,所有Illuminate/Support甜美的助手函数(array_pluckstr_finish等)。

捆绑的RSS构建器

您可以使用这个库来生成RSS数据,而不是使用通用组件:这个库

这就完了么?

是的,目前是这样,但在长远或alpha开发阶段

  • 自动菜单生成器,通过结构、信息块层次结构和混合方式
  • 发送邮件
  • 一些用于日常任务的控制台工具

此外,还有一些正在草拟的子模块(不是Spooky Bitrix模块!)

  • RegionManager
  • 发送常见问题解答
  • “请回电”表单