1

Тема: Вывести категории в layout

Доброго всем времени суток. Подскажите можно ли вывести категории из базы в layout. Т.е. есть как обычно base.html.twig

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}{% endblock %}</title>
        <meta name="keywords" content="{% block keywords %}{% endblock %}">
        <meta name="description" content="{% block description %}{% endblock %}">
        {% block stylesheets %}
            <link rel="stylesheet" href="{{ asset('css/main.css') }}" type="text/css">
            <link rel="stylesheet" href="{{ asset('css/fotorama.css') }}" type="text/css">
        {% endblock %}
        {% block javascripts %}
            <script src="{{ asset('js/jquery-1.10.2.min.js') }}"></script>
            <script src="{{ asset('js/fotorama.js') }}"></script>
        {% endblock %}
    </head>
    <body>
    <div id="container">
        <div id="header">
            {% block header %}{% endblock %}
        </div>
        <div id="navigation">
            {% block navigation %}{% endblock %}
        </div>
        <div id="content">
            <div id="main">
                {% block slider %}{% endblock %}
                {% block main %}{% endblock %}
            </div>
            <div id="sidebar">
                {% block forms %}{% endblock %}
                {% block categories %}{% endblock %}
            </div>
            <div class="clear"></div>
        </div>
        <div id="footer">
            {% block footer %}{% endblock %}
        </div>
    </div>
    </body>
</html>

его наследует layout.html.twig

{% extends '::base.html.twig' %}
 
 
{% block header %}
    <h1><span id="logo_first_word">Resume</span> <span id="logo_second_word">Site</span></h1>
    <div id="banner">
        <img src="{{ asset('images/programming_banner.jpg') }}">
    </div>
    <div class="clear"></div>
{% endblock %}
 
{% block navigation %}
    <ul>
        <li><a href="#">ГЛАВНАЯ</a> </li>
        <li><a href="#">МУЗЫКА</a> </li>
        <li><a href="#">ФОРУМ</a> </li>
    </ul>
{% endblock %}
 
 
{% block slider %}
    <div id="image_on_main">
        <div class="fotorama" data-autoplay="true" data-nav="thumbs">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
        </div>
    </div>
{% endblock %}
 
 
 
{% block categories %}
    <div id="categories">
        {#<div id="title_categories">CATEGORIES</div>#}
        {#<div id="body_categories">#}
            {#{% for category in categories %}#}
                {#<ul>#}
                    {#<li>{{ category.category }}</li>#}
                {#</ul>#}
            {#{% endfor %}#}
        {#</div>#}
        {% render 'News:MainBundle:Default:menu' %}
    </div>
{% endblock %}

далее layout наследует index.html.twig

в индекс я вывожу статьи. Как мне сделать так что бы в index.html.twig наследовавщий layout.html.twig выводились категории. Категории должны быть в layoute так как они неизменны и браться из базы. Можно ли так сделать? Надеюсь что я понятно объяснил что мне нужно.

2

Re: Вывести категории в layout

вариантов великое множество. Если я правильно понял ваши желания - вы можете в layout.html.twig рендерить контроллер с "категориями" вашими.
....либо если содержание этих "категорий" зависит от индекса - добавьте блок categories и прописывайте туда что хотите в индексе.

PS: А если "категории" в реальности - меню, то еще удобнее использовать KnpMenuBundle.

3

Re: Вывести категории в layout

Да я читал документацию, но у меня почему то не работает или скорее всего я не так делаю. Вот смотрите как я делаю.
В контроллере DefaultController в методе menu я запрашиваю все категории из базы и возвращаю их в шаблон category.html.twig.

<?php
 
namespace News\MainBundle\Controller;
 
use News\MainBundle\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 
 
class DefaultController extends Controller
{
    public function indexAction()
    {
        $articles = $this->getDoctrine()->getRepository('NewsMainBundle:Articles')->findAll();
        return $this->render('NewsMainBundle:Default:index.html.twig', array(
            'articles' => $articles,
        ));
    }
 
    public function menuAction(){
        $categories = $this->getDoctrine()->getRepository('NewsMainBundle:Category')->findAll();
        return $this->render('NewsMainBundle:Default:category:html.twig', array(
            'categories' => $categories,
        ));
    }
}

в шаблоне category.html.twig я вывожу все категории

{% for category in categories %}
    {{ category.category }}
{% endfor %}

затем в layout.html.twig я запрашиваю контроллер как написано в документации

<div id="sidebar">
    {{ render(controller(
        'NewsMainBundle:Default:menu'
    )) }}
</div>

на что мне выдает ошибку
An exception has been thrown during the rendering of a template ("Unable to find template "NewsMainBundle:Default:category:html.twig".") in NewsMainBundle::layout.html.twig at line 116.

ошибка указывает на строчку     
{{ render(controller(
        'NewsMainBundle:Default:menu'
    ) }}

Что я не так делаю и на каком этапе? Если можно поподробнее.

4

Re: Вывести категории в layout

6762632 пишет:

"Unable to find template "NewsMainBundle:Default:category:html.twig"

Все ж написано. Вы пытаетесь рендерить темплейт, которого нет.

Для меню я бы таки рекомендовал использовать KnpMenuBundle. Чтобы потом не разбираться в каком контроллере какая менюшка рендерится.

5

Re: Вывести категории в layout

То что оно мне пишет что я пытаюсь рендерить темплейт, которого нет это я понял. Вопрос почему оно его не видит он же есть и пути вроде правильно прописаны, я много раз перепроверял

6

Re: Вывести категории в layout

Спасибо разобрался. Не знаю в чем была проблема, просто удалил код и заново переписал вручную. Возможно где то была опечатки или невидимые символы. Спс.