archost/acore

该软件包已被弃用且不再维护。未建议替代包。

Archost UI 工具包。

dev-master 2016-02-01 22:39 UTC

This package is not auto-updated.

Last update: 2017-11-23 23:10:55 UTC


README

Archost UI 工具包。

安装

git clone https://github.com/archost/acore.git
cd acore
composer install
git clone https://github.com/archost/alicht.git /tmp/alicht
cp -r /tmp/alicht/{css,js} public/

使用方法

创建页面

要创建一个页面,只需扩展 Page 基类并实现其 preload() 方法。

<?php
require __DIR__ . '/../vendor/autoload.php';
use \archost\acore\Page;
use \archost\acore\ActionQueue;

class AmazingPage extends Page {

    protected function preload()
    {
    }

}

$p = AmazingPage::instance();
echo $p->display();

以下代码将显示一个空白的 alicht 风格页面。

操作

每个非平凡页面可能都有一些控制其行为的 操作。操作由用户输入触发,并通过一个简单的键(例如,commentlogin)识别。

操作处理器

操作处理器 是具体页面类中响应给定操作的方法。这些操作处理器在 preload() 中注册,以便页面知道如何响应给定操作。

protected function preload()
{
    $this->register_action_handler('day', [$this, 'on_day']);
    $this->register_action_handler('night', [$this, 'on_night']);
}

如您所见,我们使用了 register_action_handler() 方法来注册操作处理器。第一个参数是 操作键,第二个参数是一个 可调用 对象。

好吧,让我们在我们的 AmazingPage 中实现这些操作处理器。

public function on_day()
{
    $this->alert_success('Good day!');
}

public function on_night()
{
    $this->alert_success('Good night!');
}

alert_success() 在页面的顶部打印一个漂亮的绿色通知。请参阅 页面 API 以获取可用方法的完整列表。

此外,请注意,在显示页面时可能有一个整个操作队列等待处理。换句话说,您确实想确保在多个操作的情况下,操作处理器不会相互干扰。(您可能还想考虑 有限状态机 等此类事物。这里不深入讨论。)

操作队列

页面有一个 FIFO 操作队列,用于跟踪挂起的操作。显然,每个页面都处理自己的操作队列。实际上,Page 构造函数需要一个 ActionQueue 实例。

现在,让我们在我们的队列中推送一些操作!

$p->push_action('day');
$p->push_action('foobar');

灯光亮了!

echo $p->display();

幕后会发生什么?

首先,队列中将填充操作 dayfoobar

接下来,display() 方法将调用每个操作关联的操作处理器(如果有的话)。在我们的例子中,只有 day 有一个(即 on_day()),而 foobar 将被忽略。

因此,我们的页面将显示一个漂亮的 "Good day!" 消息。

页面 API

  • display()

显示页面。

  • push_action( $action )

将操作推送到操作队列。这应该在某个事件发生时由某些调度器自动调用。我们不会定义(因此限制)事件可能是什么。这取决于您!

  • dump( $key [, $value = null] )

将任意数据按原样导入受保护的关联数组 $dump,以避免在不需要特殊处理时编写大量冗余的setter代码。

您可以选择传递一个键值对或一个数据数组(并省略value参数)。

  • preload()

当您扩展Page类时,必须始终实现此回调方法。当您调用display()页面时,它将自动被调用。

这是注册动作处理器的正确位置。

这也是您想要做一些全局事情的地方,比如设置页面标题。(见set_title。)

  • register_action_handler( $action, $handler )

注册动作处理器。

此方法将动作映射到动作处理器,每当触发动作时都会调用该处理器。(见push_action。)

示例代码

protected function preload()
{
    $this->register_action_handler('explosion', [$this, 'on_explosion']);
}

注意如何使用$this和函数名将可调用方法作为数组传递。

  • set_title( $title )

设置页面的HTML标题。

  • set_meta_description( $desc )

设置页面的元描述文本。

  • css( $css_file )

将CSS文件添加到HTML头部。

  • cover( $cover_file )

添加封面图像。

框获取器

以下方法允许您访问构建页面的框。

Box getters

  • document()

此获取器代表整个文档。您应该在这里追加大部分内容。

  • logo()

用于设置logo模板。这通常是页面的左上角,位于页眉内。

  • nav()

用于在页眉内添加漂亮的导航。

警告

以下方法允许您在文档框上方显示漂亮的警告消息。

  • alert_success( $msg )

  • alert_warning( $msg )

  • alert_error( $msg )

  • alert_info( $msg )

示例

public/中有示例代码。您应该得到类似这样的结果

acore demo

依赖关系

贡献者

Team Archost

许可

acore是开源软件,许可协议为MIT许可