Можно ли реализовать файл index.php, который может показать тот или иной шаблон Twig?

1

Скажем, нам нужно управлять входом пользователя и выходом из системы.

У нас есть файл index.php, который по умолчанию показывает шаблон index.twig (который содержит заголовок, позволяющий пользователям входить в систему или регистрироваться.

И у нас есть еще один шаблон Twig (welcome.twig), похожий на шаблон index.twig, но его заголовок показывает доступ к профилю пользователя, опции выхода и действия, которые наш пользователь может делать на веб-сайте.

Я хотел бы знать, может ли файл index.php показать один из обоих этих шаблонов условным.

В моем файле index.php у меня есть это:

if (!isset($_SESSION['account'])){
     $twig->display("index.twig");
}else{
     $twig->display("welcome.twig");
}

Как вы, возможно, знаете, я предлагаю показать index.twig (шаблон по умолчанию), когда учетная запись НЕ установлена в переменной $ _SESSION, и показать welcome.twig, когда учетная запись установлена в переменной $ _SESSION.

Учетная запись в переменной $ _SESSION встречается в другом файле login.php

На данный момент я использую второй файл (welcome.php), чтобы получить то, что хочу, но я не уверен, что это хороший способ получить его...

Благодарю.

  • 0
    Почему это не должно быть возможно? Ты пробовала?
  • 0
    Да, но я не мог понять, как ... Это потому, что я спрашиваю здесь ...
Теги:
templates
session
twig

2 ответа

0
Лучший ответ

Я столкнулся с этим решением:

Я установил значение переменной $ _SESSION в файле index.php

<?php

            require_once '../vendor/autoload.php';
            require_once '../generated-conf/config.php';
            require_once '../vendor/twig/twig/lib/Twig/Autoloader.php';
            session_start(); // Session always starts when index.php is loaded (even if it is loaded for the first time)
            Twig_Autoloader::register();


            $loader = new Twig_Loader_Filesystem('templates/');
            $twig = new Twig_Environment($loader);

            // Condition to show any or other template
            if (isset($_SESSION['online']) && ($_SESSION['online'] == true)){
                $args= array('online' => true, 'session' => $_SESSION);
            }else{
                $args= array('online' => false);
            }
            // Display Twig template
            $twig->display("index.twig", $args);

?>

И в моем шаблоне Twig (index.twig):

{% if online == true %} {# It not the $_SESSION variable 'online' value, but the 'online' value of the 'args' array #}
     {% include 'userMenu.twig' %}
{% else %}
     {% include 'defaultMenu.twig' %}
{% endif %}

Это заставляет его работать :)

Надеюсь, это поможет кому-то.

  • 1
    Вы можете сделать более просто: {% включить онлайн? 'userMenu.twig': 'defaultMenu.twig'%}
  • 0
    Спасибо, что дали мне знать, что: D
2

Вы должны использовать условное наследование в своем шаблоне. Посмотрите на этот ответ:

Twig расширяют шаблон при условии

Вы можете передать переменную в шаблон, например:

$twig->display("index.twig", array('logged' => isset($_SESSION['account'])));

И тогда сделайте условие в шаблоне с этой переменной. Он может наследовать от двух шаблонов, каждый из которых имеет другое меню, в зависимости от того, зарегистрирован ли пользователь или нет.

Я надеюсь, что это помогает.

  • 0
    Я сделал то, что ты сказал (та же идея). Я опубликую решение в разделе Ответ в ближайшее время. Спасибо за Ваш ответ :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню