Синоним для exposed filter во views

Главные вкладки

Аватар пользователя Vanekru Vanekru 6 февраля 2013 в 23:55

Помогите решить проблему. Заранее спасибо тем кто откликнется.

Есть views, в нем exposed filter. Он выдает ссылка вот такого вида
site.com/filter/336?tid1[15]=15
Я ее хочу превратить в вот такую
site.com/verkhnii-dush/axor

Если разобрать первую ссылку там все просто "filter/336" это сделано через аргумент и в адресе вьюса "filter/%". Далее идет Get запрос "?tid1[15]=15", который создает exposed filter.

Хотелось бы сразу написать что пробовал. У меня VPS там связка nginx и php-fpm. Поэтому все мои регулярки по редиректу в nginx. Написать регулярку не сложно

rewrite ^/filter/([0-9]*)/([0-9]*)/([0-9]*)$ /filter/$1?tid1[$2]=$3 last;

Она хорошо работает и превращает мою ссылку в красивый вид site.com/filter/336/15. Но тут опять встает вопрос, как этой красивой ссылке создать синоним /verkhnii-dush/axor. Так как созданный синоним на адрес редиректа не реагирует. Да еще и дублей плодится много.

Идем дальше, перерываем с весь drupal.org и находим http://drupal.org/node/362326

Тут узнаем о custom_url_rewrite_inbound которую можно в setings.php юзать.
Там даже есть рабочий пример


<?php
function custom_url_rewrite_inbound(&$result$path) {
  global 
$user;

  

//See if we have source for given path alias
  
$sql 'SELECT src FROM {url_alias} WHERE dst="%s"';
  
$row db_result(db_query($sql$path));
  if (
$row) {
    
//separate query string
    
$split explode('?',$row);
    
//if query string exists
    
if (isset($split[1])) {
      
//populate $_GET params (for views exposed filters etc.)
      
$additional_params explode('&',$split[1]);
      foreach (
$additional_params as $parm){
        
$parmarr explode('=',$parm);
        
$_GET[$parmarr[0]] = $parmarr[1];
      }
    }
    
//result should be q= part only - must be found in menu router
    
$result $split[0];
  }
}
?>

Он работает но дает не тот эффект он делает переадресацию с нужного адреса на ненужный. В адресе вводишь синоним verkhnii-dush/axor он кидает на filter/336?tid1[15]=15. Работает но смысла от него нет.
Изучаю вопрос и пушу свой чуда код

<?php
function custom_url_rewrite_inbound(&$result$path$path_language) {
  global 
$user;

  if (

preg_match('/^filter/'$path$matches)) {
    
$query preg_replace('/^q=([^&]*)&(.*)$/''$1?$2'$_SERVER['QUERY_STRING']);
    
$sql 'SELECT dst FROM {url_alias} WHERE src="%s"';
    
$row db_result(db_query($sql$query));
    if (
$row) {
    
$result $row;
    }
  }
}
?>

Он работает но только там почему-то тянется хвост GET запроса. Вводишь ссылку site.com/filter/336?tid1[15]=15 он меня кидает на site.com/verkhnii-dush/axor?tid1[15]=15

Вот как-то так. Уже устал искать решение, может кто подкинет зернышко для размышлений в голову.

Комментарии

Аватар пользователя Vanekru Vanekru 7 февраля 2013 в 12:35

Спасибо большое. Похоже на то что надо, правда почему-то не работает. Сейчас буду его штрудировать и разбираться почему не работает.

Если у кого-нибудь есть еще идеи буду очень признателен. Спасибо.

Аватар пользователя Vanekru Vanekru 8 февраля 2013 в 0:18

Ночь убил, день убил, не получилось завести этот модуль Sad Буду признателен за еще какие-нибудь предложения.

Аватар пользователя Jean-Claude Jean-Claude 8 февраля 2013 в 3:08

"Vanekru" wrote:
site.com/verkhnii-dush/axor

ну если у вас там нет дополнительных фильтров по цене, например, то почему бы не сделать виевом таксономии?