2015-01-12 4 views
-2

Я работаю над поисковым сайтом и пытаюсь передать параметры с помощью URL-адресов, ориентированных на SEO.Возможность передачи нескольких параметров в URL?

Возможно ли передать следующий URL-адрес и получить URL-адрес в CodeIgniter?

http://www.example.com/search/prize/10/13/14.5/size/xl/2xl/color/black/white-grey/ 

Я могу создать URL, но я хочу, чтобы получить значения URL как $prize = array("10","13","14.5"), $size= array("xl","2xl") и $color = array("black","white-grey").

Я попытался использовать функцию uri_to_assoc(), но это не сработало. Я получаю следующий результат:

[price] => 10, 
[13] => 14.5 
... 

который не прав.

Примечание: Я попытался использовать $this->uri->segment(1) и т. Д., Но в этом случае положение сегмента является динамическим.

Например, пользователи могут искать только цены $10, так что URL будет переодеться в:

http://www.example.com/search/prize/10/size/xl/2xl/color/black/white-grey/ 

Теперь позиция сегмент получения size должен быть изменен. В этом случае я хочу:

$prize = array("10"); 
$size = array("xl", "2xl"); 
$color = array("black", "white-grey"); 

Как я могу это достичь?

+0

'А не было» t работал' Как это не сработало? Как вы пытались его использовать? Что вы действительно пробовали? Вы, вероятно, ищете '$ this-> uri-> segment_array()' – sjagr

+0

@sjagr Я добавил свой проверенный код, а также при попытке $ this-> uri-> segment_array() получить все значения в URL-адресе - Не требуется. –

+0

Это, безусловно, необходимо, если вы хотите получить этот формат URI полезным способом. – sjagr

ответ

0

Вы используете совсем unconv формат «дружественного URI». Обычно при прохождении параметров имеется один идентификатор, а затем параметр, например. /name/key/name/key/name/key.

При использовании правильного формата /name/key/name/key/name/key в сочетании с uri_to_assoc(), вы получите:

array(
    'name' => 'key', 
    // etc... 
) 

но используя что-то вроде /prize/1/2/3/size/s/m/l/color/black/white/grey уступит:

array(
    'prize' => 1, 
    2 => 3, 
    'size' => 's', 
    'm' => 'l', 
    // etc... 
) 

Что бесполезно для вас.

Вы должны будете получать все сегменты индивидуально и сборки ваши массивы с foreach:

$segments = $this->uri->segment_array(); 
$prize = array(); 
$size = array(); 
$color = array(); 
$curKey = ''; 
foreach ($segments as $seg) { 
    if (in_array($seg, array('prize', 'size', 'color'))) { 
     $curKey = $seg; continue; 
    } 
    if (!empty($curKey)) ${$curKey}[] = $seg; 
} 

// use $prize, $size, and $color as you wish 

или, альтернативно, с использованием многомерного массива:

$parameters = array(
    'prize' => array(), 
    'size' => array(), 
    'color' => array(), 
); 
$segments = $this->uri->segment_array(); 
$curKey = ''; 
foreach ($segments as $seg) { 
    if (in_array($seg, array('prize', 'size', 'color'))) { 
     $curKey = $seg; continue; 
    } 
    if (!empty($curKey)) $parameters[$curKey][] = $seg; 
} 
0
  1. Fetch все сегменты
  2. итерацию над ними, проверить каждый для ключевых слов, как size, color и т.д. (сделать белый список)
  3. Если ключевое слово найдено, не принимают значения сегмента до следующего ключевого слова сегмент или конец являются значениями для этого конкретного ключевого слова (так xl и 2xl будет обозначать размер, если предваряются с ключевым словом size и т.д.)
Смежные вопросы