Получить список дел в выражении switch - PullRequest
5 голосов
/ 30 июля 2011

Я использую оператор PHP Switch для определения страниц моего сайта. Итак, вот пример:

switch($page) {
    case "about":
        $title_name = "About Us";
        $page_content = "includes/about-us.php";
        include("inner.php");
    break;
    case "services":
        $title_name = "Services";
        $page_content = "includes/services.php";
        include("inner.php");
    break;
}

И моя файловая структура: index.php? Page = примерно , которая преобразуется в / about / с использованием htaccess.

Что я хочу сделать, так это взять все мои страницы в этом операторе switch, автоматически захватить его и поместить в список, чтобы я мог автоматически записать его на страницу нижнего колонтитула, где у меня будут все ссылки.

Таким образом, вместо того, чтобы вручную вводить все ссылки в нижнем колонтитуле, например: Главная | О нас | Услуги | FAQ , он будет извлекать его автоматически на основе страниц, которые я указал в операторе Switch.

Есть ли способ сделать это? Было бы также полезно автоматически добавить новые страницы, и это добавит новый случай для новой страницы и автоматически создаст страницу в папке включаемых файлов.

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен. Насколько я понимаю, я не верю, что вы можете сделать это с помощью оператора switch, мне придется переделать способ, которым я называю страницы, верно?

Ответы [ 4 ]

8 голосов
/ 30 июля 2011
$pages = array('about'=> 'About Us', 'services' => 'Services');

if (array_key_exists($page, $pages)) {
   $title_name = $pages[$page];
   $page_content = "includes/$page.php";
   include('inner.php');
}

Для нижнего колонтитула вы можете просто перебрать список страниц.Чтобы добавить новую страницу, просто добавьте ее в массив и создайте соответствующий файл.

Но чтобы ответить на ваш вопрос: Нет, вы не можете анализировать операторы кода во время выполнения.

5 голосов
/ 30 июля 2011

Нет, использование switch невозможно, но вы можете сохранить эту информацию в массиве:

$page_list = array(
    'about' => array(
        'title' => 'About Us',
        'content' => 'includes/about-us.php',
    ),
    'services' => array(
        'title' => 'Services',
        'content' => 'includes/services.php',
    ),
);

if(isset($page_list[$page])) {
    $page_info = $page_list[$page];

    $title_name = $page_info['title'];
    $page_content = $page_info['content'];

    include("inner.php");
} else {
    // 404 - file not found
}

// create links
foreach($page_list as $link_name => $page_ent) {
    echo "<a href=\"/{$link_name}/\">{$page_ent['title']}</a><br />"
}

// output
// <a href="/about/">About Us</a><br />
// <a href="/services/">Services</a><br />
0 голосов
/ 30 июля 2011

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

<?php

$pages = array('home', 'about', 'services', 'faq');
$titles = array('Home', 'About us', 'Services', 'FAQ');

$index = array_search($_POST['p'], $pages);
if ($index !== false) {
   $page_content = 'includes/' . $pages[$index] . '.php';
   $title_name = $titles[$index];
} else {
   print 'Page not found';
}

?>

Надеюсь, это помогло.

0 голосов
/ 30 июля 2011

У вас есть это задом наперед.Вам нужно иметь массив страниц, а затем зациклить его один раз для оператора switch и один раз для нижнего колонтитула.Или, что еще лучше, полностью избавьтесь от оператора switch и вместо этого используйте страницы сопоставления ассоциативного массива с информацией, которая может понадобиться для создания этой конкретной страницы (между коммутаторами много общего поведения, поэтому, зная, какая у вас страница, вывероятно, можно просто создать правильные URL / etc).

...