Symfony CMF显示容器块中的所有静态内容

时间:2016-10-29 11:45:15

标签: symfony symfony-cmf

在symfony cmf中,我想创建以下内容:

  • 创建一个名为inside
  • 的菜单项
  • 创建一个名为insideBlock
  • 的容器块
  • 创建多个静态内容,它们应该具有容器块的父级

如果用户点击里面的菜单,则应显示静态内容中的所有项目,其中包含insideBlock的父项

我没弄明白该怎么做。 当然我不喜欢只为内部编程一个函数,因为我希望其他菜单的行为方式相同。

我可以将菜单项链接到静态内容并显示此单个内容,但是一旦我选择容器块,菜单项就会消失......

修改

我做到了:

  • 在我的控制器中添加如下函数:

    /**
    * @Route("/{_locale}/empfang", name="empfang_display_all")
    */
    public function empfangAction(Request $request)
    {
            $documentManager = $this->get('doctrine_phpcr')->getManager();
            $content = $documentManager->find(null, '/cms/content/empfangsgebiet');
    
            return $this->render('empfang/empfang.html.twig', [
                    'contents' => $content
            ]);
    }
    
  • 作为路线添加到菜单项empfang_display_all
  • 将内容设置为容器的父级
  • 在视图中

``{%set index = 0%}

{% for child in children %}
    {% if (child.name != "banner") and (isInstanceof(child, 'ContainerBlock') == false) %}
        <div class="{{ cycle(section1, index) }}">
            <div class="container">
                <div class="row">
                    <div class="col-xs-12">
                        <div class="top-title">
                            <div class="row">
                                <div class="col-sm-10 col-sm-offset-1">
                                    {% if isInstanceof(child, 'DemoSeoContent') %}
                                        {{ child.body|raw }}
                                    {% else %}
                                        {{ sonata_block_render({ 'name': child.id }) }}
                                    {% endif %}
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        {% set index = index + 1 %}
    {% endif %}
{% endfor%}

我现在希望以下一行更具动态性

$content = $documentManager->find(null, '/cms/content/empfangsgebiet');

我更喜欢这样:

    /**
    * @Route("/{_locale}/empfang/{path}", name="empfang_display_all")
    */
    public function empfangAction(Request $request, $path)
    {
        $content = $documentManager->find(null, $path);
    }

1 个答案:

答案 0 :(得分:0)

块不是可路由的项目,这意味着它们不能拥有自己的URL。我认为最好的方法是使用普通页面而不是容器块,并配置该页面的路由以使用特殊模板。然后你编写一个模板,输出页面的标题,也许文本作为“引导”,然后循环遍历页面的子项并输出。