Как скрыть одну часть URL и перенаправить ее? - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть сегмент URL: http://www.site.com/loadContent/contact/4

Я хочу скрыть идентификатор 4 в адресной строке браузера: http://www.site.com/loadContent/contact

Оба контакта и 4 загружаются динамически

Как я могу сделать это в моем коде?

Изменено:

Я должен вставить $ pageID в качестве второго параметра

У меня есть функция, которая генерирует пункты списка меню:

function buildListItem($item) {
$urlItemName = url_title($item->name, 'dash', TRUE); 
$urlCatID = ($item->cat_id);
$url = base_url() . $urlItemName . "/". $urlCatID;

if ($urlItemName == 'blog') {
    $blog = "http://blog.tumblr.com";
    return anchor($blog, strtoupper($item->name), 'target="_blank"');
} else {
    return active_anchor($url, strtoupper($item->name));
}

}

public function loadContent($name, $pageID) {
    $data['title'] = $this->tabPageData;
    $data['tabMenu'] = $this->model->getAllMenuItems();
    $data['links'] = $this->model->getLinksURLIcon();

    $pageName = array('portfolio-1', 'portfolio-2');

    // Store pageID within Session
    //$sessionPageID = $this->session->set_userdata($this->uri->segment(2));

    // Check if $name is in array pageName, get the page content and its name
    if (in_array($name, $pageName)) {
        $data['tabPageContent'] = $this->model->getPageContentByPageID($pageID);
        $data['pageName'] = $this->model->getPageNameByID($pageID);
    } elseif ($name == 'contact') {
        // load Contact page
        $data['tabContact'] = $this->model->getContactByPageID($pageID);
    }

    $this->load->view('content', $data);
}

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Сначала вы должны получить номер идентификатора и сохранить его в $_SESSION, и, кроме этого, вы используете preg_match предоставление, одну строку URL-адреса без идентификатора.

в конце вы перенаправляете использование URL-адреса <?php header("location: ". $URL") ?>

1 голос
/ 17 декабря 2011

Ваши варианты:

  1. Придерживайтесь GET, но нажимайте скрипт / функцию перенаправления, сохраняйте значение в $ _SESSION и перенаправляйте обратно на страницу без данных в URL.
  2. ПОЧТА форма
  3. Используйте куки вместо $ _SESSION (blech)

[править]

Разумный общий код - должен работать практически на любой странице

<?
session_start();

if ( count ( $_GET ) )
{
    $_SESSION['__get'] = $_GET;
    header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
    exit();
}
elseif ( array_key_exists( '__get', $_SESSION ) && count( $_SESSION['__get'] ) )
{
    $_GET = $_SESSION['__get'];
    $_SESSION['__get'] = array();
}


var_dump ( $_GET );

Примечание: переменная var_dump внизу будет показывать $ _GET на странице, которая не имеет параметров URL.

Примечание: это один выстрел. вторая перезагрузка скрипта покажет, что $ _GET очищен. Если вы не хотите этого, удалите $_SESSION['__get'] = array(); в блоке elseif.

[править]

Еще лучший код с функциями и областью поиска GET для каждой страницы (используя $_SERVER['PHP_SELF'])

Тип содержимого: text / plain предназначен для облегчения чтения var_dump, ничего более.

<?
// no-get.php
session_start();
header( 'content-type: text/plain' );

noGet();
var_dump( $_GET );
forgetNoGetPage();
var_dump( $_GET );

/**
* noGet - saves $_GET values to $_SESSION and redirects to same page
* @requires Session to be started
*/
function noGet()
{
    // check count to see if there are fresh variables being passed to the script
    // if there are, we overwrite any existing page variables in the session
    // if we didn't do this, we could never pass new variables on the url to our scripts
    if ( count ( $_GET ) )
    {
        $_SESSION['__get'][$_SERVER['PHP_SELF']] = $_GET;
        header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
        exit();
    }
    elseif (
        array_key_exists( '__get', $_SESSION ) &&
        array_key_exists( $_SERVER['PHP_SELF'], $_SESSION['__get'] ) &&
        count( $_SESSION['__get'][$_SERVER['PHP_SELF']] )
    )
    {
        $_GET = $_SESSION['__get'][$_SERVER['PHP_SELF']];
    }
}

/**
* forgetNoGetPage - removes a page's $_GET values from the session and optionally redirects to the current page.
* @param String The page to remove entries for
* @param Bool Redirect after remove?
*/
function forgetNoGetPage( $page = null, $redirect = false )
{
    if ( $page === null )
    {
        $page = $_SERVER['PHP_SELF'];
    }

    unset( $_SESSION['__get'][$page] );

    if ( $redirect )
    {
        header( 'Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...