bozboz/laravel-backpack-visualcomposer

此包提供了一种轻松管理页面内容的方法

v1.0.0 2019-07-12 09:06 UTC

This package is auto-updated.

Last update: 2024-09-28 23:57:27 UTC


README

Travis Packagist Release Licence

改善编辑页面的方式。

安装

composer require bozboz/laravel-backpack-visualcomposer

确保在您的composer.json中添加以下内容

    "repositories": [
        {
            "type": "composer",
            "url": "http://laravel-packages.staging.bozboz.co.uk"
        }
    ]

然后将以下内容添加到 config/app.php

Bozboz\LaravelBackpackVisualcomposer\VisualComposerServiceProvider::class,

最后,运行

php artisan migrate

使用

在模型中

use \Bozboz\LaravelBackpackVisualcomposer\Traits\VisualComposer;

在CRUD控制器中

public function setup($template_name = false)
{
    parent::setup($template_name);

    $this->crud->addField([
        'name' => 'visualcomposer_main',
        'label' => 'Visual Composer',
        'type' => 'view',
        'view'   => 'visualcomposer::visualcomposer',
        // (optionnal) Only those template will be available
        'templates' => [
            MyNewRowTemplate::class,
        ],
        // (optionnal) Pre-fill the visualcomposer with rows on new models
        'default' => [
            ['template' => MyNewRowTemplate::class],
        ],
        'wrapperAttributes' => [
            'class' => 'form-group col-md-12',
        ],
    ]);
}

public function store(PageRequest $request)
{
    $r = parent::store($request);
    $this->crud->entry->visualcomposer_main = $request->visualcomposer_main;
    return $r;
}

public function update(PageRequest $request)
{
    $r = parent::update($request);
    $this->crud->entry->visualcomposer_main = $request->visualcomposer_main;
    return $r;
}

在模型视图中

@foreach($page->visualcomposer_main as $row)
    {!! $row->template::renderFront($row) !!}
@endforeach

编辑默认配置和模板

运行

php artisan vendor:publish --provider="Bozboz\LaravelBackpackVisualcomposer\VisualComposerServiceProvider"

...它将输出可以覆盖的文件列表,包括配置、背包字段类型、语言文件和11个内置模板

  • 文章,一个wysiwyg和标题、副标题、日期、作者、CTA按钮以及用户可自定义颜色的输入
  • 背景图片和文字,一个带有标题和wysiwyg描述的可上传图片
  • Base64中的图片,将图片存储为base64而不是文件上传
  • 容器中的图片,一个可上传的图片,仅此而已
  • 左图右文,两列中的一张图片和一些文本字段
  • 左文右图,两列中的一些文本字段和一张图片
  • 左文右引言,两列中的一些文本字段和可自定义的背景颜色
  • 最小化,一个空的模板,具有使其工作的最小代码
  • 幻灯片,无限图片和它们的标题的滑块
  • 三列图片文本CTA,每个都包含一张图片、一个标题、一个wysiwyg和一个CTA按钮的三列
  • 两列图片文本CTA,与上述相同,但改为两列而不是三列

查看它们的制作方法,以便您可以自定义它们并构建自己的。

创建新模板的步骤

  • 为您的模板创建一个类。这需要扩展 Bozboz\LaravelBackpackVisualcomposer\Templates\RowTemplateAbstract

例如。

<?php

namespace App\Templates;

use Bozboz\LaravelBackpackVisualcomposer\Templates\RowTemplateAbstract;

class MyNewRowTemplate extends RowTemplateAbstract
{
    public static $name = 'my-new-row-template';
}
  • 将模板类名添加到 project/config/visualcomposer.php 模板数组中
    // Installed and available templates to show in crud
    'templates' => [
        ...
        \App\Templates\MyNewRowTemplate::class,
        ...
    ],
  • project/resources/views/vendor/visualcomposer/templates 中,为每个模板都有一个文件夹。创建一个带有类名的文件夹,例如MyNewRowTemplate。该文件夹需要一个crud.blade.php(用于管理员)和一个front.blade.php(用于前端)。参见其他模板的示例。

例如,在 crud.blade.php

<div class="row-template vc-my-new-row-template">
    <input type="hidden" class="content">
    <textarea class="some_field"
              placeholder="{{ trans('visualcomposer::my-new-row-template.crud.some_field') }}"></textarea>
</div>

@push('crud_fields_scripts')
    <script>
        window['vc_boot', {!!json_encode($template)!!}] = function ($row, content)
        {
            var $hiddenInput = $(".content[type=hidden]", $row);
            var fields = [
                'some_field',
            ];

            // Setup update routine
            var update = function () {
                var contents = [];
                fields.map(function (item) {
                    contents.push($('.'+item, $row).val());
                });
                $hiddenInput.val(
                    JSON.stringify(contents)
                );
            };

            // Parse and fill fields from json passed in params
            fields.map(function (item, index) {
                try {
                    $('.'+item, $row).val(JSON.parse(content)[index]);
                } catch(e) {
                    console.log('Empty or invalid json:', content);
                }
            });

            // Update hidden field on change
            $row.on(
                'change blur keyup',
                'input, textarea, select',
                update
            );

            // Initialize hidden form input in case we submit with no change
            update();
        }
    </script>
@endpush
  • project/resources/lang/vendor/visualcomposer/en/templates.php 中添加一个数组元素,它定义了模板将在管理员下拉列表中显示的内容,以及crud.blade.php中的术语,例如。
<?php
...
    'my-new-row-template' => [
        'name' => 'My new row template',
        'crud' => [
            'some_field' => 'Some field for you to write something in',
        ],
    ],