symedit / theme-bundle
Symfony2 主题
README
symedit_theme: theme_directory: %kernel.root_dir%/../themes public_directory: themes active_theme: default templates: bundles: [AcmeDemoBundle]
主题包将从 `{theme_directory}/{active_theme}/templates` 文件夹加载模板。它还允许您使用本地assetic文件。主题由简单的YAML定义组成(在theme.yml中)
name: default parent: base title: Default Theme description: Default Theme for all websites stylesheets: filters: [cssrewrite] inputs: - 'bundles/acmedemo/bootstrap/css/bootstrap.min.css' - 'bundles/acmedemo/css/font-awesome.min.css' - '@AcmeDemoBundle/Resources/less/site.less' - 'css/site.less' # Taken from /{active_theme}/css/site.less javascripts: # Same as stylesheets inputs: []
现在您可以在模板中使用CSS如下
{% stylesheets '@theme_css' %} <link rel="stylesheet" href="{{ asset_url }}"> {% endstylesheets %}
您还可以在那里包含其他样式表,@theme_css 主要用于访问主题内部的本地资源。其他包的任何包资产都可以混合使用
{% stylesheets '@theme_css' '@AcmeDemoBundle/Resources/less/site.less' %} <link rel="stylesheet" href="{{ asset_url }}"> {% endstylesheets %}
这同样适用于javascripts,您可以通过assetic使用 @theme_js
获取它。
父主题
您可以将您的主题设置为具有父主题(应该是主题的slug,并且主题位于 %theme_dir%/{theme_name}/theme.yml)。如果您的主题有父主题,则这些模板是第二个要使用的。之后是覆盖。如果您使用覆盖如 "Framework",则引用的模板如:@Framework/template.html.twig 将使用您的主题目录来查找模板。同样,如果您使用 @Theme/template.html 并且它只存在于 @Framework 命名空间中,它仍然可以工作。
当使用父主题时,您还可以在您喜欢的任何主题中存储您的资产,或者将它们拆分。它将从您的当前主题开始,并向上遍历所有父主题,尝试定位资源,因此当前主题中的资源具有优先权。如果您有很多类似的主题,这有助于您在“基础”主题中存储共享资源。
模板
所有您的模板包含和 extends
应该使用 @Theme 命名空间
{% extends '@Theme/Page/base.html.twig' %} {% block content %} {% include '@Theme/Includes/content.html.twig' %} {% endblock %}
父模板
您还可以使用 @Parent
命名空间来访问父模板。这允许您轻松覆盖父模板的任何部分,而不会使Twig尝试引用自身。如果您正在编辑 @Theme/Page/base.html.twig
且父主题有相同的模板,您可以通过使用 @Parent/Page/base.html.twig
来扩展它。它将搜索所有父主题,从最接近的父主题开始,直到找到为止。
这应该只用于没有或不会有任何子主题的主题!如果您扩展了一个使用 @Parent
引用的主题,该主题本身将成为父主题,并将最终引用自身。
表单
您可以使用 template
表单类型来选择模板
$builder->add('page_template', 'template');