Справочники, инструменты, документация

PHP: Несколько страниц в одном файле

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

Вариант 1

switch ($_GET['page'])
{
 case 'main': p_main(); break;
 case 'about': p_about(); break;
 /*.....*/
 default: p_main(); break;
}

function p_main()
{
 print 'Главная';
}

function p_about()
{
 print 'О нас';
}

В других случаях можно подключить файлы:

switch ($_GET['id']) 
{ 
    case 'main': p_main(); break;
    case 'example1': p_example1(); break;
    case 'example2': p_example2(); break;
    case 'example3': p_example3(); break;
    // ...
    default: p_main(); break; 
} 

function p_main() {include "pages/main.php";} // main.php Start content
function p_example1() {include "pages/example1.php";}
function p_example2() {include "pages/example2.php";}
function p_example3() {include "pages/example3.php";}

В итоге прямая ссылка может выглядить так <a href="index.php?id=example1">Страница example1</a>

Чтобы сделать красивые URL добавим в .htaccess привило:

RewriteEngine On
RewriteRule ^sigma$ /index.php?id=example1 [QSA,L]

В итоге прямая ссылка может выглядить так <a href="/example1">Страница example1</a>

Вариант 2

function array_unique_key($array, $key) { 
    $tmp = $key_array = array(); 
    $i = 0; 

    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $tmp[$i] = $val; 
        } 
        $i++; 
    } 
    return $tmp; 
}

$array = array(
  1 => array('title' => 'Название статьи', 'text' => 'Текст статьи'),
  2 => array('title' => 'Название статьи', 'text' => 'Текст статьи'),
  3 => array('title' => 'Название статьи', 'text' => 'Текст статьи'),
);

if (!empty($_GET['id']))
{
    $id = (int) $_GET['id'];

    echo '<h1><a href="index.php?id=' . $id . '">' . $array[$id]['title'] . '</a></h1>';
    echo $array[$id]['text'];
}
else
{
    foreach ($array as $key => $val)
    {
        echo '<p><a href="index.php?id=' . (int) $key . '">' . $val['title'] . '</a></p>';
    }
}

Вариант 3

Для примера сделаем четыре страницы, это будет главная страница, страница о SEO, про PHP и HTML. Ссылки на страницы у нас будут иметь такие адреса:

  • index.php
  • index.php?p=seo
  • index.php?p=php
  • index.php?p=html

Теперь сам файл код, который содержит в себе эти страницы и который мы поместим в файл index.php:

if (isset($_GET['p'])) 
{
  if ($_GET['p'] == 'seo') 
  {
    #Тут контент/код страницы seo: index.php?p=seo
  }
  if ($_GET['p'] == 'php') 
  {
    #Тут контент/код страницы php: index.php?p=php
  }
  if ($_GET['p'] == 'html') 
  {
    #Тут контент/код страницы html: index.php?p=html
  }
}
else 
{
  #Тут контент/код главной страницы
}

Вот и вся конструкция. За URL страницы отвечает, вот эта часть кода: if ($_GET['p'] == 'php'), а именно то что находится в кавычках, в данном случаи это php. Вы запросто можете добавить еще несколько страниц, для этого перед:

else 
{
  #Тут контент/код главной страницы
}

Добавляйте новый код:

if ($_GET['p'] == 'xxx') 
{
  #Тут контент/код страницы html: index.php?p=xxx
}

Вариант 4

Ещё один вариант разбития файла на несколько страниц:

switch ($_GET['p'])
{
  case 'seo':
    #Тут контент/код страницы seo: index.php?p=seo
  break;

  case 'php':
    #Тут контент/код страницы php: index.php?p=php
  break;

  case 'html':
    #Тут контент/код страницы html: index.php?p=html
  break;    

  default:
    #Тут контент/код главной страницы
  break;
}

Код главной страницы начинается после default и находясь на главной странице, переменная p будет неопределенна, сообщение ошибки: Notice: Undefined index: p in /......../...../.. ....php on line xxx

Что-бы ошибка не выходилась, делаем так, перед: switch ($_GET['p'])

добавляем: $_GET['p'] = isset($_GET['p']) ? $_GET['p'] : null;

Либо подавляем ошибку знаком собаки @: switch (@$_GET['p'])