第一:我是Symfony2的新手,只寫了我的第一個項目。樹枝渲染(控制器(...)):訪問父塊
我寫,我想在幾個Symfony的,項目使用畫廊。
我的一般想法是將整個畫廊整合在一起。該API應該是來自gallery-Controller的單個ContollerAction。 我想通過調用
WebsiteTemplate包括在一個網站空間:
{{ render(controller("MyGalleryBundle:Gallery:build")) }}
這WebsiteTemplate從baseTemplate延伸與CSS塊,JS,等...
BaseTemplate:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml2/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="UTF-8" />
[...]
<title>{% block title %}{% endblock %}</title>
{% block head %}
{% block css %}{% endblock %}
{% block js %}{% endblock %}
{% endblock %}
</head>
<body>
{% block menu %}{% endblock %}
{% block body %}{% endblock %}
</body>
</html>
看來,一切工作正常(HTML結構呈現在正確的地方),但CSS是不是being投入到html文件的頭部,但是正好在html範圍內,這導致沒有css被解析。
我試圖通過簡單地調用從bastTemplate像這樣的塊來實現它:
[ setting some twig variables ]
{% block head %}
{% block css %}
{% stylesheets
'bundles/doublebeatsgallery/css/base.css'
'bundles/doublebeatsgallery/css/picture.css'
'bundles/doublebeatsgallery/css/page.css'
output="bundles/doublebeatsgallery/css/compiled/main.css"
%}
<link type="text/css" href="{{ asset_url }}" rel="stylesheet">
{% endstylesheets %}
<script type="text/css">
{% set tpl = galleryConfig.look.template %}
.tmpl_box:hover {
z-index: 5;
margin-left: -{{(tpl.popUpWidth - tpl.width)/2}}px;
margin-top: -{{(tpl.popUpHeight - tpl.height)/2}}px;
}
</script>
{% endblock %}
{% endblock %}
<div id="galleryHeader" class="galleryBaseContainer backA">
<div id="pContainer"><span>{{selectedGallery}}</span></div>
</div>
[... rest of html ]
難道是渲染函數是因爲調用一個新的作用域控制器阻止訪問父塊嗎? – Martin
就是這樣馬丁。 'render'塊可以獨立地由一個像varnish一樣的緩存代理服務。這樣他們就不會知道主請求的任何內容,並且可能完全由緩存提供服務。你可以輕鬆地添加一個額外的渲染(控制器('MyGalleryBundle:Gallery:css'))'塊來解決這個問題。 – nifr
@nifr我不知道這個動作應該是什麼樣子!或者這將如何解決問題。你能給我一個小例子嗎?!那太好了! – Martin