Форум → Сообщество → Профессиональная деятельность → Взаимопомощь → Нужен разбор 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ι унц-унц
Пожалуйста, авторизуйтесь, чтобы написать комментарий!