itineris/sage-flbuilder


README

最低要求

  • PHP v7.1
  • Sage v9.0.0-beta.4
  • illuminate/support v5.4
  • Advanced Custom Fields PRO v5.6.9
  • Beaver Builder 插件(专业版)v2.1.1.1
  • Beaver Themer v1.1.1
  • Gravity Forms v2.2.6.5

您必须确保通过 Bedrock 的 composer.json 安装了这 3 个必需的插件。

安装

➜ composer require itineris/sage-flbuilder

规则

  • 遵循 PSR-4
  • 遵循 PSR-1
  • 不要从默认模块复制和粘贴 - 该包中存在巨大的技术债务
  • 不要使用 God 类 - 这完全是技术债务

注意事项

模块名称

Beaver Builder 不能接受文件名相同的两个模块,即使它们遵循 PSR-4。

例如,以下 3 个模块相互冲突

  • vendor/itineris/sage-flbuilder/src/Modules/Button/Button.php
  • app/Plugins/FLBuilder/Modules/BrainHouse/Button/Button.php
  • app/Plugins/FLBuilder/Modules/Trinity/Button/Button.php

解决方案 - 使用唯一的类名

  • vendor/itineris/sage-flbuilder/src/Modules/Button/Button.php
  • app/Plugins/FLBuilder/Modules/BrainHouseButton/BrainHouseButton.php
  • app/Plugins/FLBuilder/Modules/TrinityButton/TrinityButton.php

自定义 PostGrid

模板

已弃用:在 v0.5.0 之前,使用 PostGrid::DIR 来定位模板目录。这已被 AbstractHelper::getPostGridTemplateDir 替换。

过滤栏和文章主题模板可以在项目中自定义,支持 Blade 和正常的 .php

例如

➜ tree web/app/themes/greenwich/app/Plugins/FLBuilder
web/app/themes/greenwich/app/Plugins/FLBuilder
├── Helper.php
└── post-grid
    ├── filter-bar-event.blade.php
    ├── filter-bar.php
    ├── post-theme-event.blade.php
    ├── post-theme-product.php
    └── post-theme.blade.php
class Helper extends AbstractHelper
{
    /**
     * Full path to PostGrid template directory.
     *
     * @return string
     */
    public function getPostGridTemplateDir(): string
    {
        return __DIR__ . '/post-grid';
    }
}

子类

重要:不建议覆盖 PostGrid。尽可能调整您的项目以适应默认的 PostGrid

如果您必须作为最后的手段通过子类覆盖 PostGrid,您必须将其放入 Sage 的容器中 之后 SageFLBuilder::init

use App\Plugins\FLBuilder\Settings\PostGrid;
use Itineris\SageFLBuilder\Settings\PostGrid as SageFLBuilderPostGrid;

$sageFLBuilder->add(PostGrid::class)
              ->remove(SageFLBuilderPostGrid::class)
              ->init();

sage()->bind(SageFLBuilderPostGrid::class, PostGrid::class);

使用 - 最小

步骤 1 - 定义辅助类

namespace App\Plugins\FLBuilder;

use Itineris\SageFLBuilder\AbstractHelper;

class Helper extends AbstractHelper
{
    // Implement all abstract methods.
}

步骤 2

app/setup.php / app/farbic.php

use App\Plugins\FLBuilder\Helper;
use Itineris\SageFLBuilder\SageFLBuilder;

$sageFLBuilder = new SageFLBuilder(
    new Helper()
);

$sageFLBuilder->init();

提示:将这些行放入类方法中。

使用 - 自定义 PHP 模块

步骤 1 - 定义模块类

查看:https://kb.wpbeaverbuilder.com/article/124-custom-module-developer-guide

namespace App\Plugins\FLBuilder\Modules\RunnerBlock;

use Itineris\SageFLBuilder\AbstractModule;
use Itineris\SageFLBuilder\AbstractHelper;

class RunnerBlock extends AbstractModule
{
    /**
     * Register the module and its form settings.
     * If needed, register a settings form to use in the "form" field type.
     */
    public static function register(): void
    {
        // Invoke `\FLBuilder::register_module` here
        // Invoke `\FLBuilder::register_settings_form` here
    }

    public function __construct()
    {
        /** @var AbstractHelper $helper */
        $helper = sage(AbstractHelper::class);

        parent::__construct([
            'name' => __('Runner block', 'fabric'),
            'description' => __('Runner block widget', 'fabric'),
            'category' => 'Basic',
            'group' => $helper->getModuleGroup(),
            'dir' => __DIR__,
            'url' => $helper->assetPath(__DIR__),
            'icon' => 'layout.svg',
        ]);
    }
}

步骤 2 - 前端模板

创建 includes/frontend.php

<sage>/app/Plugins/FLBuilder/Modules
└── RunnerBlock
   ├── RunnerBlock.php
   └── includes
       └── frontend.php

步骤 3 - 将自定义模块添加到 SageFLBuilder

use App\Plugins\FLBuilder\Helper;
use App\Plugins\FLBuilder\Modules\RunnerBlock\RunnerBlock;
use Itineris\SageFLBuilder\SageFLBuilder;

$sageFLBuilder = new SageFLBuilder(
    new Helper()
);

$sageFLBuilder->add(RunnerBlock::class)
              ->init();

使用 - 自定义 Blade 模块

类似于自定义 PHP 模块。

步骤 1 - 继承自 AbstractBladeModule.

namespace App\Plugins\FLBuilder\Modules\BladeRunnerBlock;

use Itineris\SageFLBuilder\AbstractBladeModule;

class BladeRunnerBlock extends AbstractBladeModule
{
    // Similar to custom PHP module
}

步骤 2 - 前端模板

创建 includes/frontend.blade.php

<sage>/app/Plugins/FLBuilder/Modules
└── BladeRunnerBlock
   ├── BladeRunnerBlock.php
   └── includes
       └── frontend.blade.php

步骤 3

$sageFLBuilder->add(RunnerBlock::class, BladeRunnerBlock::class)
              ->init();

使用 - 自定义设置

步骤 1 - 定义设置类

namespace App\Plugins\FLBuilder\Settings;

use Itineris\SageFLBuilder\InitializableInterface;

class MySetting implements InitializableInterface
{
    // Implement all required methods.
}

步骤 2

$sageFLBuilder->add(RunnerBlock::class, BladeRunnerBlock::class, MySetting::class)
              ->init();

使用 - 额外设置

以下设置默认禁用

要启用它们

// Example: Enabling `FourOFourThemeLayout`
$sageFLBuilder->add(FourOFourThemeLayout::class)
              ->init();

使用 - 排除默认模块/设置

$sageFLBuilder->add(RunnerBlock::class, BladeRunnerBlock::class, MySetting::class)
              ->remove(FilterBar::class, EventsArchive::class)
              ->init();

从 Fabric 迁移

由于 sage-flbuilder 使用 PSR-4,而 Fabric 不使用,模块名称已更改。在从 Fabric 迁移时,您必须 搜索和替换 数据库中保存的所有模块名称

$ wp search-replace 'OLD_NAME' 'NEW_NAME'
$ wp search-replace 'fab_accordion' 'Accordion'

这是一个为 sage-flbuilder 的默认模块的 bash 脚本

#!/bin/bash

declare -A modules

# Base Modules
modules[fab_accordion]=Accordion
modules[fab_alert]=Alert
modules[fab_breadcrumbs]=Breadcrumbs
modules[fab_button]=Button
modules[fab_content_image]=ContentImage
modules[fab_filter_bar]=FilterBar
modules[fab_gallery]=Gallery
modules[fab_gravity_form]=GravityForm
modules[fab_page_heading]=PageHeading
modules[fab_page_slider]=PageSlider
modules[fab_secondary_nav]=SecondaryNav
modules[fab_table]=Table
modules[fab_testimonial]=Testimonial
modules[fab_video]=Video

# Add project-specific modules here, for example:
# modules[gh_welcome_section]=WelcomeSection

for i in "${!modules[@]}"
do
    echo "$i -> ${modules[$i]}"
    command="wp search-replace '$i' '${modules[$i]}' --dry-run"
    echo "Running $command"
    result=$(eval "${command} 2> /dev/null")
    if [ $? -eq 0 ];then
        echo "${result##*$'\n'}"
        printf "\n------------\n\n"
    else
        echo "Failed!"
        echo $(result | tail -n 1)
        break
    fi

done