Помогите решить проблему. Заранее спасибо тем кто откликнется.
Есть 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. Написать регулярку не сложно
Она хорошо работает и превращает мою ссылку в красивый вид 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
Вот как-то так. Уже устал искать решение, может кто подкинет зернышко для размышлений в голову.
Комментарии
http://drupal.org/project/pathdata попробуй этот...
Спасибо большое. Похоже на то что надо, правда почему-то не работает. Сейчас буду его штрудировать и разбираться почему не работает.
Если у кого-нибудь есть еще идеи буду очень признателен. Спасибо.
для 7ки бы
Ночь убил, день убил, не получилось завести этот модуль
Буду признателен за еще какие-нибудь предложения.
ну если у вас там нет дополнительных фильтров по цене, например, то почему бы не сделать виевом таксономии?
Автор, ну что у тебя получилось? я тоже никак не могу настроить этот модуль-(