Форум → Сообщество → Профессиональная деятельность → Взаимопомощь → Нужен разбор URL как в WP
Нужен разбор URL как в WP
-
20 мая 2009 г. 8:13, спустя 5 минут 18 секунд
так иди сука досыпай пока крышу не сорвало наιιlllιlllι унц-унц -
20 мая 2009 г. 8:19, спустя 6 минут 49 секунд
нянечка пришла, не могу же я при ней лечь спать )))))) некрасиво минимум …
так иди сука досыпай пока крышу не сорвало на
а ночью работать надо. ле сука полшестого, встал в 8.45 … пиздец жизнь, вчера вроде еще хуже поспал))))Сапожник без сапог -
20 мая 2009 г. 8:29, спустя 9 минут 46 секунд
а ты с ней ложись. это будет прилично ;)ιιlllιlllι унц-унц -
20 мая 2009 г. 9:02, спустя 33 минуты 21 секунду
она мну в 2 раза старше)
а ты с ней ложись. это будет прилично ;)Сапожник без сапог -
20 мая 2009 г. 9:04, спустя 1 минуту 15 секунд
а ты её в 2 раза младше)
она мну в 2 раза старше)
а ты с ней ложись. это будет прилично ;)все умрут, а я изумруд -
20 мая 2009 г. 9:06, спустя 2 минуты 2 секунды
уху))
а ты её в 2 раза младше)
она мну в 2 раза старше)
а ты с ней ложись. это будет прилично ;)Сапожник без сапог -
20 мая 2009 г. 9:26, спустя 20 минут 26 секунд
другими словами, она возражать не будет :)
женщины бальзаковского возраста способны на многое! ну и поспишь чутќаιιlllιlllι унц-унц -
20 мая 2009 г. 9:27, спустя 51 секунду
жена дома))))
другими словами, она возражать не будет :)
женщины бальзаковского возраста способны на многое! ну и поспишь чутќаСапожник без сапог -
-
22 мая 2009 г. 10:59, спустя 2 дня 1 час 31 минуту
классclass QB_Url { // … … … // // Make reference for <a> html tag // first argument - route id // all others - route parameters in right order // public static function href() { $routeId = func_get_arg(0); $route =& QB::$config['routes'][$routeId]; $tokens =& QB::$config['route_tokens']; $uri = $route[0]; for ($num = func_num_args(), $i=1; $i < $num; ++$i) { $value = func_get_arg($i); $varName = $route[$i]; if (isset($tokens[$varName][1])) { $modifier = $tokens[$varName][1]; $value = $modifier($value); } $uri = str_replace('%'.$varName.'%', $value, $uri); } return QB::$config['base_url'] . $uri; } // … … … }
шаблон<!– .IF rels –> <p>Related topics:</p> <ul> <!– .FOREACH rels AS related –> <li><a href="{#topic, related.id, related.date, related.subject}">{$related.subject}</a></li> <!– .END –> </ul> <!– .END –>
по нему сгенерирован код ссылки<a href="<?php echo QB_Url::href('topic', $data['related']['id'], $data['related']['date'], $data['related']['subject'])?>"><?php echo $data['related']['subject']?></a>
до кучи как выглядит пример таблицы маршрутов сейчас'route_tokens' => array( 'date' => array('(\d{4}/\d{2}/\d{2})', 'urlDate'), 'month' => array('(\d{4}/\d{2})', 'urlMonth'), 'year' => array('(\d{4})', 'urlYear'), 'title' => array('([^\./]+)', 'urlTitle'), 'id' => array('(\d+)'), 'kind' => array('(forum|gallery|blog)') ), 'routes' => array( 'post_new' => array('/topic/%id%/new_post.html', 'id'), 'post_edit' => array('/post/%id%/edit.html', 'id'), 'topic' => array('/%date%/%id%/%title%.html', 'id', 'date', 'title'), 'archive:1' => array('/%date%/', 'date'), 'archive:2' => array('/%month%/', 'month'), 'archive:3' => array('/%year%/', 'year'), 'new_topic' => array('/%kind%/%id%/new_topic.html', 'id', 'kind'), 'board' => array('/%kind%/%id%.html', 'id', 'kind'), 'board_list' => array('/%kind%/', 'kind'), 'index' => array('/'), )
и скриншот
тыц
Исходники:
http://cmf.org.ru/minimal-090522.zipιιlllιlllι унц-унц -
22 мая 2009 г. 11:16, спустя 17 минут 4 секунды
public static function href() { $routeId = func_get_arg(0); $route =& QB::$config['routes'][$routeId]; $tokens =& QB::$config['route_tokens']; $uri = $route[0]; for ($num = func_num_args(), $i=1; $i < $num; ++$i) { $value = func_get_arg($i); $varName = $route[$i]; if (isset($tokens[$varName][1])) { $modifier = $tokens[$varName][1]; $value = $modifier($value); } $uri = str_replace('%'.$varName.'%', $value, $uri); } return QB::$config['base_url'] . $uri; }
я бы это порефакторил так.public static function href() { $vars = func_get_args(); $route = QB::$config['routes'][array_shift($vars)]; $tokens = QB::$config['route_tokens']; $uri = $route[0]; foreach ($vars as $i=>$value) { $varName = $route[$i]; if (isset($tokens[$varName][1])) { $modifier = $tokens[$varName][1]; $value = $modifier($value); } $uri = str_replace('%'.$varName.'%', $value, $uri); } return QB::$config['base_url'] . $uri; }
Сапожник без сапог -
22 мая 2009 г. 11:17, спустя 28 секунд
дело не в количестве строк, а в более прозрачном коде. имхо прозрачном конечноСапожник без сапог -
22 мая 2009 г. 11:19, спустя 2 минуты 47 секунд
я понимаю, что я доебусь, но!
доеба вот в чем'id', 'date', 'title'), 'archive:1' => array('/%date%/', 'date'), 'archive:2' => array('/%month%/', 'month'), 'archive:3' => array('/%year%/', 'year'), 'new_topic' => array('/%kind%/%id%/new_topic.html', 'id', 'kind'),
нахуй такое ацкое дублирование?
array('/%date%/','date')
array('/%month%/','month'),
array('/%year%/','year'),
??????? не кажется ли тебе это излишним? такие вещи обычно тянут за собой неочевидные ошибки в будущемСапожник без сапог -
22 мая 2009 г. 11:32, спустя 12 минут 57 секунд
добавил auto expand editor для быстрого ответа, заебало через очко в мир смотреть)))Сапожник без сапог -
22 мая 2009 г. 12:08, спустя 35 минут 24 секунды
про array_shift я бы согласился, но мои "переменные" начинаются с индекса 1, а array_shift() сдвинет индексы
$varName = $route[$i]; будет возвращать не то. надо $i+1 — это уже НЕ красиво
про ацкое дублирование. его нет. или я тебя не понял.идентификаторы в массиве $routes задают порядок следования агрументов при вызове QB_Url::href(), он может совпадать с порядком следования этих идов в маршруте, а может не совпадать. ид может упоминаться в адресе более одного раза. типа "/forum/topic/2392.msg46902#msg46902"
более того, в маршруте могут использоваться не все иды! например я могу решить, что title в адресе 'topic' лишний и при этом не хочу переделывать все шаблоны где есть вызовы 'topic'!
помоему самый простой способ решить это — перечислить их в нужном порядке.
update:
кажется дошло. хуеваты не иды, а три варианта маршрута для даты?
так у них разный модификатор для вывода. см. 'route_tokens'ιιlllιlllι унц-унц
Пожалуйста, авторизуйтесь, чтобы написать комментарий!