Elseif включить и повторить внешнюю переменную? - PullRequest
1 голос
/ 02 июля 2010

У меня есть оператор Elseif, который получает имя шаблона и включает в себя файл шаблона PHP, который содержит большой массив, и выводит результат на страницу.

$template = str_replace("-","_","{$_GET['select']}");
    if ($template == "cuatro"){
        include("templates/cuatro.php");
        echo $page_output;
    } elseif ($template == "ohlittl"){
        include("templates/ohlittl.php");
        echo $page_output;
    } else {
        echo "Sorry, template not found.";
    }

$page_output = "You've chosen $template_select[0].";

Оттуда я получаю уведомление о том, что не может найти переменную $ page_output.

Примечание: неопределенная переменная: page_output в C: \ ... \ template.php в строке 10

Он может найти его, если я добавлю переменную во включенный файл. Но я пытаюсь заставить эту переменную остаться на этой странице. Как мне это завершить?

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Вы определяете $page_output после его повторения. В тот момент, когда вы вызываете echo $page_output, он еще не существует.

Попытка:

$page_output = "You've chosen {$template_select[0]}.";
$template = str_replace("-","_","{$_GET['select']}");
if ($template == "cuatro"){
    include("templates/cuatro.php");
    echo $page_output;
} elseif ($template == "ohlittl"){
    include(dirname(__FILE__) . "/templates/ohlittl.php");
    echo $page_output;
} else {
    echo "Sorry, template not found.";
}

Хотя я понятия не имею, как вы настраиваете $template_select, и если вы знаете, оно всегда будет называть одно и то же имя шаблона?

Альтернативный подход, который, я считаю, позволяет достичь того, что вы хотите:

$templates = array('cuatro', 'ohlittl');
$selectedTemplate = strtolower(str_replace("-","_",$_GET['select']));

foreach ($templates as $template)
{
    if ($template === $selectedTemplate) {
       include(dirname(__FILE__) . "/templates/" . $template . ".php");
       echo "You've chosen {$template}.";
    }
}
0 голосов
/ 02 июля 2010

Либо ваш шаблон

  1. Выводит текст напрямую (echo)
  2. Сохраняет результат в глобальной (например, $page_output) или локальной переменной (включение происходит внутри функции, но это прозрачно для шаблона).
  3. Возвращает выходные данные (да, в том числе могут возвращать значения).

Кажется, вы хотите вариант 2, но ваши шаблоны не определяют переменную $page_output. Вы также можете выводить текст непосредственно в шаблонах, буферизировать вывод и назначать его $page_output:

ob_start();
include "file.php.inc";
$page_output = ob_get_contents();
ob_end_clean();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...