Помощник
Здравствуйте, гость ( Вход | Регистрация )
Как преобразовать УРЛ с ЧПУ в динамический? |
Loader |
2011-09-07, 17:11
Сообщение
#1
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Собственно сабж.
Как преобразовать УРЛ вида: /films/sort_byreads/page_58.html в: module=films&sort=byreads&page=58 ? Сообщение отредактировал Loader - 2011-09-09, 19:40 |
|
|
||
Maximkaboom |
2011-09-07, 17:27
Сообщение
#2
|
|
Опытный Группа: Eleanor user Сообщений: 766 Регистрация: 2010-04-08 Версия системы: RC5 Репутация: нет Всего: 1 |
Loader, в чем же он динамический? )))) он тоже не изменяется)
если в eleanor отключить ЧПУ |
|
|
||
Loader |
2011-09-07, 17:29
Сообщение
#3
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
В-общем я показал примеры что и из чего надо сделать. Если что-то неправильно - извиняйте!
|
|
|
||
Alexander |
2011-09-07, 17:52
Сообщение
#4
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Вопрос? Зачем?
Как вариант, отпарсить при помощи стандартного класса URL. Потом преобразовать в строку... |
|
|
||
Loader |
2011-09-07, 17:57
Сообщение
#5
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Это нужно для корректного редиректа на PDA-версию. Допустим у человека есть ссылка на обычную версию сайта на которой включено ЧПУ, и он переходит по этой ссылке с мобильного устройства. Задача в том, чтобы корректно перекинуть этого человека на эту же страницу, но в PDA-версии, где ЧПУ не работает. |
|
|
||
Loader |
2011-09-07, 18:09
Сообщение
#6
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Написал вот такую каракатицу, она в принципе работает но хотелось бы чего попроще:
Цитата if (!$mob && $this->Mainclass->Functions->IsMobile() && $this->Mainclass->service_id!='7') { $mname=isset($_GET['module']) ? $_GET['module'] : ''; if ($mname='films') { $url=$this->Mainclass->MyGetEnv('REQUEST_URI'); $cid=isset($_GET['cid']) ? (int)$_GET['cid'] : ''; $nid=isset($_GET['nid']) ? (int)$_GET['nid'] : ''; $news=isset($_GET['news']) ? $_GET['news'] : ''; $page=isset($_GET['page']) ? $_GET['page'] : ''; $do=isset($_GET['do']) ? $_GET['do'] : ''; $let=isset($_GET['let']) ? $_GET['let'] : ''; $date=isset($_GET['date']) ? $_GET['date'] : ''; $sort=isset($_GET['sort']) ? $_GET['sort'] : ''; $url=str_replace( array( $this->Mainclass->Url->s_delimeter.$mname, $this->Mainclass->Url->s_defis, $this->Mainclass->Url->ending, $this->Mainclass->Url->s_delimeter, $cid, $nid, $news, $page, $do, $let, $date, $sort, ), array( '?module='.$mname, '=', '', '&', 'cid='.$cid, 'nid='.$nid, 'news='.$news, 'page='.$page, 'do='.$do, 'let='.$let, 'date='.$date, 'sort='.$sort, ), $url); } else $url=''; $this->Mainclass->Functions->Redirect('http://pda-kino.net/pda.php'.$url);#Если уникальный и с мобильного девайса то перенаправим на PDA-версию } Сообщение отредактировал Loader - 2011-09-07, 18:09 |
|
|
||
Loader |
2011-09-09, 19:42
Сообщение
#7
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Пока есть такой вот код:
Цитата if (!$mob && Functions::IsMobile() && $this->Mainclass->service_id!='7')#Если уникальный и с мобильного девайса то перенаправим на PDA-версию { $mname=$this->Mainclass->Url->ParseToValue('module',false); $this->Mainclass->Url->Parse(); $url=array('module'=>$mname)+array_slice($_GET,0,end($_GET) ? count($_GET) : -1); $url='?'.$this->Mainclass->Url->Query($url); Functions::Redirect('http://pda-kino.net/pda.php'.$url); } Функции Query: Цитата protected function QueryPart($arr,$pref,&$res) { $i=0; foreach($arr as $k=>&$v) if(is_array($v)) $this->QueryPart($v,$pref.$k.'][',$res); elseif($v!==false) $res[]=$pref.(($k===$i++) ? '' : urlencode($k)).']='.(is_string($v) ? urlencode($v) : (int)$v); } public function Query($arr,$opts=array()) { $opts+=array( 'delim'=>'&', ); $res=array(); foreach($arr as $k=>&$v) { $k=urlencode($k); if(is_array($v)) $this->QueryPart($v,$k.'[',$res); elseif($v!==false) $res[]=$k.'='.(is_string($v) ? urlencode($v) : (int)$v); } return join($opts['delim'],$res); } но проблема в том что он не работает для полной новости. Сообщение отредактировал Loader - 2011-09-09, 19:44 |
|
|
||
Loader |
2011-09-10, 18:32
Сообщение
#8
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Проблема решена Александром, за что ему огромное спасибо!
Первую часть кода из предыдущего поста надо заменить на это: Цитата #Если уникальный и с мобильного девайса то перенаправим на PDA-версию if(!$mob && Functions::IsMobile() && $this->Mainclass->service_id!='7') { $mname=$this->Mainclass->Url->ParseToValue('module',true); if($mname=='films') $this->Mainclass->Url->params=array('news'); $this->Mainclass->Url->Parse(); $url=array('module'=>$mname)+array_slice($_GET,0,end($_GET) ? count($_GET) : -1); $url='?'.$this->Mainclass->Url->Query($url); Functions::Redirect(ELEANOR_PROTOCOL.$this->Mainclass->domain.$this->Mainclass->site_path.'/pda.php'.$url); } |
|
|
||
Loader |
2011-09-13, 22:27
Сообщение
#9
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Исправлена Александром некорректная работа при переходе в категорию, первую часть кода заменить на это:
Цитата #Если уникальный и с мобильного девайса то перенаправим на PDA-версию if(!$mob && Functions::IsMobile() && $this->Mainclass->service_id!='7') { $mname=$this->Mainclass->Url->ParseToValue('module',true); if($mname=='films') { $cat=false; if($this->Mainclass->Url->GetEnding()=='/') { $cat=true; $cnt=substr_count($this->Mainclass->Url->string,$this->Mainclass->Url->s_delimeter); for($i=1;$i<=$cnt;$i++) $this->Mainclass->Url->params[]='cat'.$i; } else $this->Mainclass->Url->params=array('news'); } $this->Mainclass->Url->Parse(); if($mname=='films' and $cat) { $curl_trace=array(); for($i--;$i>0;$i--) if(!empty($_GET['cat'.$i])) { $curl_trace[]=$_GET['cat'.$i]; unset($_GET['cat'.$i]); } $curl_trace=array_reverse($curl_trace); $this->Mainclass->SetModVal('categories_table','news_categories'); $this->Mainclass->LoadClass('classes/others/class_categories_l.php'); $this->Mainclass->Categories_l->Init(); $dump=$this->Mainclass->Categories_l->GetDump(0,$curl_trace); if($dump) $_GET['cid']=$dump['id']; } foreach($_GET as $k=>&$v) if($v=='') unset($_GET[$k]); $url=array('module'=>$mname)+array_slice($_GET,0,end($_GET) ? count($_GET) : -1); $url='?'.$this->Mainclass->Url->Query($url); Functions::Redirect(ELEANOR_PROTOCOL.$this->Mainclass->domain.$this->Mainclass->site_path.'/pda.php'.$url); } |
|
|
||
Текстовая версия | 0.0367 сек. 11 запросов GZIP включен Сейчас: 2024-10-05, 18:06 |