ЧПУ

Начал разработку CashFinder и решил поделиться с вами, дорогие читатели, скриптом ЧПУ. В моем варианте он позволяет создавать статические и динамические страницы, просто добавляя их адрес, название и текст или путь к модулю в соответствующие таблицы базы данных. Также можно получать параметры из адреса, к примеру, id просматриваемой новости (http://ваш_сайт.ру/news/1/)

Итак, для начала в файле .htaccess нужно прописать:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]

Затем в файле index.php пишем:

$page_url = $_SERVER['REQUEST_URI'];
$page_url = trim($page_url, '/');
$page_url = strtolower($page_url);
if (!$page_url) $page_url = 'index';
$params = explode('/', $page_url);
$i = count($params);
while ($i > 0)
{
  $query = mysql_query("SELECT * FROM `module` WHERE `url`='".$page_url."'");
  if (mysql_num_rows($query))
  {
    $page_name = mysql_result($query, 0, 'name');
    $page_file = mysql_result($query, 0, 'file');
    break;
  }
  else
  {
    $query = mysql_query("SELECT * FROM `page` WHERE `url`='".$page_url."'");
    if (mysql_num_rows($query))
    {
      $page_name = mysql_result($query, 0, 'name');
      $page_text = nl2br(mysql_result($query, 0, 'text'));
      break;
    }
    else
    {
      $page_url = str_replace('/'.$params[$i-1], '', $page_url);
      $page_par = $params[$i];
    }
  }
  $i--;
}
$page_url = implode("/", $params);
if (!$page_name)
{
  $page_text = 'Ошибка 404' ;
  $page_name = 'Страница не найдена';
}

Итак, сначала получаем адрес страницы и записываем в переменную $page_url. Затем убираем слеши и приводим все к нижнему регистру, не забыв, что если запрос пустой, значит это — главная страница.

Создаем массив с отдельными частями адреса и начинаем искать в БД его примерно по такому принципу: к примеру, адрес страницы user/edit/34. Сначала в базе ищется полностью адрес. Если не найден, удаляется последний параметр и $page_url становится равным user/edit. И так ищем пока что-нибудь не найдем (выход из цикла с помощью break) или пока не перепробуем все варианты.

Если ничего не найдено, то записываем в необходимые переменные информацию об ошибке, если найдено — то обрабатываем, как нам нужно и выводим (в зависимости от того, найдена ли страница — выводим содержимое или файл модуля — инклудим)

Вот и все, человеко-понятный урл готов!

  1. Комментов пока нет

  1. Трэкбэков пока нет.