
Залез в WordPress чтобы скопипастить. Ёманарод! Офигел от объемов. Есть готовое лаконичное решение?
Форум → Сообщество → Профессиональная деятельность → Взаимопомощь → Нужен разбор URL как в WP
29 апреля 2009 г. 0:11, спустя 46 минут 30 секунд
29 апреля 2009 г. 0:36, спустя 24 минуты 27 секунд
29 апреля 2009 г. 0:39, спустя 3 минуты 2 секунды
29 апреля 2009 г. 0:44, спустя 5 минут 2 секунды
так а в чем проблема? :) имхо все просто делается :) хочешь расскажу каг?
Givi, ты неправ. ЧПУ придумана какраз чтобы адрес не зависел от реальной структуры файлов и тем более от БД. мысли абстрактно!
Чтобы упростить понимание, предположим что уже есть скрипты-точки_входа с get-параметрами типа
huynia.php?category=xxx
huynia.php?postid=xxx
…
phpdude, я уже пляшу. не совсем я кретин. задача в написании функции, раскладывающей URL по заданному админом шаблону/шаблонам
29 апреля 2009 г. 1:45, спустя 49 минут 6 секунд
29 апреля 2009 г. 1:54, спустя 8 минут 23 секунды
<?
$url = "/archive/2009/27/08/256/buy viagra";
$pattern = "/archive/%date%/%id%/%title%";
class WPUrls
{
private $_pattern;
private $_regex;
private $_groups;
function __construct($pattern)
{
$this->_pattern = $pattern;
$this->compileRegexp();
}
public function parse($url)
{
if(!preg_match($this->_regex,$url,$m))
{
return false;
}
$return = array();
foreach($this->_groups as $i=>$group)
{
$return[$group] = $m[$i+1];
}
return $return;
}
private function compileRegexp()
{
$this->_regex = "#^".preg_replace_callback("#%(.*?)%#",array($this,"embedRegex"),$this->_pattern)."#ism";
}
private function embedRegex($s)
{
$regex = "";
$this->_groups[] = $s[1];
switch($s[1])
{
case "date":
$regex = '(\d{4}/\d{2}/\d{2})';
break;
case "id":
$regex = '(\d+)';
break;
case "title":
$regex = '(.*)(?:\.html)?$';
break;
}
return $regex;
}
}
$wpurls = new WPUrls($pattern);
print_r($wpurls->parse($url));
29 апреля 2009 г. 2:09, спустя 15 минут 47 секунд
29 апреля 2009 г. 2:12, спустя 2 минуты 40 секунд
29 апреля 2009 г. 2:18, спустя 2 минуты 26 секунд
можно на обертках написать типа WPUrl->addRewriteParam("date","function_parser"); че нить такое :) чтобы можно было расширять :)
ты охуенен!
29 апреля 2009 г. 2:19, спустя 1 минуту 33 секунды
29 апреля 2009 г. 2:22, спустя 2 минуты 37 секунд
ну смотри я же тебе дал пример, а не готовую реализацию. допиши в функцию parse параметром - паттерн и транслируй его на лету, никто же не запрещает ;)
разреши доебаться? спасибо!
в ТС видно, что правил > 1, а URL по-определению только один на одну страницу. твой класс построен так, как будто все наоборот: в конструкторе задается одно правило, а тестов url может быть сколько угодно
Пожалуйста, авторизуйтесь, чтобы написать комментарий!