azahraoui/dolicore

DoliCore 基于 Dolibarr 的 dolibase 插件

dev-master 2023-11-19 01:19 UTC

This package is auto-updated.

Last update: 2024-09-19 03:12:31 UTC


README

Lite Version Stable Version PHP Min Dolibarr Min

Dolibase 是一组可重用的代码和架构,它使得编写 Dolibarr 模块更加快速和简单。

⚠️ 此项目已不再积极开发,您可以随意分支使用,或尝试使用 DAMB 作为替代。

为什么要使用它?

  • 模块构建器:Dolibase 有自己的模块构建器,您可以使用它来加速开发。
  • 易于安装:使用 Dolibase 安装程序 模块一键安装。
  • 现成组件:提供多种组件,如页面、PDF 模型、类和函数。
  • 确保向后兼容性:您的模块(s)即使在旧版本的 Dolibarr 上也能正常工作(从版本 3.8 开始)。
  • 更少且更简洁的代码:以简洁的方式编写更少的代码,并减少重复代码的频率。

它是如何工作的?

Dolibase 跟随 Dolibarr 的主要设计模式,并作了一些小的调整以适应其需求。

以下是一个简单的图表,展示了基本 Dolibarr 模块与 Dolibase 模块之间的目录结构差异。

  dolibase module                                       dolibarr module
  ├── admin                                             ├── admin
  │   ├── setup.php                                     │   └── setup.php
+ │   └── about.php                                     ├── core
  ├── core                                              │   ├── modules
  │   ├── modules                                       │   │   └── modMyModule.class.php
  │   │   └── modMyModule.class.php                     │   ├── boxes
  │   ├── boxes                                         │   │   └── mywidget.php
  │   │   └── mywidget.php                              │   └── triggers
  │   └── triggers                                      │       └── interface_**_modMyModule_*.class.php
  │       └── interface_**_modMyModule_*.class.php      ├── class
  ├── class                                             │   └── *.class.php
  │   └── *.class.php                                   ├── img
+ ├── dolibase                                          │   └── object_mypicture.png
  ├── img                                               ├── langs
  │   └── object_mypicture.png                          │   ├── en_US
  ├── langs                                             │   │   └── mymodule.lang
  │   ├── en_US                                         │   └── **_**
  │   │   └── mymodule.lang                             │       └── mymodule.lang
  │   └── **_**                                         ├── sql
  │       └── mymodule.lang                             │   ├── *.sql
  ├── sql                                               │   └── *.key.sql
  │   ├── *.sql                                         ├── css
  │   └── *.key.sql                                     │   └── *.css
  ├── css                                               ├── js
  │   └── *.css                                         │   └── *.js
  ├── js                                                ├── tpl
  │   └── *.js                                          │   └── *.tpl.php
  ├── tpl                                               └── myfirstpage.php
  │   └── *.tpl.php
  ├── myfirstpage.php
+ ├── config.php (mandatory)
+ └── autoload.php (mandatory)

说明

  • admin/setup.phpadmin/about.php 包含模块设置和作者信息(它们只能由管理员咨询)。
  • core/modules/modMyModule.class.php 是模块的主要配置文件或类,它包含有关模块的所有信息:名称、描述、菜单、用户权限等。在 Dolibase 中,这略有不同,模块的主要配置在 config.php 文件中设置,以便在模块的其他部分重用它。
  • core/boxes/mywidget.php 是可以在 Dolibarr 仪表板中显示的模块小部件。
  • core/triggers 包含允许在 Dolibarr 事件后执行自定义代码的触发文件。
  • class 文件夹可能包含您的对象类和函数、SQL 查询等。如果您熟悉 MVC 架构,它类似于模型(s)容器。
  • dolibase 文件夹包含 Dolibase 的所有代码和逻辑。
  • img 是图片文件夹(请注意,模块的图片应以 object_ 前缀开始)。
  • langs 文件夹包含与您的模块相关的所有翻译。
  • sql 文件夹包含用于创建或更新模块表的结构化查询语言(SQL)文件。
  • css 文件夹应包含您的 CSS 文件。
  • js 文件夹用于您的 JavaScript 文件。
  • myfirstpage.php 在上面的示例中被认为是第一个模块页面。
  • config.php 是 Dolibase 使用的配置文件,它包含模块的主要配置 @see config.default.php
  • autoload.php 负责加载模块配置、Dolibarr 环境和 Dolibase 要求。您甚至可以在其中添加任何希望自动加载的 PHP 文件 @see autoload.default.php

安装

Dolibase 可以以两种不同的方式工作

  • 全局(推荐):这意味着 Dolibase 只需要在 Dolibarr 的根目录中安装一次,然后所有 Dolibase 模块都将使用全局版本。
  • 内部:每个模块可以有自己的 dolibase 版本(位于模块文件夹内),因此这种方法不需要预先安装,但使用旧版 dolibase 的模块与新版本之间可能会出现一些冲突。

因此,要全局安装 dolibase,只需将其解压到您的 dolibarr 根目录内,或者使用 Dolibase 安装器模块

快速开始

从版本 2.4.0 开始,您可以使用 Dolibase Builder 轻松生成您的模块和小部件。

要创建一个新模块,只需访问 dolibase builder 页面并遵循说明

https:///dolibarr/htdocs/dolibase/builder

注意localhost/dolibarr 可能会根据您的 dolibarr 安装和域名而变化。

观看这个 演示视频 以获得快速示例。

示例

  • 模块类
<?php

// Load Dolibase
dol_include_once('mymodule/autoload.php');

// Load Dolibase Module class
dolibase_include_once('core/class/BaseModule.php');

class modMyModule extends DolibaseModule
{
    public function loadSettings()
    {
        // Add constant(s)
        $this->addConstant('MY_MODULE_CONST', 'test');

        // Add widget(s)
        $this->addWidget('mywidget.php');

        // Add CSS & JS files
        $this->addCssFile('mycss.css')
             ->addJsFile('myjs.js');

        // Set user permission(s)
        $this->addPermission('read', 'Read permission', 'r');

        // Add menu(s)
        $this->addTopMenu($this->config['other']['top_menu_name'], 'MyTopMenu', '/mymodule/index.php?test=1')
             ->addLeftMenu($this->config['other']['top_menu_name'], 'myleftmenu', 'MyLeftMenu', '/mymodule/index.php?test=2')
             ->addLeftSubMenu($this->config['other']['top_menu_name'], 'myleftmenu', 'mysubleftmenu', 'MySubLeftMenu', '/mymodule/index.php?test=3');
    }
}
  • 模块页面
<?php

// Load Dolibase
include_once 'autoload.php';

// Load Dolibase Page class
dolibase_include_once('core/class/page.php');

// Create Page using Dolibase
$page = new Page('My Page Title', '$user->rights->mymodule->read'); // set page title & control user access

// Print page header & dolibarr's main menus
$page->begin();

echo 'Hello world!';

// Print page footer
$page->end();
  • 小部件类
<?php

// Load Dolibase
dol_include_once('mymodule/autoload.php');

// Load Dolibase Widget class
dolibase_include_once('core/class/widget.php');

// Load Dolibase QueryBuilder class
dolibase_include_once('core/class/query_builder.php');

class MyWidget extends Widget
{
    /**
     * @var Widget Label
     */
    public $boxlabel = 'MyWidget';
    /**
     * @var Widget Picture
     */
    public $boximg = 'mywidget.png';
    /**
     * @var Widget Position
     */
    public $position = 1;
    /**
     * @var Widget is Enabled
     */
    public $enabled = 1;


    /**
     * Load data into info_box_contents array to show array later. Called by Dolibarr before displaying the box.
     *
     * @param int $max Maximum number of records to load
     * @return void
     */
    public function loadBox($max = 5)
    {
        // Set title
        $this->setTitle('Users List');

        // Get users login, firstname & lastname from database
        $qb = QueryBuilder::getInstance()
                          ->select('login, firstname, lastname')
                          ->from('user')
                          ->orderBy('rowid', 'ASC')
                          ->limit($max);

        // Show users
        foreach ($qb->result() as $row) {
            $this->addContent($row->login)
                 ->addContent($row->firstname)
                 ->addContent($row->lastname)
                 ->newLine();
        }
    }
}

🎉 简单吧?!

test 文件夹中找到更多模块示例。

高级功能

使用 dolibase 和 debugbar 模块,您可以获得许多好处

  • 轻松调试您的模块.

debug

要将消息添加到调试栏,只需调用 dolibase_debug 函数

dolibase_debug('your message');
  • 访问 dolibarr 配置变量和常量.

config

  • 获取所有执行的查询 ~ 即使在页面重定向后。

database

要保存页面重定向的查询,请使用 dolibase_redirect 函数

dolibase_redirect('page.php');
  • 优化模块的加载和响应时间.

timeline

要开始计时,请调用 start_time_measure 函数,然后提供测量名称和标签

start_time_measure('measure_1', 'Label');

要停止计时,请使用 stop_time_measure 函数并传递您的测量名称作为参数

stop_time_measure('measure_1');
  • 立即检查 dolibarr 日志(应启用日志模块)。

logs

文档

在查阅 文档 之前,您必须了解 dolibarr 的工作原理以及如何开发模块,否则请参阅以下链接

变更日志

查看 变更日志

贡献

遵循 贡献指南

许可证

Dolibase 根据 MIT 许可证授权。

支持我

在我的 Dolistore 模块收藏中查看。