2016-01-20 2 views
0

Я создал окно поиска, которое использует метод $ _GET. Я ищу категорию и размер.Как я могу заменить строку в php url

Когда поиск категория представил свой адрес становится:

index.php?category=1 

через:

<li class=""><a href="index.php?category=<?php echo $category['id']; ?>"><?php echo $category['name']; ?></a></li> 

Когда размер представлен мой URL является:

index.php?category=1&size=1 

через:

<li id=""> 
<a href="<?php echo $_SERVER['REQUEST_URI'].'&size='; ?><?php echo $size['id']; ?>"><?php echo $size['name']; ?></a> 
</li> 

Когда я искать другой размер у меня есть:

index.php?category=1&size=1&size=2 

Как я могу просто заменить размер вместо добавления его снова в моих URL?

+0

Возможный дубликат [Как заменить переменную в запросе get в PHP?] (Http://stackoverflow.com/questions/1331015/how-can-i-replace-a-variable-in-a- получить-запрос-в-PHP) –

ответ

0

Вы должны использовать функцию http_build_query для создания своего URL-адреса из ассоциативного массива параметров. И старайтесь избегать этого непосредственно в шаблоне. Переместите этот код как минимум на уровень контроллера.

// Somewhere at the controller 
$category = ...; 
$size = ...; 
$searchParams = array(); 
if (!empty($category)) { 
    $name = $category['name']; 
    $searchParams['category'] = $category['id']; 
} 
if (!empty($size)) { 
    $name = $size['name']; 
    $searchParams['size'] = $size['id']; 
} 
$searchQuery = http_build_query($searchParams); 

// Somehow pass it to the template 
$this->addViewVar('searchUrl', $_SERVER['REQUEST_URI'] . $searchQuery); 
$this->addViewVar('searchName', $name); 

И в шаблоне просто использовать searchUrl переменный:

<li class=""><a href="<?php echo $searchUrl; ?>"></a><?php echo $searchName; ?></li> 

Другим способом для выполнения этой задачи, если у вас нет отдельного уровня контроллеров, это создать специальные функции build_search_url() и search_name():

function build_search_url($path, $category = null, $size = null) { 
    $searchParams = array(); 
    if (!empty($category)) { 
     $searchParams['category'] = $category['id']; 
    } 
    if (!empty($size)) {   
     $searchParams['size'] = $size['id'];  
    }   
    $searchQuery = http_build_query($searchParams); 
    return $path . $searchQuery; 
} 

И затем использовать его как это:

<li class=""> 
    <a href="<?php echo build_search_url($_SERVER['REQUEST_URI'], $category, $size); ?>"> 
     <?php echo search_name($category, $size); ?> 
    </a> 
</li> 
0

Использование

<?php echo $_SERVER['PHP_SELF'];?> 

Вместо

<?php echo $_SERVER['REQUEST_URI'];?> 

REQUEST_URI добавляет строки запроса к вашему запросу.

В качестве PHP_SELF указывается обычное имя файла, например. index.php.

0

Самый простой способ ИМХО:

Установите новое значение индекса в $ _GET (или его копию, если вы не хотите, чтобы манипулировать исходный массив) - и затем использовать http_build_query создать новая строка запроса.

0

Вы должны вызвать функцию в теге «href». Внутри используйте http_build_query($array) для восстановления массива.

$data = array('category' => $_GET['category']); 
$data['size'] = $_GET['size'] ? $_GET['size'] : NEW_SIZE; 

function getQuery($data) { 
    return http_build_query($data); 
} 

Вы также можете использовать $ _SERVER [ «REQUEST_URI»], но я не уверен, что эта функция будет заменить значение элемента вместо добавления его в конце запроса.

Смежные вопросы