编写Flarum扩展—建立一个自定义字段的详细指南

815 阅读4分钟

Flarum是令人难以置信的快速、可扩展、免费和开源的论坛软件。它自2014年以来一直在开发,并接近其测试阶段的结束。

在本教程中,我们将经历为用户账户添加自定义字段的过程。这个自定义字段将只能由用户从用户资料页面设置,但也可由管理员手动编辑。这个扩展的完整和最终源代码在GitHub上

🙏非常感谢@askvortsov的审查和协助,使我们能够以正确的方式完成这项工作。

我们要添加的内容

我们将允许用户将他们的Web3地址添加到他们的个人资料中。Web3地址是用户在Web3生态系统中的加密身份--公-私密钥对(如SSH)的公共部分,代表一个人的区块链兼容的账户。

注意ℹ:Web3生态系统是一个去中心化的主机、自我拥有的数据和抗审查通信的新互联网。关于Web3的入门知识,请看FOSDEM的这个15分钟的演讲

即使你对Web3不感兴趣,这个教程也会很有用。本教程的第一部分将告诉你如何为用户建立一个自定义字段,第二部分将以加密安全的方式添加实际的Web3地址。

前提条件

我们假设你已经安装了NodeJS,并且有足够新的版本(12.16以上就可以了),而且Composer在全球范围内可用。为了你的理智,我们还建议使用Yarn而不是npm。PHP、MySQL和Flarum的其他需求被假定为已经存在并正常运行。

在下面的例子中,我们将本地的Flarum副本托管在ubikforum.test ,这可能会反映出一些截图。

也请确保你的论坛是在debug 模式下,在config.php 中设置适当的值。

<?php return array(
    'debug' => true,
    'database' => // ...

新扩展

我们通过运行Flarum之友的模板向导,在本地Flarum安装的根目录下新创建的packages 文件夹中,开始一个新的扩展。

# cd into your flarum folder
mkdir packages & cd packages
npx @friendsofflarum/create-flarum-extension web3address

重要⚠: 如果你要把这个Flarum文件夹推送到你要部署实时版本的版本库中,请记得遵循最佳部署实践,忽略packages 文件夹。

填写向导提供的输入信息。

✔ Admin CSS & JS … no
✔ Forum CSS & JS … yes
✔ Locale … yes
✔ Javascript … yes
✔ CSS … yes

注意ℹ:如果你有计划对设置和/或权限进行处理,比如只让某些人修改他们的web3address 属性或类似的,你会想把Admin CSS & JS 设置为yes 。在这种情况下,我们不需要它。

请记住,由于一个错误,生成器不支持包名或命名空间中的数字。因此,最好在生成完成后重新命名这些值。(例如,你不能用web3address 作为名称,但blockchain 就可以了)。

我们还需要编译JavaScript。最好让它在观察模式下运行,这样它就会在文件变化时自动重新编译,你可以在开发时快速检查变化。

cd packages/web3address
cd js
yarn && yarn dev

注意ℹ:你要让它在终端标签中运行,在另一个标签中执行其余的命令。dev 命令激活了一个永远在线的任务,它将占据当前的终端会话。

然后我们安装我们新创建的扩展。

composer config repositories.0 path "packages/*"
composer require swader/blockchain @dev

第一行将告诉Composer,它应该在packages 子文件夹中寻找我们安装的软件包,如果找不到,就默认为Packagist.org

第二行安装我们新创建的扩展。一旦安装完毕,我们就可以加载我们论坛的管理界面,激活扩展,并检查论坛前端的控制台是否有 "Hello world "的信息。如果有的话,说明新的扩展已经工作了。

Adding an extension: add web3 address, Approval, BBCode

Hello, forum message in the developer console

扩展

当建立扩展时,你总是在扩展下面的原始Flarum。这些扩展是在你的扩展的extend.php 文件中定义的,各种扩展器是你可以挂钩的可能扩展点的 "类别"。我们以后会修改这个文件。

请记住,论坛本身在其根目录下也有一个extend.php 文件。这个文件对次要的、根层次的扩展是很有用的,你的用户可以在你的Flarum实例上做这些扩展,而不需要围绕这些功能编写一个完整的扩展。如果你想和别人分享你所建立的东西,或者把它分发到Flarum的其他副本中,扩展是一个好办法。

extend.php 文件目前是这样的。

<?php
namespace Swader\Web3Address;

use Flarum\Extend;

return [
    (new Extend\Frontend('forum'))
        ->js(__DIR__ . '/js/dist/forum.js')
        ->css(__DIR__ . '/resources/less/forum.less'),

    new Extend\Locales(__DIR__ . '/resources/locale')
];

如果你也要扩展admin 的用户界面,就会有另一个Frontend 块来引用admin ,而不是forum 。 目前,我们只是在论坛的前端添加新的JS和样式,并且可以选择将我们的扩展的用户界面元素本地化,所以这些是被扩展的部分。

这个文件是我们定义替代路由和一些监听器的地方,你将在后面看到。

继续阅读编写Flarum扩展。SitePoint建立一个自定义字段