覆盖bolt.cms中的后端模板

时间:2018-10-11 07:50:33

标签: twig bolt-cms

我正在尝试覆盖Office.context.ui.displayDialogAsync(_UrlGoesHere_)中的模板文件(我想替换“块选择”下拉列表)。关于#1173#1269#5588#3768#5102,默认情况下不支持此功能,因此我必须为此编写扩展名。所以我尝试了这个:

BackendBlockSelectionExtension

vendor/bolt/bolt/app/view/twig/editcontent/fields/_block.twig

BackendBlockSelectionProvider

namespace Bundle\Site;

use Bolt\Filesystem\Adapter\Local;
use Bolt\Filesystem\Filesystem;
use Silex\Application;
use Bolt\Extension\SimpleExtension;

class BackendBlockSelectionExtension extends SimpleExtension
{
    public function getServiceProviders()
    {
        return [
            $this,
            new BackendBlockSelectionProvider(),
        ];
    }
}

这似乎可以解决问题,但出现一个我根本不理解的错误:namespace Bundle\Site; use Bolt\Filesystem\Adapter\Local; use Bolt\Filesystem\Filesystem; use Silex\Application; use Silex\ServiceProviderInterface; class BackendBlockSelectionProvider implements ServiceProviderInterface { public function register(Application $app) { $side = $app['config']->getWhichEnd(); if ($side == 'backend') { $path = __DIR__ . '/App/templates/Backend'; $filesystem = $app['filesystem']; $filesystem->mountFilesystem('bolt', new Filesystem(new Local($path))); $app['twig.loader.bolt_filesystem'] = $app->share( $app->extend( 'twig.loader.bolt_filesystem', function ($filesystem, $app) { $path = __DIR__ . 'src/App/templates/Backend/'; $filesystem->prependPath($path, 'bolt'); return $filesystem; } ) ); } } public function boot(Application $app) { } }

the error I am stuck with

所以我的最后一个问题是:是否有人有示例代码如何在不触摸The "bolt://app/theme_defaults" directory does not exist.文件夹的情况下覆盖/修改vendor/bolt/bolt/app/view/twig/editcontent/fields/_block.twig

1 个答案:

答案 0 :(得分:1)

这应该比这简单得多。

在扩展类中,覆盖protected function registerTwigPaths()的函数是这样的

protected function registerTwigPaths()
{
    if ($this->getEnd() == 'backend') {
        return [
            'view' => ['position' => 'prepend', 'namespace' => 'bolt']
        ];
    }
    return [];
}

private function getEnd()
{
    $backendPrefix = $this->container['config']->get('general/branding/path');
    $end = $this->container['config']->getWhichEnd();

    switch ($end) {
        case 'backend':
            return 'backend';
        case 'async':
            // we have async request
            // if the request begin with "/admin" (general/branding/path)
            // it has been made on backend else somewhere else
            $url = '/' . ltrim($_SERVER['REQUEST_URI'], $this->container['paths']['root']);
            $adminUrl = '/' . trim($backendPrefix, '/');
            if (strpos($url, $adminUrl) === 0) {
                return 'backend';
            }
        default:
            return $end;
    }
}

现在,您可以在扩展目录中创建一个视图目录,您可以在其中按Bolt的默认结构定义模板。我将从复制和覆盖开始。