页面内容

主题

CakePHP 中的主题只是专注于提供模板文件的插件。请参阅关于创建您自己的插件的部分。您可以利用主题,让您能够快速切换页面外观。除了模板文件外,如果您的主题需要,它们还可以提供助手和单元格。使用主题中的单元格和助手时,您需要继续使用插件语法.

首先确保您的主题插件已加载到您的应用程序的 bootstrap 方法中。例如

// Load our plugin theme residing in the folder /plugins/Modern
$this->addPlugin('Modern');

要使用主题,请在您的控制器的操作或 beforeRender() 回调中设置主题名称

class ExamplesController extends AppController
{
    public function beforeRender(\Cake\Event\EventInterface $event)
    {
        $this->viewBuilder()->setTheme('Modern');
    }
}

主题模板文件需要位于与主题名称相同的插件中。例如,上面的主题将在 **plugins/Modern/templates** 中找到。重要的是要记住,CakePHP 期望使用 PascalCase 插件/主题名称。除此之外,**plugins/Modern/templates** 文件夹中的文件夹结构与 **templates/** 完全相同。

例如,Posts 控制器的编辑操作的视图文件将位于 **plugins/Modern/templates/Posts/edit.php**。布局文件将位于 **plugins/Modern/templates/layout/**。您还可以使用主题为插件提供自定义模板。如果您有一个名为 'Cms' 的插件,其中包含一个 TagsController,则 Modern 主题可以提供 **plugins/Modern/templates/plugin/Cms/Tags/edit.php** 来替换插件中的编辑模板。

如果在主题中找不到视图文件,CakePHP 将尝试在 **templates/** 文件夹中找到视图文件。这样,您可以创建主模板文件,并在主题文件夹中根据具体情况进行覆盖。

主题资源

由于主题是标准的 CakePHP 插件,因此它们可以在其 webroot 目录中包含任何必要的资源。这允许打包和分发主题。在开发过程中,对主题资源的请求将由 CakeRoutingMiddlewareAssetMiddleware 处理(默认情况下,它在 cakephp/app Application::middleware() 中加载)。为了提高生产环境的性能,建议您提高应用程序的性能.

CakePHP 的所有内置助手都了解主题,并且会自动创建正确的路径。与模板文件一样,如果主题文件夹中不存在文件,它将默认使用主 webroot 文件夹

// When in a theme with the name of 'purple_cupcake'
$this->Html->css('main.css');

// creates a path like
/purple_cupcake/css/main.css

// and links to
plugins/PurpleCupcake/webroot/css/main.css