Задать вопрос
  • Как облегчить жизнь при работе с MVC?

    IlyasMasirov
    @IlyasMasirov Автор вопроса
    благодарю, ваша подсказка теперь используется в моем проекте)))
  • Как облегчить жизнь при работе с MVC?

    IlyasMasirov
    @IlyasMasirov Автор вопроса
    благодарю за ответ, он очень пригодился))
  • Сайт работает на локалхосте, а из Интернета он не открывается. Почему?

    IlyasMasirov
    @IlyasMasirov
    Какая ошибка появляется? Может стоит поменять Allow for all?
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    Конечно можно запихать всё в один файл и потом копаться в куче кода в поисках нужного места, но можно и держать блоки отдельно в разных файлах, это будет более информативно и нагляднее. такой грамотный подход избавит вас при редактировании или изменении проекта, представьте, что у вас не один шаблон, а несколько, и ваш проект их всецело использует, а потом вдруг вам что-то нужно было изменить в шапке и вы тут же полезли всё это менять во всех шаблонах. Очень неудобно. А тут открыл файлик с кодом шапки, нашел нужную строчку и поменял её.
    По поводу второго вопроса. Можно и не вставлять этот блок, если не хочется его менять, я просто показал вам, что можно делать с этим блоком, наследовать ли родительские данные или вписать свои, а можно и наследовать, и вписать что-либо своё. Вот и всё. Эксперементируйте :)
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    Если вы хотите заняться правильным наследованием и избавиться от кучи повторяющейся лапши, то вам придётся немного изменить head.html. Возьмите head.html как за основу, т.е. в качестве родителя мы будем опираться на него. Добавьте в него все необходимые аттрибуты полноценной HTML-страницы (, , ), добавьте в тело страницы body готовые части шапки, сайдбара, меню и подвала, которые будут всегда отображаться на странице, т.е. их не надо будет постоянно инклюдить:

    head.html
    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    {% block meta %}<meta http-equiv="Content-Type" content="text/html; charset=utf-8">{% endblock %}
    {% block style %}<link rel="stylesheet" type="text/css" href="css/style.css">{% endblock %}
    {% block jquery %}<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>{% endblock %}
    {% block script %}<script src="js/script.js"></script>{% endblock %}
    </head>
    <block>
    {% include 'header.html' %}
    
    {% include 'navmenu.html' %}
    
    {% include 'sidebar.html' %}
    
    {% block content %} Ваш контент {% endblock %}
    
    {% include 'footer.html' %}
    <block>
    </html>


    В index.html просто унаследуйте шаблон head.html и пропишите нужные данные:

    index.html
    {% extends 'nodes/head.html' %}
    
    {% block meta %}{{ parent() }}{% endblock %}
    
    {% block style %}{{ parent() }}{% endblock %}
    
    {% block jquery %}{{ parent() }}{% endblock %}
    
    {% block script %}<script src="js/foobar.js">
    {# скрипт из head.html - <script src="js/script.js"></script> не будет унаследован, т.к. здесь не прописан parent() #}</script>
    {% endblock %}
    
    {% block content %} 
    
    Новый контент 
    
    {% include 'categories.html' %}
    
    {% endblock %}


    Как видите, всё легко и просто. Теперь в index.html есть строчки кода из блоков meta, style, jquery из head.html, в блоке script - свой прикрепленный скрипт, а в блоке content вставлена код страницы categories.html, также унаследованы - шапка, меню, сайдбар и подвал. Теперь их в index.html не надо повторно прописывать.

    Очень много интересных решений есть в Twig, например, у вас есть мобильная версия сайта и вы хотите, чтобы сайт выдавал минимализм, тогда указываете переменную и проверяете:
    {% extends ismobileversion ? "mobile.html" : "head.html" %}

    и так далее
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    и то, и то можно использовать одновременно - единственное условие следовать правилам в документации Twig, иначе будут возникать фатальные ошибки при генерации страниц. Вы же пытаетесь сделать нечто:
    <body>
              <body>
              </body>
    </body>
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    Это всё из-за того, что в наследуемом объекте не должно быть ещё одного <body></body>

    Вообще у вас по идее должно быть:

    в head.html

    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    {% block meta %}<meta http-equiv="Content-Type" content="text/html; charset=utf-8">{% endblock %}
    {% block style %}<link rel="stylesheet" type="text/css" href="css/style.css">{% endblock %}
    {% block jquery %}<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>{% endblock %}
    {% block script %}<script src="js/script.js"></script>{% endblock %}
    </head>
    <block>
    {% block body %} Какой-то код {% endblock %}
    <block>
    </html>


    в index.html
    {% extends 'nodes/head.html' %}
    {% block meta %}{{ parent() }}{% endblock %}
    {% block style %}{{ parent() }}{% endblock %}
    {% block jquery %}{{ parent() }}{% endblock %}
    {% block script %}{{ parent() }}{% endblock %}
    {% block body %}{{ parent() }}{% endblock %}
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    А начало и конец блоков именую для личного удобства. Это тоже есть в документации.
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    в вашем примере вы наследуете index.html, хотя надо наоборот. extends нужно вызывать в наследуемом, а не в родительском, а то получается наследуете родителя наследуемым, так не бывает.

    Правильно будет так:
    {% extends 'nodes/head.html' %}
    <!DOCTYPE html>
    <html>
        <head>
            <title>Главная</title>
            {% block meta %}{{ parent() }}{% endblock %}
            {% block style %}{{ parent() }}{% endblock %}
            {% block jquery %}{{ parent() }}{% endblock %}
            {% block script %}{{ parent() }}{% endblock %}
        </head>
         <body>
             {# Тут много другого кода #}
         </body>
  • Как составить сложный MySQL запрос?

    IlyasMasirov
    @IlyasMasirov
    Опубликуйте конечный результат, т.е. в каком виде должны получиться значения на выходе и мы поможем составить запрос))
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    Давайте сейчас разберем всё по порядку. Вам нужно унаследовать родительские блоки из базового шаблона, создайте базовый шаблон, допустим, под названием base.html. Пропишите в нём
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml/DTD/xhtml-trasitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <title>{% block title %}Мой первый сайт{% endblock title %}</title>
    {% block meta %}<meta http-equiv="Content-Type" content="text/html; charset=utf-8">{% endblock meta %}
    {% block style %}<link rel="stylesheet" type="text/css" href="css/style.css">{% endblock style %}
    {% block jquery %}<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>{% endblock jquery %}
    {% block script %}<script src="js/script.js"></script>{% endblock script %}
    </head>
    <body>
    {% block body %}
    Это тело
    {% endblock body %}
    </body>
    </html>


    В файле index.html мы можете унаследовать блоки из base.html таким образом:

    {% extends "base.html" %}
    
    {% block meta %}
        {{ parent() }}
    {% endblock meta %}
    
    {% block style %}
        {{ parent() }}
    {% endblock style %}
    
    {% block jquery %}
        {{ parent() }}
    {% endblock jquery %}
    
    {% block script %}
        {{ parent() }}
    
    {# Унаследовав скрипты из базового шаблона base.html, вы также можете прилинковать другие скрипты, которые будут загружаться при рендеринге index.html.
    
    Например:
    #}
    
    <script src="js.foo.js"></script>
    
    {% endblock script %}
    
    {% block body %}
        {# Сюда вы можете дописать свой код #}
    {% endblock body %}


    Файл head.html можете вообще убрать или дописать в него все подключаемые js, css и мета-данные, включив его в базовый шаблон при помощи {% include 'head.html' %}. Например:

    Файл head.html:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="js/script.js"></script>


    включить в файл base.html:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml/DTD/xhtml-trasitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <title>{% block title %}Мой первый сайт{% endblock title %}</title>
    {% block head %}{% include 'head.html'  %}{% endblock head %}
    </head>
    <body>
    {% block body %}
    Это тело
    {% endblock body %}
    </body>
    </html>


    Мультнаследование в твиге запрещено
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    twig.sensiolabs.org/doc/functions/parent.html - вот эта ссылка как бы намекает на то, что наследование должно происходить при помощи parent(), иначе я не представляю каким образом наследуются родительские блоки. И у меня тоже всё основано на парент.
  • Проблема с наследованием блоков в twig

    IlyasMasirov
    @IlyasMasirov
    вспешке написал неправильно, вместо parents() вставьте parent()