Форум → Сообщество → Профессиональная деятельность → Взаимопомощь → Нужен разбор URL как в WP
Нужен разбор URL как в WP
-
29 апреля 2009 г. 11:11, спустя 46 минут 30 секунд
artoodetoo, дык, откудава ж готовое, если каждый проект имеет свою структуру страниц. Да и откудава знать есть у тебя БД или у тебя все на файлах. При последнем варианте негде хранить название-урл страницы (то, что по типу "huynia_na_postnom_masle"). Вернее можно придумать, но это уже как прикручивать яйца к розовому Мерседесу, чтоб он выглядел мужицкой машинкой. -
29 апреля 2009 г. 11:36, спустя 24 минуты 27 секунд
rewriterule .* index.php?$1 ;)
а дальше пляшиСапожник без сапог -
29 апреля 2009 г. 11:39, спустя 3 минуты 2 секунды
Givi, ты неправ. ЧПУ придумана какраз чтобы адрес не зависел от реальной структуры файлов и тем более от БД. мысли абстрактно!
Чтобы упростить понимание, предположим что уже есть скрипты-точки_входа с get-параметрами типа
huynia.php?category=xxx
huynia.php?postid=xxx
…
phpdude, я уже пляшу. не совсем я кретин. задача в написании функции, раскладывающей URL по заданному админом шаблону/шаблонамιιlllιlllι унц-унц -
29 апреля 2009 г. 11:44, спустя 5 минут 2 секунды
так а в чем проблема? :) имхо все просто делается :) хочешь расскажу каг?
Givi, ты неправ. ЧПУ придумана какраз чтобы адрес не зависел от реальной структуры файлов и тем более от БД. мысли абстрактно!
Чтобы упростить понимание, предположим что уже есть скрипты-точки_входа с get-параметрами типа
huynia.php?category=xxx
huynia.php?postid=xxx
…
phpdude, я уже пляшу. не совсем я кретин. задача в написании функции, раскладывающей URL по заданному админом шаблону/шаблонамСапожник без сапог -
-
29 апреля 2009 г. 12:45, спустя 49 минут 6 секунд
artoodetoo, ты в пример привел ВП. А у него ЧПУ заточена именно под его структуру. Да, там есть возможность задать самому вид адреса, но работает это не так, как хотелось бы. То есть, можно заюзать один из стандартных вариантов, или же задать свой, который будет все равно не идентичен задуманному (например, если ты хочешь в ВП сделать "домен/это_страница_1" и "домен/это_страница_2" (вторая страница дочерняя к первой), то ты получишь адрес "домен/это_страница_!/это_страница_2", даже в том случае, если тебе связка "родитель-потомок" нужна для совсем другой задачи (например, вывести в левой колонке определенные страницы, которые только для этой цели привязаны к странице-родителю).
Проще говоря ВП - это не идеал.
А так, то тебе Дуд правильно подсказал (ну ты и сам вродь так делаешь). А универсально ты не сделаешь. Хотя бы потому что:
1. Ты, например, делаешь определение "category", "page", "id". А в движке, к которому ты хочешь это прикрутить, нет таких параметров как category, page и id вообще. И что тогда ?! -
29 апреля 2009 г. 12: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 г. 13:09, спустя 15 минут 47 секунд
я не слышу воплей "УРА! СПАСИБО!" (((Сапожник без сапог -
-
29 апреля 2009 г. 13:12, спустя 2 минуты 40 секунд
похуй. пошел в варкрафт поиграю тогда)Сапожник без сапог -
-
29 апреля 2009 г. 13:18, спустя 2 минуты 26 секунд
можно на обертках написать типа WPUrl->addRewriteParam("date","function_parser"); че нить такое :) чтобы можно было расширять :)
ты охуенен!Сапожник без сапог -
29 апреля 2009 г. 13:19, спустя 1 минуту 33 секунды
разреши доебаться? спасибо!
в ТС видно, что правил > 1, а URL по-определению только один на одну страницу. твой класс построен так, как будто все наоборот: в конструкторе задается одно правило, а тестов url может быть сколько угодноιιlllιlllι унц-унц -
29 апреля 2009 г. 13:22, спустя 2 минуты 37 секунд
ну смотри я же тебе дал пример, а не готовую реализацию. допиши в функцию parse параметром - паттерн и транслируй его на лету, никто же не запрещает ;)
разреши доебаться? спасибо!
в ТС видно, что правил > 1, а URL по-определению только один на одну страницу. твой класс построен так, как будто все наоборот: в конструкторе задается одно правило, а тестов url может быть сколько угодно
я думаю заметно что в ПОЛНЫЕ условия ТС я никогда не вчитываюсь)Сапожник без сапог
Пожалуйста, авторизуйтесь, чтобы написать комментарий!