|
|
|
| Есть ссылки:
print "<a href='?a=1'>Ссылка 1</a><br />";
print "<a href='?a=2'>Ссылка 2</a><br />";
print "<a href='?a=3'>Ссылка 3</a>";
Подскажите, пожалуйста, как сделать так, чтобы при нажатии на первую ссылку, ее гет-параметр писался во все остальные ссылки?
А в первой ссылке - не писался:
print "<a href='?a=1'>Ссылка 1</a><br />";
print "<a href='?a=2&par=1'>Ссылка 2</a><br />";
print "<a href='?a=3&par=1'>Ссылка 3</a>";
При нажатии на вторую - опять параметр добавлялся, но во второй ссылке - все по прежнему:
print "<a href='?a=1&par=2'>Ссылка 1</a><br />";
print "<a href='?a=2&par=1'>Ссылка 2</a><br />";
print "<a href='?a=3&par=1&par2=2'>Ссылка 3</a>";
Есть вариант в каждой ссылке прописать $par = $par1 . $par2 . $par3 . $par4; - и если не пустое, выводить. но пока ни так, ни так не получается.
И третий вариант - записать в сессию, только сессия у меня получается внутри рекурсии. Опять ерунда... | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 22:14)
| | помнится, вы в одной из ранних тем упрекали кого-то что он создаем глупые (или в таком роде) темы :) | |
|
|
|
|
|
|
|
для: psychomc
(17.06.2010 в 23:35)
| | помнится, вы в одной из ранних тем говорили, что не надо втупую умничать и если не знаешь, чем помочь - проходи мимо.
Скатертью дорожкой :) | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 23:40)
| | знаю чем помочь - видимо форумом ошиблись ))
да и сама задача настолько некорректна, что плакать хочется | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 22:14)
| | Может, вы лучше задачу опишите? Ну, какое-то сомнительное решение, право.. | |
|
|
|
|
|
|
|
для: neadekvat
(17.06.2010 в 23:38)
| | Решение действительно не очень хорошее.
Но как сделать - не знаю, варианты многие перепробовала.
Задача такая. На страницу рекурсивно выводится дерево ссылок.
При нажатии на одну ссылку - id ее категории должен прописываться в других ссылках как гет-параметр.
Зайдите сюда -http://hotline.ua/gd/72/7216-7217-1016/. Здесь товары ищутся по фильтру. В адресной строке 7216-7217-1016 - это ид категорий, которые пользователь выбрал для поиска.
Мне надо сделать аналогичный фильтр. | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 23:45)
| | http://www.softtime.ru/forum/addpost.php?id_forum=1&id_theme=74526&id_post=439041
http://www.softtime.ru/forum/addpost/1-74526-439041/
rewrite, implode
кажется так | |
|
|
|
|
|
|
|
для: Рома
(17.06.2010 в 23:53)
| | не понятно, как через implode. | |
|
|
|
|
|
|
|
для: Лена
(18.06.2010 в 00:08)
| | очепятка по невнимательности, explode конечно же имелся в виду. | |
|
|
|
|
|
|
|
для: Рома
(17.06.2010 в 23:53)
| | Такое чувство, что вы сейчас про реализацию ЧПУ говорите. | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 23:45)
| | Хм...а вам обязательно ссылками? можно расставить чекбоксы, например, и при добавлении чекбокса отправлять форму с id включеных чекбоксов. Ну, расставить чекбосы по местам после перезагрузки страницы - уже дело техники.
А если делать точь в точь, как на показанном сайте..
Создать функицю, которая в качестве аргумента принимает id категории (т.е. она будет формировать ссылки для категорий). Допустим, что исходный адрес (в вашем случаи это http://hotline.ua/gd/72 ) известен, значит, все то, что дальше - это уже пункты фильтра. Ищем (обычным strpos, в условии ставим "-%номер%-" тогда накладок не будет) переданный id - если его нет, то возвращаем весь кусман-фильтр + этот id.
Что-то такое:
<?php
function do_link($id)
{
$url = substr($_SERVER['REQUEST_URI'], strlen('/gd/72/'));
$pos = strpos($url, '-' . $id . '-');
if ($pos === false)
return $url . '-' . $id;
else
return $url;
}
|
Сделал по примеру вашей ссылки. Естесственно это только скетч, так сказать. Тем более, что эти строковые функции хрен запомнишь в какой последовательности принимают параметры.
В общем, так, хотя такое чувство, будто в меня сейчас будут камни кидать :)
Ну и формироваться ссылки так будут:
<a href="http://hotline.ua/gd/72/<?php echo do_link(123); ?>">Пункт</a>
|
Да, и еще.
Вот сейчас добавил "-" в функцию и думаю.
Если БЕЗ них - то может быть накладка. То есть проверяем каталог с id 123, а он его находит в каталоге с id 1234.
Если с ними - то очевидно, если id будет стоять в начале или в конце (или и там и там :) ), то его не найдет и добавит к ссылке.
Так что, наверное, лучше проверять регуляркой - просто чтобы с обеих сторон не было цифер. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 00:08)
| | neadekvat, спасибо, сейчас буду пробовать на своем, отпишусь, что получится. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 00:08)
| | Я делаю так:
Скрипт par.php
<?php
function do_link($id)
{
$url = substr($_SERVER['REQUEST_URI'], strlen('par/cat/72/id/'));
$pos = strpos($url, '-' . $id . '-');
if ($pos === false)
return $url . '-' . $id;
else
return $url;
}
?>
<a href="par/cat/72/id/<?php echo do_link(123); ?>">Пункт</a><br />
<a href="par/cat/72/id/<?php echo do_link(34); ?>">Пункт2</a><br />
<a href="par/cat/72/id/<?php echo do_link(12); ?>">Пункт3</a>
|
И условие для модреврайта:
RewriteEngine on
RewriteBase /
RewriteRule ^par/cat/([0-9]+)/id/([0-9]+)$ par.php?cat=$1&id=$2 [L]
|
Ссылки нерабочие получаются. | |
|
|
|
|
|
|
|
для: Лена
(18.06.2010 в 00:55)
| | ^par/cat/([0-9]+)/id/([0-9]+)$
Там ведь не только цифры могут быть.
А еще в $_SERVER['REQUEST_URI'] попадает строка, начиная с /, по-моему, то есть по идее должно быть так:
substr($_SERVER['REQUEST_URI'], strlen('/par/cat/72/id/'))
И вообще странно, что вы не можете найти, в какой момент скрипт перестает работать как запланировано :)
И прочитайте мой пост - я два раза его дополнял. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 01:01)
| | RewriteRule ^par/cat/([0-9]+)/id/([0-9\-]+)$ par.php?cat=$1&id=$2 [L]
$_SERVER['REQUEST_URI'] у меня выдает /par.php
Я наверное, уже спать пойду, завтра проверку через регулярку напишу. | |
|
|
|
|
|
|
|
для: Лена
(18.06.2010 в 01:24)
| | > RewriteRule ^par/cat/([0-9]+)/id/([0-9\-]+)$ par.php?cat=$1&id=$2 [L]
Тут обратный слэш не нужен, насколько я помню рег.выражения. То есть "-" воспринимается как "-", если он не является перечислением. А вот прямой слэш скорее всего надо добавить, т.к. браузеры любят в конце добавлять его.
> $_SERVER['REQUEST_URI'] у меня выдает /par.php
http://www.softtime.ru/info/articlephp.php?id_article=69
Попробуйте разные индексы (нужный вам будет ближе к концу страницы), вы должны иметь всю строку, кроме адреса. Но именно ту, что видит пользователь, то есть ДО того, как включается ваш реврайт.
> Я наверное, уже спать пойду
Я благословляю вас.
> проверку через регулярку напишу
"/[^\d]$id[^\d]/"
По-моему, так :) Разве что в конце строки в любом случаи должен быть хотя бы прямой слэш (можно $url = rtrim($url, '/') . '/' и проверять).
Можно было бы "заглядывания", но по-моему [^\d] в заглядывании не работает :) Хотя пробуйте, не рискну больше за парсер выступать.
P.S. у меня почему столько "неуверенности" (скорее всего, по-моему) - я пишу, не тестируя, но вы проверьте все варианты, а то потом на мелочи будет скрипт запарываться - хрен найдете, мягко говоря. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 01:35)
| | Сделала пока без модреврайт. Попробовала вывести весь список из базы, вроде как нормально работает.
Но с проверкой по паттерну не проходит. Я ее пока закомментила.
<?
function do_link($id){
$url = substr($_SERVER['REQUEST_URI'], strlen('/prop.php?id='));
$pos = strpos($url, '-' . $id . '-');
//if (preg_match("/[^\d]" . $id . "[^\d]/u", $url)){
//$url = rtrim($url, '/');
if ($pos === false){
if($url == '')
return $id;
else
return $url . '-' . $id;
}else
return $url;
//}
}
?>
<a href="par.php?id=<?php echo do_link(123); ?>">Пункт</a><br />
<a href="par.php?id=<?php echo do_link(34); ?>">Пункт2</a><br />
<a href="par.php?id=<?php echo do_link(12); ?>">Пункт3</a>
|
| |
|
|
|
|
|
|
|
для: Лена
(18.06.2010 в 11:10)
| |
<?php
if (preg_match("/[^\d]" . $id . "[^\d]/u", $url)){
$url = rtrim($url, '/');
|
Это надо местами поменять :)
<?php
$url = rtrim($url, '/');
if (preg_match("/[^\d]" . $id . "[^\d]/u", $url)){
|
| |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 00:08)
| | $url = substr($_SERVER['REQUEST_URI'], strlen('/gd/72/'));
$pos = strpos($url, '-' . $id . '-');
..............
есть parse_str. | |
|
|
|
|
|
|
|
для: sim5
(18.06.2010 в 10:18)
| | А она(функция) разве не строку вида ?par1=value1&par2=value2 разбивает? А тут я предлагаю работать и формировать ссылки, которые будет видеть пользователь. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 11:56)
| |
<?
$a = parse_url('?a=3&par=1&par2=2');
print_r($a);
parse_str($a['query']);
echo '<br>'.$a.'<br>'.$par.'<br>'.$par2;
|
| |
|
|
|
|
|
|
|
для: sim5
(18.06.2010 в 12:11)
| |
<?php
$a = parse_url('/par/value/par2/value2');
print_r($a); // Array ( [path] => /par/value/par2/value2 );
|
Я же говорю - предложил работать с исходной строкой в виде ЧПУ, а не с рабочими параметрами, которые пользователь видеть не должен.
В принципе, таки Лена исполнитель, и, я думаю, она уже сама решит, применять эту функцию или нет. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 12:15)
| | Я вашего ЧПУ вообще не касаюсь, я вижу как в РНР разбирается строка запроса. К тому же, ЧПУ перенаправит на скрипт и опять таки отдаст скрипту не '/par/value/par2/value2', а иное, не так ли?
Не мутите воду. | |
|
|
|
|
|
|
|
для: sim5
(18.06.2010 в 12:22)
| | Скрипту, да, отдаст.
Но нам-то надо ссылку сформировать для пользователя, именно в виду ЧПУ.
И чем гонять параметры из ЧПУ обратно и снова в ЧПУ - проще работать с одной строкой. Ну, мне было бы проще. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 12:27)
| | Да формируйте на здоровье, я запрещаю что-ли?
Я вижу разбор url запроса, есть для этого функции, вот и все. | |
|
|
|
|
|
|
|
для: neadekvat
(18.06.2010 в 12:15)
| | Спасибо большое, что помогли. Только что закончила, вывесила пока что сюда - http://zubadan.inexbuild.com/prop.php, заказ шел без дизайна, поэтому выглядит все просто.
Единственное, что пришлось добавить в вашу функцию, так это еще и привязку к постраничной навигации:
<?php
$page1 = $_GET['page_num'];
function do_link($id,$page1){
if($page1)
$page_num = 'page_num=' . $page1 . '&';
$url = substr($_SERVER['REQUEST_URI'], strlen('/prop.php?' . $page_num . 'id='));
$pos = strpos($url, '-' . $id . '-');
//ну и так дальше....
|
А вот с if (preg_match("/[^\d]" . $id . "[^\d]/u", $url)) так и не получилось ничего, но мне кажется, что оно на результат не влияет. | |
|
|
|
|
 189.6 Кб |
|
|
для: Лена
(19.06.2010 в 16:55)
| | Увы, к ссылкам таки добавляется уже выбранное (аттач)
(мышка на пункте LESSAR)
Это то, о чем я говорил: если id в начале или в конце, то не сработает, ибо там нет "-". Потому заставляйте работать регулярку. | |
|
|
|
|
|
|
|
для: neadekvat
(19.06.2010 в 17:00)
| | LESSAR - такая гадость, не дай шайтан..
Кондиционеры, я имею в виду. | |
|
|
|
|
|
|
|
для: Trianon
(19.06.2010 в 17:33)
| | Ок, товар марки LESSAR покупать не буду :) | |
|
|
|
|
|
|
|
для: neadekvat
(19.06.2010 в 17:00)
| | Ну не хочет у меня регулярка работать. Извратилась :))
<?php
function do_link($id,$page1){
if(strpos($_GET['id'],"-"))
$arr = explode('-',$_GET['id']);
if($page1)
$page_num = 'page_num=' . $page1 . '&';
$url = substr($_SERVER['REQUEST_URI'], strlen('/prop.php?' . $page_num . 'id='));
$pos = strpos($url, '-' . $id . '-');
$url = rtrim($url, '/');
if(!in_array($id,$arr)){
//if (preg_match("/[^\d]" . $id . "[^\d]/u", $url)){
if ($pos === false){
if($url == '')
return $id;
else
return $url . '-' . $id;
}else
return $url;
//}
}else{
return $url;
}
}
?>
|
Я на хосте не меняла, там все по старому. | |
|
|
|
|
|
|
|
для: Лена
(19.06.2010 в 20:45)
| | Так, два вопроса по регулярке:
1. Зачем модификаор u, если вы с цифрами работаете?
2. у вас как-то условие странно..то есть, если вхождения есть - то участок надо _пропустить_, НЕ выполнять, а у вас все наоборот, если вхождения есть, то к ссылке добавлялся кусок, а если нет - то ничего не добавлялось)
Хотя решение с массивом неплохой. Вот только..если в _GET['id'] нет "-", то как работает in_array, ведь $arr не будет существовать.
Ну, или меня глючит уже, - этим можно завершить оба абзаца :) | |
|
|
|
|
|
|
|
для: neadekvat
(19.06.2010 в 21:07)
| | >1. Зачем модификаор u, если вы с цифрами работаете?
Думала, что если utf, то 1 символ == переменное число байтов, в том числе и цифры. А сейчас посмотрела, это касается, как я поняла, только русских букв.
Я регвыражениями пользуюсь в самых крайних случаях :) поэтому и сноровки еще нет.
>2. у вас как-то условие странно..то есть, если вхождения есть - то участок надо _пропустить_, НЕ >выполнять, а у вас все наоборот, если вхождения есть, то к ссылке добавлялся кусок, а если нет - то >ничего не добавлялось)
Все правильно :) условие поменяла - заработало. Только мне надобность в этом отпала. Попросили, что если фильтр выбран - его больше не показывать, показывать только в списке выбранных. Можете зайти по ссылке, что я выше давала, посмотреть.
>Хотя решение с массивом неплохой. Вот только..если в _GET['id'] нет "-", то как работает in_array, ведь >$arr не будет существовать.
Добавила проверку на существование $arr | |
|
|
|
|
|
|
|
для: Лена
(20.06.2010 в 16:43)
| | Так-с. По идее, если фильтр выбран, то мне нужна возможность убрать этот фильтр - у вас это возможности не предусмотрено) Имеется в виду, что, возможно, я захочу убрать конкретную категорию, а не только все фильтры.
А про массив - лучше не существование проверять, а просто объявить пустой массив где-нибудь повыше и все. | |
|
|
|
|
|
|
|
для: neadekvat
(20.06.2010 в 17:26)
| | >Так-с. По идее, если фильтр выбран, то мне нужна возможность убрать этот фильтр - у вас это возможности не предусмотрено) Имеется в виду, что, возможно, я захочу убрать конкретную категорию, а не только все фильтры.
>
Убрать фильтр - напротив каждого названия фильтра можно было бы крестик какой-нибудь поставить.Кликаем по крестику - в пришедших гет-параметрах удаляем элемент с id == id нажатого фильтра.
Мне тут дополнительных задач столько надавали по этому скрипту, что хорошо, что им в голову еще это удаление не пришло... | |
|
|
|
|
|
|
|
для: Лена
(21.06.2010 в 12:36)
| | Тогда фильтр не должен быть ссылкой, если крестик.
Вы как фрилансер или каг бэ в офисе? Я, если доработки по стоимоти больше 50$ уже дорабатываю с доплатой (если, конечно, крупный проект - то там иначе, но у вас, насколько я понял, только этот фильтр, даже без дизайна) | |
|
|
|
|
|
|
|
для: neadekvat
(21.06.2010 в 14:23)
| | вы как в воду глядели. Сказали удаление фильтра делать при клике на ссылке.
звери! :) | |
|
|
|
|
|
|
|
для: Лена
(21.06.2010 в 22:16)
| | Просто, судя по всему, вам надо было сделать по данному примеру, а в примере именно так и было реализовано :) | |
|
|
|
|
|
|
|
для: Лена
(20.06.2010 в 16:43)
| | >Думала, что если utf, то 1 символ == переменное число байтов, в том числе и цифры. А сейчас посмотрела, это касается, как я поняла, только русских букв.
Не только.
Всё за пределами latin0 уходит в u .
Так что чтобы не думать, я б оставил модификатор на месте. | |
|
|
|
|
|
|
|
для: Trianon
(20.06.2010 в 19:17)
| | Все так серьезно.. Возьму на заметку.
Лена, пардон :) | |
|
|
|
|
|
|
|
для: Лена
(17.06.2010 в 22:14)
| | . | |
|
|
|