代码之家  ›  专栏  ›  技术社区  ›  Thomas Kekeisen

覆盖bolt.cms中的后端模板

  •  1
  • Thomas Kekeisen  · 技术社区  · 6 年前

    vendor/bolt/bolt/app/view/twig/editcontent/fields/_block.twig (我想替换“块选择”下拉列表)。关于 #1173 #1269 , #5588 #3768 #5102 这在默认情况下不受支持,因此我必须为此编写一个扩展。所以我试了这个:

    后端块选择扩展 :

    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 "bolt://app/theme_defaults" directory does not exist.

    the error I am stuck with

    所以我的最后一个问题是:有没有人有一些如何覆盖/修改的示例代码 供应商/bolt/bolt/app/view/twig/editcontent/fields/\u block.twig vendor 文件夹?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ntomka    6 年前

    这应该比这简单得多。

    在你的扩展类中 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;
        }
    }
    

    现在您可以在extensions目录中创建一个视图目录,在该目录中您可以像Bolt的默认值那样在结构中定义模板。我会从复制和覆盖开始。