Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2016, 20:55   #11
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию

predefined, большое спасибо за столь подробный ликбез.

Цитата:
Сообщение от predefined Посмотреть сообщение
Ваш вариант парсинга тоже рабочий, но сломается на url с query-string: stranica-1.html?k=4
Хм, действительно сломается. Хоть на сайте и не подразумевается наличие таких url'ов, но они могут возникнуть если совершать переход из формы комментариев. Спасибо за подсказку.
чебургатор вне форума Ответить с цитированием
Старый 08.08.2016, 21:55   #12
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию

predefined, кстати при формате url как stranica-1.html?k=4 либо stranica-1.html#kjudgvbd либо stranica-1.html?ref=site.ru мой скрипт работает правильно. Вот только что перепробовал эти варианты
чебургатор вне форума Ответить с цитированием
Старый 09.08.2016, 11:22   #13
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от чебургатор Посмотреть сообщение
predefined, кстати при формате url как stranica-1.html?k=4 либо stranica-1.html#kjudgvbd либо stranica-1.html?ref=site.ru мой скрипт работает правильно. Вот только что перепробовал эти варианты
Да, но на грани фола:
PHP код:
$_SERVER['REQUEST_URI'] = 'stranica-5.html?ref=site.ru';

$url substr($_SERVER['REQUEST_URI'], 0, -5);
echo 
$url.'<br>'// stranica-5.html?ref=si

$url_prev $url_next explode('-'$url);
echo 
print_r($url_prevTRUE).'<br>';
// В $url_prev и $url_next имеем:
// [0] => stranica
// [1] => 5.html?ref=si

$url_prev[1] -= 1;  // $url_prev[1] = 5.html?ref=si - 1
// получаем 4 тк при сложении PHP преобразует строку в число (отбрасывает все последующие неЦифры)

$url_next[1] += 1;

// В $url_prev имеем:
// [0] => stranica
// [1] => 4
$url_prev implode('-'$url_prev).'.html'// Собирает stranica-4 + '.html' 
Некрасивое место: $url_prev[1] - = 5.html?ref=si, опасно полагаться на автоматическое преобразование типов в PHP.
Посмотрите, что будет при $_SERVER['REQUEST_URI'] = 'stranica-M.html';

И, к тому же, у вас query-striing ?ref=si потерялась, а она должна быть в $url_prev/$url_next, иначе какой в ней был смысл...


А якоря (#...) из Url вида stranica-1.html#kjudgvbd не посылаются на сервер. Всё, что идёт после #... браузер обрабатывает локально - прокручивает на элемент с id='идентификатор_после_#'.
Поэтому на них проверять не имеет смысла.

Последний раз редактировалось predefined; 09.08.2016 в 11:27.
predefined вне форума Ответить с цитированием
Старый 09.08.2016, 11:59   #14
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Грамотный обработчик $_SERVER['REQUEST_URI'] для вашей листалки должен быть примерно таким:
PHP код:
if (preg_match('/(.+\-)(\d+)(\.html)(.*)/'$_SERVER['REQUEST_URI'], $match)) {
 
// echo print_r($match, TRUE).'<br>';
 //    [0] => stranica-66.html
 //    [1] => stranica-
 //    [2] => 66
 //    [3] => .html
 //    [4] => ?ref=si  или пусто если нет ?...
  
unset($match[0]);                // первый элемент(совпадение с полным шаблоном) нам не нужен
  
$pageN $match[2];
  if (
$pageN >1) {                // 1 и менее - некуда листать назад
    
$match[2] = $pageN -1;
    
$url_prev implode(''$match);
    }
  else 
$url_prev '';
  
$match[2] = $pageN +1;
  
$url_next implode(''$match);
  }
else { 
$url_prev ''$url_next ''; } // Листалки нет, ибо Url не по формату 
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу изменять цвет отдельного символа DenHaz Visual C++ 0 08.04.2013 12:38
Постраничная навигация и $_SERVER['REQUEST_URI'] Predator199 PHP 1 16.12.2012 19:07
Передаю в элемент списка объект и не могу вызвать метод этого объекта. Len_a Общие вопросы C/C++ 1 21.12.2011 13:15
$_SERVER['HTTP_REFERER'] gunsoy PHP 4 14.06.2011 08:57