ugie-cake/cakephp-content-blocks

CakePHP的内容块插件

安装次数: 2,060

依赖: 0

建议者: 0

安全性: 0

星级: 1

关注者: 1

分支: 2

开放问题: 8

类型:cakephp-plugin

v1.3.1 2024-05-08 03:49 UTC

This package is auto-updated.

Last update: 2024-09-09 22:16:07 UTC


README

关于

使网站之前静态的部分动态化。允许管理员和最终用户在不需要编辑模板文件的情况下,编辑网站上的内容块。

下面的左右截图显示相同的视图+布局,但管理员能够修改标志、标题、主要内容以及页脚文本。所有这些只需在CakePHP应用程序中几行代码即可完成。

以下是查看和编辑内容块的行政界面

使用方法

通过composer安装插件

使用composer将此插件安装到您的CakePHP应用程序中。

composer require ugie-cake/cakephp-content-blocks

加载插件

您可以使用cake CLI

bin/cake plugin load ContentBlocks

或者手动将以下行添加到您的src/Application.php文件的bootstrap()函数中

$this->addPlugin('ContentBlocks');

加载视图助手

将以下行添加到您的src/View/AppView.php文件的initialize()函数中

$this->loadHelper('ContentBlocks.ContentBlock');

在数据库中创建content_blocks

注意:这必须在您部署网站的所有环境中(localhost、dev、prod等)执行。这也要求您已设置app.phpapp_local.php文件,并包含适当的DataSource块以连接到数据库。

bin/cake migrations migrate --plugin=ContentBlocks

定义内容块

在您的模板中显示内容之前,您必须首先定义可用的块。这是通过在content_blocks表中插入记录来完成的,这通常通过Seeds来完成。

以下是一个创建每种类型(htmltextimage)内容块的示例种子

<?php
declare(strict_types=1);

use Migrations\AbstractSeed;

class ContentBlocksSeed extends AbstractSeed
{
    public function run(): void
    {
        $data = [
            [
                'parent' => 'global',
                'label' => 'Website Title',
                'description' => 'Shown on the home page, as well as any tabs in the users browser.',
                'slug' => 'website-title',
                'type' => 'text',
                'value' => 'ugie-cake/cakephp-content-blocks-example-app',
            ],
            [
                'parent' => 'global',
                'label' => 'Logo',
                'description' => 'Shown in the centre of the home page, and also in the top corner of all administration pages.',
                'slug' => 'logo',
                'type' => 'image',
            ],
            [
                'parent' => 'home',
                'label' => 'Home Page Content',
                'description' => 'The main content shown in the centre of the home page.',
                'slug' => 'home-content',
                'type' => 'html',
                'value' => '<p>Example app showcasing the <code>ugie-cake/cakephp-content-blocks</code> plugin.</p>',
            ],
            [
                'parent' => 'home',
                'label' => 'Copyright Message',
                'description' => 'Copyright information shown at the bottom of the home page.',
                'slug' => 'copyright-message',
                'type' => 'text',
                'value' => '(c) Copyright 2023, enter copyright owner here.',
            ],
        ];

        $table = $this->table('content_blocks');
        $table->insert($data)->save();
    }
}

将定义的内容块插入数据库

一旦在种子(见上面)中定义了您的内容块,然后您可以运行“Seed”以在数据库中创建记录

# Replace 'ContentBlocksSeed' with the name of your seed class from the previous step.
bin/cake migrations seed --seed ContentBlocksSeed

链接到管理界面

为了让您的管理员能够访问内容块管理页面,您的模板需要链接到ContentBlocks控制器的index操作

<?= $this->Html->link('Content Blocks', ['plugin' => 'ContentBlocks', 'controller' => 'ContentBlocks', 'action' => 'index']) ?>

在视图中使用内容块

通过在视图中输出相关内容块而不是硬编码内容,管理员无需更改代码(或雇佣某人更改代码)即可更改模板的大部分内容。

这是通过相关的ContentBlocksHelper函数完成的

<?= $this->ContentBlock->html('home-content'); ?>
<?= $this->ContentBlock->image('logo'); ?>
<?= $this->ContentBlock->text('website-title'); ?>

覆盖管理页面模板

出于各种原因,您可能想自定义管理页面的外观。如果是这种情况,您可以通过在您的CakePHP应用程序的templates文件夹中创建一个名为plugin的文件夹(如果尚未创建),并在plugin文件夹内创建路径ContentBlocks/ContentBlocks(即文件夹内的文件夹)来覆盖提供的模板。目录结构应如下所示

templates/plugin/ContentBlocks/ContentBlocks/

跳过授权检查

如果您在项目中实现了授权插件,但未添加所需的策略,您可能会看到如下错误信息:对 `/content-blocks/content-blocks` 的请求未应用任何授权检查。您可能需要通过添加以下配置键来在 content-blocks 插件中跳过授权检查。

// In /config/app_local.php add: 
'ContentBlocks' => [
    'ignoreAuthorization' => true,
]

参考

HTML块

添加HTML块

content_blocks 表添加一个类型为 html 的新记录。

示例种子可以在 HtmlBlockSeed.php 文件中找到,请参阅这里

<?php
# File: config/Seeds/HtmlBlockSeed.php
class HtmlBlockSeed extends \Migrations\AbstractSeed
{
    public function run(): void
    {
        $data = [
            [
                'parent' => 'about-us',
                'slug' => 'about-us-content',
                'label' => 'About Us - Main Content',
                'description' => 'Main block of code shown on the About Us page.',
                'type' => 'html',
                'value' => '
                    <h2>Our Story</h2>
                    <p>We are a small business, established in 2023 who sell candles to sick children.</p>
                ',
            ],
        ];

        $this->table('content_blocks')->insert($data)->save();
    }
}

渲染HTML块

在布局或视图模板中添加以下内容:

<?= $this->ContentBlock->html('block-name') ?>

文本块

添加文本块

content_blocks 表添加一个类型为 text 的新记录。

示例种子可以在 TextBlockSeed.php 文件中找到,请参阅这里

<?php
# File: config/Seeds/TextBlockSeed.php
class TextBlockSeed extends \Migrations\AbstractSeed
{
    public function run(): void
    {
        $data = [
            [
                'parent' => 'home',
                'slug' => 'website-title',
                'label' => 'Website Title',
                'description' => 'Heading shown on the main page, and also in the browser tab.',
                'type' => 'text',
                'value' => 'CakePHP Content Blocks Plugin',
            ],
        ];

        $this->table('content_blocks')->insert($data)->save();
    }
}

图片块

添加图片块

content_blocks 表添加一个类型为 image 的新记录。

示例种子可以在 ImageBlockSeed.php 文件中找到,请参阅这里

<?php
# File: config/Seeds/ImageBlockSeed.php
class ImageBlockSeed extends \Migrations\AbstractSeed
{
    public function run(): void
    {
        $data = [
            [
                'parent' => 'global',
                'slug' => 'logo',
                'label' => 'Logo',
                'description' => 'Shown on the home page, and also in the top left of each other page.',
                'type' => 'image',
            ],
        ];

        $this->table('content_blocks')->insert($data)->save();
    }
}