ФорумПрограммированиеPHP для идиотов → ссылка | роутер нубский вопрос

ссылка | роутер нубский вопрос

  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz Апрель 14, 2010, 12:55 д.п.

    роутер берет ссылку так:

    $this->_uri = trim($_SERVER['REQUEST_URI'], '/');

    а потом эксплодом разбивает, но это не работает если корень сайта
    не site.ru/ а например site.ru/blog/ так blog принимает за часть урла, а ведь корень который не учитывается

    как "учесть" этот корень зная его


    $this->_uri = trim($baseurl, $_SERVER['REQUEST_URI']);


    так что ли?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Апрель 14, 2010, 1:13 д.п., спустя 18 минут 34 секунды

    у меня так, хотя может быть замудрено)
    	protected function getDefaultUrl()
    {
    $uri = explode('/', $_SERVER['REQUEST_URI']);
    $sn = explode('/', $_SERVER['SCRIPT_NAME']);
    $offset = 0;

    foreach ($sn as $i => $part) {
    if (!isset($uri[$i]) || $uri[$i] != $part) {
    break;
    }
    $offset++;
    }

    return implode('/', array_slice($uri, $offset));
    }
  • phpdude

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

    Spritz Апрель 14, 2010, 1:32 д.п., спустя 18 минут 44 секунды

    Абырвалг, однозначно замудрено
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz Апрель 14, 2010, 11:10 д.п., спустя 9 часов 37 минут 43 секунды

    soulgarden, если мы не знаем корень, то как мы можем его "откинуть" ?
    - Суслика видишь? И я не вижу, а он там есть! (с)
    Хотя искать от месторасположения скрипта тоже вариант, но как по мне, то удобнее будет указать в конфиге "корень" сайта.
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz Апрель 14, 2010, 11:20 д.п., спустя 10 минут 7 секунд

    что думаете о таком способе?


    $this->_uri = $_SERVER['REQUEST_URI'];
           
    $offset =  substr($_SERVER['SCRIPT_NAME'], 0, -10);
           
    $this->_uri = ltrim($this->_uri, $offset);
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz Апрель 14, 2010, 11:50 д.п., спустя 29 минут 40 секунд

    soulgarden, это ты под "index.php" рассчитываешь? Не очень "кроссплатформенно" получается. Но в целом вариант значительно лучше по коду чем у Абырвалга.
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz Апрель 14, 2010, 12:25 п.п., спустя 35 минут 17 секунд

    чтоб тему новую не создавать посоветуйте быстрый компилирующий шаблонизатор с блочным кешированием и потобными важными фичами, только быстрый и не тяжелый (легкий)
    Спустя 65 сек.
    еще нужно чтоб он с лэйаутами работал, или как то отдельно это реализовывается?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz Апрель 14, 2010, 12:37 п.п., спустя 11 минут 35 секунд


    что думаете о таком способе?


    $this->_uri = $_SERVER['REQUEST_URI'];
           
    $offset =  substr($_SERVER['SCRIPT_NAME'], 0, -10);
           
    $this->_uri = ltrim($this->_uri, $offset);


    parse_url


    чтоб тему новую не создавать посоветуйте быстрый компилирующий шаблонизатор с блочным кешированием и потобными важными фичами, только быстрый и не тяжелый (легкий)
    Спустя 65 сек.
    еще нужно чтоб он с лэйаутами работал, или как то отдельно это реализовывается?
    php + какая-нить библиотека для кеширования
    Work, buy, consume, die
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Апрель 14, 2010, 3:17 п.п., спустя 2 часа 40 минут 4 секунды

    ваще мое решение наверно array_slice упростил бы

    trim разве не посимвольно тримает?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Апрель 14, 2010, 4:30 п.п., спустя 1 час 13 минут 19 секунд


    Абырвалг, однозначно замудрено


    Ахуенно-навороченная Маджента
    final class Mage
    {
    // …
    /**
    * Define system folder directory url by virtue of running script directory name
    * Try to find requested folder by shifting to domain root directory
    *
    * @param string $folder
    * @param boolean $exitIfNot
    * @return string
    */
    public static function getScriptSystemUrl($folder, $exitIfNot = false)
    {
    $runDirUrl = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/');
    $runDir = rtrim(dirname($_SERVER['SCRIPT_FILENAME']), DS);

    $baseUrl = null;
    if (is_dir($runDir.'/'.$folder)) {
    $baseUrl = str_replace(DS, '/', $runDirUrl);
    } else {
    $runDirUrlArray = explode('/', $runDirUrl);
    $runDirArray = explode('/', $runDir);
    $count = count($runDirArray);

    for ($i=0; $i < $count; $i++) {
    array_pop($runDirUrlArray);
    array_pop($runDirArray);
    $_runDir = implode('/', $runDirArray);
    if (!empty($_runDir)) {
    $_runDir .= '/';
    }

    if (is_dir($_runDir.$folder)) {
    $_runDirUrl = implode('/', $runDirUrlArray);
    $baseUrl = str_replace(DS, '/', $_runDirUrl);
    break;
    }
    }
    }

    if (is_null($baseUrl)) {
    $errorMessage = "Unable detect system directory: $folder";
    if ($exitIfNot) {
    // exit because of infinity loop
    exit($errorMessage);
    } else {
    self::printException(new Exception(), $errorMessage);
    }
    }

    return $baseUrl;
    }
  • phpdude

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

    Spritz Апрель 14, 2010, 4:53 п.п., спустя 22 минуты 39 секунд

    Ахуенно-навороченная Маджента


    $folder = dirname(__FILE__) ? :D
    Спустя 21 сек.
    у меня пара строчек - парсинг сайт рута
    Сапожник без сапог
  • NRG

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

    Spritz Апрель 14, 2010, 5:04 п.п., спустя 11 минут 56 секунд

    перед тем как обсырать, можно было бы сначала вообщето посмотреть в каком контексте и для чего вызывается метод Mage::getScriptSystemUrl().

    рут сайта(base path) в магенте, достается вот так:
    define('BP', dirname(dirname(__FILE__)));
  • artoodetoo

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

    Spritz Апрель 14, 2010, 5:08 п.п., спустя 3 минуты 46 секунд

    все говно. Givi правильно сказал - чтобы поменьше суетиться, надо хранить "корень сайта".
    пусть наш сайт начинается с урла test1.ru/behavior/
    каким-то образом задаем префикс /behavior/
    тогда путь, который ты будешь разбивать через explode добывается так:

    $request = substr($_SERVER['REQUEST_URI'], strlen($prefix));
    if (($p = strpos($request, '?')) !== FALSE) {
    $request = substr($request, 0, $p);
    }

    кроме всего, еще и GET переменные отрезаются
    ιιlllιlllι унц-унц
  • phpdude

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

    Spritz Апрель 14, 2010, 5:12 п.п., спустя 4 минуты 12 секунд

    намудрили :)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Апрель 14, 2010, 5:26 п.п., спустя 13 минут 7 секунд

    так а в моем коде мы получаем baseSiteUrl а не Base_Path
    Спустя 37 сек.
    а никто не работал в Owox'е?

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