|
|
|
| Имеем следующую строку с передачей параметров:
http://localhost/messages.php?user=ivanov&sort=date
Здесь ищем все сообщения пользователя ivanov и сортируем их по дате.
На странице предлагается выбрать также алфавитную сортировку по теме сообщения.
Проблемы начинаются здесь:
echo ('<a href="?sort=theme">Сортировать по теме</a>');
|
Такая ссылка выведет нас на адрес
http://localhost/messages.php?sort=theme
В результате этого пропадает важная переменная user.
Первое что пришло мне на ум:
if (preg_match('/\?*=/', $_SERVER['REQUEST_URI'])) $href_char="&";
else $href_char="?";
echo ('<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$href_char.'sort=theme">Сортировать по теме</a>');
|
Получилось громоздко и в корне не верно. Теперь &sort=*** добавляется к текущей адресной строке при каждой новой сортировке. В результате через несколько сортировок получаются в строке адреса подобные монстры:
http://localhost/messages.php?user=ivanov&sort=date&sort=theme&sort=date&sort=theme
Вижу выход только в уничтожении подстроки "sort=***" в строке адреса через preg_replace.
Наверняка, я жутко туплю. Почти уверен, что это можно сделать как-то проще..
Но никаких элегантных идей мне в голову не лезет. Подскажите, пожалуйста. | |
|
|
|
|
|
|
|
для: illuzion
(10.02.2010 в 15:01)
| |
<?
echo ("<a href='?sort=theme&user=".$_GET['user']."'>Сортировать по теме</a>");
|
| |
|
|
|
|
|
|
|
для: DJ Paltus
(10.02.2010 в 15:09)
| | Все гениальное просто :)
Спасибо. Для описанного случая это и правда элегантное решение.
Но если нужно будет передать еще парочку переменных?
Притом, не все из них гарантированно будут присутствовать в адресной строке.
Придется проверять, есть такая переменная или нет, и добавлять, если есть? :) | |
|
|
|
|
|
|
|
для: illuzion
(10.02.2010 в 15:15)
| | Ну есть два основных массива - гет и пост. После передачи из формы или перехода по ссылке с параметрами, переменные в них живут на следующей странице. И ими надо пользоваться, правда? Вот так это и делается. Думаете, ссылка "http://www.softtime.ru/forum/addpost.php?id_forum=1&id_theme=71779&id_post=422182" так страшно выглядит просто так? Это передана куча параметров, которые уже повтыкнуты в текст страницы и будут использованы и далее. | |
|
|
|
|
|
|
|
для: DJ Paltus
(10.02.2010 в 15:26)
| | Она так страшно выглядит, потому что каждая переменная в ней нужна, чтобы попасть на необходимую страницу. Логика этой ссылки отличается от той, которую нужно сконструировать мне. Потому что переменные сортировки, группировки и т.д. и т.п. могут присутствовать в строке адреса, а могут опускаться, притом независимо друг от друга.
Например со ссылки
http://localhost/elements.php?user=ivanov&sort=year&group=author&rating=10
надо перейти на ссылку
http://localhost/elements.php?user=ivanov&sort=rating&group=author&rating=10
Если руководствоваться Вашим прмером, это будет выглядеть так:
<?
echo ("<a href='?sort=rating&user=".$_GET['user']."&group=".$_GET['group']."&rating=".$_GET['rating']."'>Сортировать по рейтингу</a>");
?>
|
Но дело в том, что мы не можем быть уверены, что переменные group и rating присутствуют в запросе, потому что они необязательны. Например, адресная строка будет выглядеть следующим образом:
http://localhost/elements.php?user=ivanov&sort=year
|
Тогда указанный скрипт выведет следующую ссылку:
<a href="?sort=rating&user=ivanov&group=&rating=">Сортировать по рейтингу</a>
|
| |
|
|
|
|
|
|
|
для: illuzion
(10.02.2010 в 15:52)
| |
Тогда указанный скрипт выведет следующую ссылку:
<a href="?sort=rating&user=ivanov&group=&rating=">Сортировать по рейтингу</a>
|
В этом нет ничего страшного, обычнотпроверяется не только наличие переменной в запросе но и ее непустотность, так сказать... | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.02.2010 в 16:15)
| | Вы имеете в виду, обычно проверяется при их получении?
Мне просто не хочется чтобы пользователь видел эти пустые переменные в строке браузера.
Я из чисто эстетических побуждений, понимаете ли.. | |
|
|
|
|
|
|
|
для: illuzion
(10.02.2010 в 15:52)
| | Так и думайте, где хранить, откуда брать и в каких случаях подставлять данные в переменные. | |
|
|
|