Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите допилить фильтр

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: пока я с ума не сошел
nkl
Отправлено: 28 Февраля, 2012 - 23:25:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Итак, вот код, который я написал с того момента, как завел эту тему:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. ini_set('display_errors',1);
  4. if ($_GET['type']) $link = $link.'type='.$_GET['type'];
  5. if ($_GET['cat']) $link = $link.'cat='.$_GET['cat'];
  6. if ($_GET['param']) $link = $link.'param='.$_GET['param'];
  7. if (substr($link, 0, 1) != '?') $link = '?'.$link;
  8. if (substr($link, 0, 1) != '&') $link = $link.'&';
  9.  
  10. $type_link = $link;
  11. $cat_link = $link;
  12. $param_link = $link;
  13.  
  14. $type_del = 'type='.$_GET['type'];
  15. $cat_del = 'cat='.$_GET['cat'];
  16. $param_del = 'param='.$_GET['param'];
  17.  
  18. if (strstr($type_link, 'type')) $type_link = str_replace($type_del, "", $link);
  19. if (strlen($type_link) <= 2) $type_link = substr_replace($type_link ,"",-1);
  20.  
  21. if (strstr($cat_link, 'cat')) $cat_link = str_replace($cat_del, "", $link);
  22. if (strlen($cat_link) <= 2) $cat_link = substr_replace($cat_link ,"",-1);
  23.  
  24. if (strstr($param_link, 'param')) $param_link = str_replace($param_del, "", $link);
  25. if (strlen($param_link) <= 2) $param_link = substr_replace($param_link ,"",-1);
  26. ?>
  27. <html>
  28. <head>
  29. <title>Генерируем ссылки, бля!</title>
  30. </head>
  31. <body>
  32. <?php
  33. echo '<p align="center">';
  34. echo '<a href="'.$type_link.'type=1">Тип1</a> : ';
  35. echo '<a href="'.$type_link.'type=2">Тип2</a> : ';
  36. echo '<a href="'.$type_link.'type=3">Тип3</a></p>';
  37.  
  38. echo '<p align="center">';
  39. echo '<a href="'.$cat_link.'cat=1">Категория1</a> :';
  40. echo '<a href="'.$cat_link.'cat=2">Категория2</a> :';
  41. echo '<a href="'.$cat_link.'cat=3">Категория3</a></p>';
  42.  
  43. echo '<p align="center">';
  44. echo '<a href="'.$param_link.'param=1">Параметр1</a> :';
  45. echo '<a href="'.$param_link.'param=2">Параметр2</a> :';
  46. echo '<a href="'.$param_link.'param=3">Параметр3</a></p>';
  47. ?>
  48. <?php
  49. echo '<H3 align="center">$link = "'.$link.'"</H3>';
  50. echo $del;
  51. echo '<br />';
  52. echo $link;
  53. echo '<br />';
  54. echo 'Для типа '.$type_link;
  55. echo '<br />';
  56. echo 'Для категории '.$cat_link;
  57. echo '<br />';
  58. echo 'Для параметра '.$param_link
  59.  
  60. ?>
  61. </body>
  62. </html>
  63.  

Результат работы сего скрипта можно видеть вот тут
С двумя параметрами параметрами фильтра, скрипт работает на "ура", но вот выбрать третий, еще не выбранный до селе параметр невозможно, сценарий генерирет для него какую-то лажу, вернее не лажу, он всего лишь не ставит между параметрами знак тильды.

В общем-то пока сделаю фильтр по двум параметрам, а уже потом добавлю третий, потому как еще постраничный вывод этого каталога запилить надо. Буду очень рад, за любую помощь в написании этого фильтра на 3 параметра.
 
 Top
Uchenik
Отправлено: 29 Февраля, 2012 - 06:01:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




=)
Ну можно было обойтись и без матов в коде.
И я не понял зачем столько echo, если можно всё вывести в одном?
И зачем создавать целых 3 тела программы? Имеется ввиду <?PHP ?> Это безграмотно, и вообще небезопасно. Самый идеальный вариант, полностью убрать HTML из скрипта, а в скрипте не ставить ?> Если в коде появится что-то лишнее, то это вызовит ошибку, что согласитесь намного лучше чем, ечли это "что-то" сработает на клиентской машине.
Вообще в чем суть кода? Может можно придумать что-то более логичное?

(Отредактировано автором: 29 Февраля, 2012 - 06:09:58)

 
 Top
nkl
Отправлено: 29 Февраля, 2012 - 06:08:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




С учетом катастрофической нехватки времени о валидности речь сейчас не идет, главное что бы скрипт делал, то что мне нужно.
 
 Top
DelphinPRO
Отправлено: 29 Февраля, 2012 - 06:28:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




чет вы нагородили...

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function createLink($t, $v)
  3. {
  4.         $params = array();
  5.         $link = '';
  6.        
  7.         if ($t == 'type') {
  8.                 $params[] = 'type='.$v;
  9.         }
  10.         elseif (isset($_GET['type'])) {
  11.                 $params[] = 'type='.$_GET['type'];
  12.         }
  13.        
  14.         if ($t == 'cat') {
  15.                 $params[] = 'cat='.$v;
  16.         }
  17.         elseif (isset($_GET['cat'])) {
  18.                 $params[] = 'cat='.$_GET['cat'];
  19.         }
  20.        
  21.         if ($t == 'param') {
  22.                 $params[] = 'param='.$v;
  23.         }
  24.         elseif (isset($_GET['param'])) {
  25.                 $params[] = 'param='.$_GET['param'];
  26.         }
  27.        
  28.         if (count($params) > 0) {
  29.                 $link = 'index3.php?'.implode('&', $params);
  30.                 return $link;
  31.         }
  32.         return 'index3.php';
  33.        
  34. }
  35.  
  36. ?>
  37. <html>
  38. <head>
  39. <title>Генерируем ссылки, бля!</title>
  40. </head>
  41. <body>
  42. <p align="center">
  43.         <a href="<?php echo createLink('type',1);?>">Тип1</a> :
  44.         <a href="<?php echo createLink('type',2);?>">Тип2</a> :
  45.         <a href="<?php echo createLink('type',3);?>">Тип3</a></p>
  46.  
  47. <p align="center">
  48.         <a href="<?php echo createLink('cat',1);?>">Категория1</a> :
  49.         <a href="<?php echo createLink('cat',2);?>">Категория2</a> :
  50.         <a href="<?php echo createLink('cat',3);?>">Категория3</a></p>
  51.  
  52. <p align="center">
  53.         <a href="<?php echo createLink('param',1);?>">Параметр1</a> :
  54.         <a href="<?php echo createLink('param',2);?>">Параметр2</a> :
  55.         <a href="<?php echo createLink('param',3);?>">Параметр3</a></p>
  56.  
  57. <p>Сейчас выбраны:</p>
  58. <p>Тип: <b><?php echo isset($_GET['type']) ? $_GET['type'] : 'Не выбран'; ?></b></p>
  59. <p>Категория: <b><?php echo isset($_GET['cat']) ? $_GET['cat'] : 'Не выбран'; ?></b></p>
  60. <p>Параметр: <b><?php echo isset($_GET['param']) ? $_GET['param'] : 'Не выбран'; ?></b></p>
  61. </body>
  62. </html>


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Uchenik
Отправлено: 29 Февраля, 2012 - 06:34:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




DelphinPRO
Тоже многовато. Я бы сделал так:
Links.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. for ($i = 1; $i <= 3; $i++) //задаём начало счетчика 1 увеличиваем пока i не дойдёт до 3
  3.         {
  4.    $TypeLink.='<a href="?type='.$i.'">Тип '.$i.'</a> ';
  5.         }
  6. if (!empty($_GET['type']))//если существует $_GET['type'] и она не пустая генерим категорию
  7. {
  8.         for ($i = 1; $i <= 3; $i++) {
  9.    $CatLink.='<a href="?type='.$_GET['type'].'&cat='.$i.'">Категория '.$i.'</a> ';
  10.         }
  11. }
  12. if (!empty($_GET['type'])&&(!empty($_GET['cat'])))//если существует и тип и категория, генерируем параметры
  13. {
  14.         for ($i = 1; $i <= 3; $i++) {
  15.    $Params.='<a href="?type='.$_GET['type'].'&cat='.$_GET['cat'].'&param='.$i.'">Параметр '.$i.'</a> ';
  16.         }
  17. }
  18. require_once 'links.tpl';

Links.tpl
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2.         <head>
  3.                 <title>
  4.                 </title>
  5.         </head>
  6.         <body>
  7.         <?=$TypeLink?></br>
  8.         <?=$CatLink?></br>
  9.         <?=$Params?></br>
  10.         </body>
  11.         </html>

В моём варианте:
1. дочерние ссылки будут появляться только в том случае, если выбрана ссылка, которая выше в "дереве"
2. плюс в моём варианте идёт проверка на пустоту передаваемых переменных, т.е. если допустим существует type, но она ничему не равна, ссылки создаваться не будут.
3. можно указать любое колличество генерируемых ссылок. Можно кстати вообще вместо количества поставить переменную, которую можно изменять допустим из панели администратора, если таковая имеется.

(Отредактировано автором: 29 Февраля, 2012 - 07:41:44)

 
 Top
DelphinPRO
Отправлено: 29 Февраля, 2012 - 06:41:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Uchenik пишет:
Тоже многовато. Я бы сделал так:


а если я захочу выбрать элементы всех типов категории "2" ?
в вашем коде, если не выбран тип, то фильтр категорий не отобразится.
Улыбка
Хотя, конечно, зависит от потребностей в данном случае.

и, да, пожалуй, лучше empty()

(Отредактировано автором: 29 Февраля, 2012 - 06:43:12)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Uchenik
Отправлено: 29 Февраля, 2012 - 06:42:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Цитата:
всех типов категории

В таком случае нужно генерить не линки, а чеки =)
Но мне кажется так логичней, по логике нельзя выбрать параметр, если не выбрана категория, или нет типа.

(Отредактировано автором: 29 Февраля, 2012 - 06:43:28)

 
 Top
DelphinPRO
Отправлено: 29 Февраля, 2012 - 06:45:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Uchenik пишет:
Но мне кажется так логичней, по логике нельзя выбрать параметр, если не выбрана категория, или нет типа.


Не всегда. Допустим каталог мобильных телефонов. Их можно отфильтровать по производителю, а можно по, например, наличию сенсорного экрана. В вашем случае нельзя выбрать телефоны всех производителей с сенсорным экраном.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Uchenik
Отправлено: 29 Февраля, 2012 - 06:51:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




DelphinPRO пишет:
Uchenik пишет:
Но мне кажется так логичней, по логике нельзя выбрать параметр, если не выбрана категория, или нет типа.


Не всегда. Допустим каталог мобильных телефонов. Их можно отфильтровать по производителю, а можно по, например, наличию сенсорного экрана. В вашем случае нельзя выбрать телефоны всех производителей с сенсорным экраном.

Выпадающие списки! =)
 
 Top
nkl
Отправлено: 29 Февраля, 2012 - 09:04:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




DelphinPRO, просто ОГРОМНОЕ СПАСИБИЩЕ! Ваш вариант пока работает без глюков.

Цитата:
Выпадающие списки! =)

По дизайну они там не уместны, если бы они, я бы вообще не парился. Я еще очень слабенький работаю со строками. Когда читал самоучитель, попросту пропустил раздел Строки, думал что они не так уж и важны в программировании на php.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB