Как извлечь номера страниц и идентификаторы из URI? - PullRequest
0 голосов
/ 19 января 2011

Я пытаюсь загрузить весь свой сайт через единую точку входа, index.php? Uri
Хотя моя цель состоит в том, чтобы иметь хорошие чистые URL-адреса, так что до сих пор я придумал ...

domain.com / имя-раздела / page-of-the-section

, поэтому первая часть загрузит класс / файл для section (mail, пользователи, учетная запись и т. д.)

2-я часть загрузит класс / страницу для страницы этого раздела

Это пока довольно просто и легко,Для меня сложнее то, что некоторые страницы будут иметь ID номер (идентификатор пользователя, идентификатор сообщения, идентификатор блога, идентификатор форума, идентификатор сообщения на форуме, идентификатор темы на форуме и т. Д.), Который будет использоватьсядля поиска этой записи в базе данных по номеру идентификатора.

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

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

Я ищу примеры, советы, помощь по работе с номерами страниц и номерами идентификаторов, мне нужнобыть в состоянии получить их и назначить их переменной $ page_number и $ id_number

Ниже приведен мой код, а также некоторые примеры URL, которые я будунужен доступ.Я не хочу использовать существующую платформу для этого, пожалуйста, помогите, если можете, я думаю, я уже близко к тому, чтобы заставить это работать.

прямо сейчас я добавил id / перед номерами id и page / перед номером подкачки, это можно изменить на что угодно (то есть; id-423423 page-23 page / 23 page23p / 23) , пока я могу получить числа для хранения в переменной в PHP

<?php
//get uri
$uri = isset( $_GET['uri'] ) ? $_GET['uri'] : null;

//put uri into array, everything in between '/' will be an array value
$uri1 = explode('/', $uri);

//the first array value will be the SECTION name/class
$section_name = $uri['0'];

//the second array value will always be the PAGE name/class
$page_name = $uri['1'];

//Now some pages will have numbers in the uri
// some are id numbers for things such as a message ID, users ID, comment ID, photo ID, blog ID
// then to complicate it even more sometimes, pages will need paging so will also have a page number in the uri
// I am looking for a way to detect if there is a ID number or page number in uri's for example like listed below.
// right now I have added id/ in front of id numbers and page/ in front of a paging number, this could be changed to anything **(ie; id-423423 page-23 page/23  page23 p/23)** 

mail/inbox/
mail/inbox/page/12
mail/message/id/3432435

users/online/
users/online/page/234
users/profile/id/42234
users/comments/id/42234
users/comments/id/42234/page/3

blogs/list/id/42234
blogs/list/id/42234/page/25
blogs/viewpost/id/1323/             
blogs/create/
blogs/edit/id/34453353

?>

1 Ответ

2 голосов
/ 19 января 2011

Самый простой способ - создать систему маршрутизации, используя регулярные выражения, это довольно простая задача.Вы также можете использовать некоторые материалы с открытым исходным кодом:http://robap.github.com/php-router/

А вот мой, например (простой, как бутылка водки, но рабочий):

// for urls like http://mysite.com/1 or http://mysite.com/29 (any digit)
$ROUTE['(\d*)'] = 'pages/showPage/$1' ;
// for url http://mysite.com/admin/new-page
$ROUTE['admin\/new-page'] = 'pages/addPage' ;

function get_route($uri) {
    global $ROUTE ;
    $routes = $ROUTE ;

    foreach ($routes as $rUri => $rRoute) {
        if (preg_match("#^{$rUri}$#Ui", $uri)) {
            $route = preg_replace("#^{$rUri}$#Ui", $rRoute, $uri) ;
            break ;
        }
    }

    $route = explode('/', $route) ;
    $return['controller'] = array_shift($route) ;
    $return['action'] = array_shift($route) ;
    $return['params'] = empty($route) ? array() : $route ;

    return $return ;
}

//testing for http://mysite.com/2
$route = get_route( $_GET[ 'uri' ] ) ;
var_dump( $route ) ;
...