ФорумСообществоПрофессиональная деятельностьВзаимопомощь → Нужен разбор URL как в WP

Нужен разбор URL как в WP

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 8:13, спустя 5 минут 18 секунд

    так иди сука досыпай пока крышу не сорвало на
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 8:19, спустя 6 минут 49 секунд


    так иди сука досыпай пока крышу не сорвало на
    нянечка пришла, не могу же я при ней лечь спать )))))) некрасиво минимум …

    а ночью работать надо. ле сука полшестого, встал в 8.45 … пиздец жизнь, вчера вроде еще хуже поспал))))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 8:29, спустя 9 минут 46 секунд

    а ты с ней ложись. это будет прилично ;)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:02, спустя 33 минуты 21 секунду


    а ты с ней ложись. это будет прилично ;)
    она мну в 2 раза старше)
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:04, спустя 1 минуту 15 секунд



    а ты с ней ложись. это будет прилично ;)
    она мну в 2 раза старше)
    а ты её в 2 раза младше)
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:06, спустя 2 минуты 2 секунды




    а ты с ней ложись. это будет прилично ;)
    она мну в 2 раза старше)
    а ты её в 2 раза младше)
    уху))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:26, спустя 20 минут 26 секунд

    другими словами, она возражать не будет :)
    женщины бальзаковского возраста способны на многое! ну и поспишь чутќа
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:27, спустя 51 секунду


    другими словами, она возражать не будет :)
    женщины бальзаковского возраста способны на многое! ну и поспишь чутќа
    жена дома))))
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 мая 2009 г. 9:27, спустя 6 секунд

    хм … в 3?)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 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ι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 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;
    }
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 мая 2009 г. 11:17, спустя 28 секунд

    дело не в количестве строк, а в более прозрачном коде. имхо прозрачном конечно
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 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'),

    ??????? не кажется ли тебе это излишним? такие вещи обычно тянут за собой неочевидные ошибки в будущем
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 мая 2009 г. 11:32, спустя 12 минут 57 секунд

    добавил auto expand editor для быстрого ответа, заебало через очко в мир смотреть)))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 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ι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!