PageRenderTime 57ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/obsah.php/vyhledavani.php

https://github.com/GE3/GE3
PHP | 219 lines | 125 code | 36 blank | 58 comment | 0 complexity | a3ba7fe2900c4c13ce84e66eacad6d68 MD5 | raw file
  1. <?php
  2. If( $_GET["a"]=='vyhledavani' ){
  3. /**
  4. * Vyhledávání
  5. */
  6. $tmplVyhledavani = new GlassTemplate("templates/$CONF[vzhled]/vyhledavani.html");
  7. $hledej = $_POST["hledej"]?$_POST["hledej"]:$_GET["hledej"];
  8. /************************/
  9. /* VYHLEDÁVÁNÍ VE ZBOŽÍ */
  10. /************************/
  11. //////////////
  12. // SQL Dotaz
  13. //////////////
  14. $dotaz = Mysql_query("SELECT *, MIN(cenaSDph), MIN(cenaBezDph) FROM $CONF[sqlPrefix]zbozi
  15. WHERE (
  16. LOWER(kategorie) LIKE LOWER('%$hledej%') OR
  17. LOWER(podkat1) LIKE LOWER('%$hledej%') OR
  18. LOWER(podkat2) LIKE LOWER('%$hledej%') OR
  19. LOWER(podkat3) LIKE LOWER('%$hledej%') OR
  20. LOWER(produkt) LIKE LOWER('%$hledej%') OR
  21. LOWER(popis) LIKE LOWER('%$hledej%')
  22. )
  23. AND produkt!=''
  24. GROUP BY produkt
  25. ORDER BY id DESC
  26. LIMIT 50
  27. ") or die(mysql_error());
  28. ////////////////////
  29. // Zobrazení zboží
  30. ////////////////////
  31. $tmplProdukty = new GlassTemplate("templates/$CONF[vzhled]/produkty.html");
  32. $pocetNalezenych = 0;
  33. while($radek=mysql_fetch_array($dotaz) AND $hledej){
  34. $tmplProdukty->newBlok("produkt");
  35. $tmplProdukty->prirad("produkt.i", $pocetNalezenych+1);
  36. // Název produktu
  37. $tmplProdukty->prirad("produkt.nazev", $radek["produkt"]);
  38. // Číslo produktu
  39. $tmplProdukty->prirad("produkt.cislo", $radek["cislo"]);
  40. // Krátký popis
  41. $tmplProdukty->prirad("produkt.popisUvod", ereg_replace( " [^ ]*$", "", substr(strip_tags($radek["popis"]),0,180)) );
  42. // Ceny
  43. //dopočítání nezadaných cen
  44. $cenaSDph = $radek["MIN(cenaSDph)"]?$radek["MIN(cenaSDph)"]:($radek["MIN(cenaBezDph)"]*(1+$radek["dph"]/100));
  45. @$cenaBezDph = $radek["MIN(cenaBezDph)"]?$radek["MIN(cenaBezDph)"]:($radek["MIN(cenaSDph)"]/(1+$radek["dph"]/100));
  46. @$dph = $radek["dph"]?$radek["dph"]:($radek["cenaSDph"]/$radek["cenaBezDph"]*100-100);
  47. //zobrazení
  48. $tmplProdukty->prirad("produkt.cenaSDph", $cenaSDph);
  49. $tmplProdukty->prirad("produkt.cenaBezDph", $cenaBezDph);
  50. $tmplProdukty->prirad("produkt.dph", $dph);
  51. // Dostupnost
  52. $tmplProdukty->prirad("produkt.dostupnost", $radek["dostupnost"]);
  53. // Akční nabídka
  54. If($radek["akce"]) $tmplProdukty->prirad("produkt.akce", "ano");
  55. // Url
  56. If( $CONF["mod_rewrite"] ){
  57. //(informace pro nové url se berou ze stávající url. Pokud zde nejsou, zkusí se získat z db.)
  58. $kategorie = $_GET["kategorie"]? $_GET["kategorie"]: ($radek["kategorie"]? $radek["id"].'-'.urlText($radek["kategorie"]): '');
  59. $kategorie = $kategorie? ''.$kategorie.'/': '';
  60. $podkat1 = $_GET["podkat1"]? $_GET["podkat1"]: ($radek["podkat1"]? $radek["id"].'-'.urlText($radek["podkat1"]): '');
  61. $podkat1 = $podkat1? ''.$podkat1.'/': '';
  62. $podkat2 = $_GET["podkat2"]? $_GET["podkat2"]: ($radek["podkat2"]? $radek["id"].'-'.urlText($radek["podkat2"]): '');
  63. $podkat2 = $podkat2? ''.$podkat2.'/': '';
  64. $podkat3 = $_GET["podkat3"]? $_GET["podkat3"]: ($radek["podkat3"]? $radek["id"].'-'.urlText($radek["podkat3"]): '');
  65. $podkat3 = $podkat3? ''.$podkat3.'/': '';
  66. $produkt = ''.$radek["id"].'-'.urlText($radek["produkt"]).".html";
  67. $tmplProdukty->prirad("produkt.url", $CONF["absDir"]."produkty/".$kategorie.$podkat1.$podkat2.$podkat3.$produkt);
  68. }
  69. Else{
  70. //(informace pro nové url se berou ze stávající url. Pokud zde nejsou, zkusí se získat z db.)
  71. $kategorie = $_GET["kategorie"]? $_GET["kategorie"]: ($radek["kategorie"]? $radek["id"].'-'.urlText($radek["kategorie"]): '');
  72. $kategorie = $kategorie? '&kategorie='.$kategorie.'': '';
  73. $podkat1 = $_GET["podkat1"]? $_GET["podkat1"]: ($radek["podkat1"]? $radek["id"].'-'.urlText($radek["podkat1"]): '');
  74. $podkat1 = $podkat1? '&podkat1='.$podkat1.'': '';
  75. $podkat2 = $_GET["podkat2"]? $_GET["podkat2"]: ($radek["podkat2"]? $radek["id"].'-'.urlText($radek["podkat2"]): '');
  76. $podkat2 = $podkat2? '&podkat2='.$podkat2.'': '';
  77. $podkat3 = $_GET["podkat3"]? $_GET["podkat3"]: ($radek["podkat3"]? $radek["id"].'-'.urlText($radek["podkat3"]): '');
  78. $podkat3 = $podkat3? '&podkat3='.$podkat3.'': '';
  79. $produkt = '&produkt='.$radek["id"].'-'.urlText($radek["produkt"]);
  80. $tmplProdukty->prirad("produkt.url", "?a=produkty".$kategorie.$podkat1.$podkat2.$podkat3.$produkt);
  81. }
  82. // Url Do košíku
  83. $tmplProdukty->prirad("produkt.urlDoKosiku", "?a=kosik&b=pridat&produkt=".$radek["id"]."-".urlText($radek["produkt"]));
  84. // Obrázek
  85. $obrazek = ereg_replace("^;", "", $radek["obrazky"]);
  86. $obrazek = preg_replace("|^([^;]*).*$|","$1", $obrazek);
  87. If( $obrazek) $tmplProdukty->prirad("produkt.obrazek", "zbozi/obrazky/$obrazek");
  88. If(!$obrazek) $tmplProdukty->prirad("produkt.obrazek", file_exists("templates/$CONF[vzhled]/noPicture.jpg")?"templates/$CONF[vzhled]/noPicture.jpg":"templates/default/noPicture.jpg");
  89. $pocetNalezenych++;
  90. }
  91. $tmplVyhledavani->prirad("produkty", $tmplProdukty->getHtml());
  92. If( $pocetNalezenych==0 ) $tmplVyhledavani->prirad("zprava.text", "Žádné zboží nebylo nalezeno.");
  93. /***************************/
  94. /* VYHLEDÁVÁNÍ VE ČLÁNCÍCH */
  95. /***************************/
  96. //////////////
  97. // SQL Dotaz
  98. //////////////
  99. $dotaz = Mysql_query("SELECT * FROM $CONF[sqlPrefix]clanky
  100. WHERE (
  101. LOWER(nazev) LIKE LOWER('%$hledej%') OR
  102. LOWER(uvod) LIKE LOWER('%$hledej%') OR
  103. LOWER(obsah) LIKE LOWER('%$hledej%')
  104. )
  105. AND nazev!=''
  106. ORDER BY datum DESC
  107. LIMIT 50
  108. ") or die(mysql_error());
  109. ////////////////////
  110. // Zobrazení článků
  111. ////////////////////
  112. $tmplClanek = new GlassTemplate("templates/$CONF[vzhled]/clanek.html");
  113. $i = 0;
  114. While($radek=mysql_fetch_array($dotaz)){
  115. $i++;
  116. // Zobrazení
  117. $tmplClanek->newBlok("clanekPrehled");
  118. $tmplClanek->prirad("clanekPrehled.i", $i);
  119. $tmplClanek->prirad("clanekPrehled.nazev", $radek["nazev"]);
  120. If( $CONF["mod_rewrite"])$tmplClanek->prirad("clanekPrehled.url", "clanky/".$radek["id"]."-".urlText($radek["nazev"]).".html");
  121. If(!$CONF["mod_rewrite"])$tmplClanek->prirad("clanekPrehled.url", "?a=clanky&clanek=".$radek["id"]."-".urlText($radek["nazev"]));
  122. $tmplClanek->prirad("clanekPrehled.datum", @date("j.n.Y G:i",$radek["datum"]));
  123. $tmplClanek->prirad("clanekPrehled.uvod", $radek["uvod"]);
  124. $pocetNalezenych++;
  125. }
  126. $tmplVyhledavani->prirad("clanky", $tmplClanek->getHtml());
  127. $tmplVyhledavani->prirad("pocetNalezenych", $pocetNalezenych);
  128. ///////////////////////////
  129. // Statistiky vyhledávání
  130. ///////////////////////////
  131. $id = zjisti_z("$CONF[sqlPrefix]vyhledavani", "id", "text=LOWER('$hledej')");
  132. If( $id ){
  133. If( $pocetNalezenych>0 ) $dotaz = Mysql_query("UPDATE $CONF[sqlPrefix]vyhledavani SET rating=(rating+1) WHERE id=$id") or die(mysql_error());
  134. Else $dotaz = Mysql_query("UPDATE $CONF[sqlPrefix]vyhledavani SET rating=(rating-1) WHERE id=$id") or die(mysql_error());
  135. }
  136. Else{
  137. If( $pocetNalezenych>0 ) $dotaz = Mysql_query("INSERT INTO $CONF[sqlPrefix]vyhledavani(text,rating) VALUES (LOWER('$hledej'),1)") or die(mysql_error());
  138. If( $pocetNalezenych==0 ) $dotaz = Mysql_query("INSERT INTO $CONF[sqlPrefix]vyhledavani(text,rating) VALUES (LOWER('$hledej'),-1)") or die(mysql_error());
  139. }
  140. ///////////////////////
  141. // Tipy k vyhledávání
  142. ///////////////////////
  143. $tolerance = 5;
  144. $rating = zjisti_z("$CONF[sqlPrefix]vyhledavani", "rating", "text='$hledej'");
  145. $rating = ($rating>0)?$rating:'1';
  146. /* -- SQL Dotaz -- */
  147. If( $tolerance==0 ){
  148. /**
  149. * při toleranci 0 se jednoduše zeptáme
  150. */
  151. $soundexHledej = "SUBSTRING( SOUNDEX(LOWER('$hledej')), 1, 4)";
  152. $dotaz = Mysql_query("SELECT text FROM $CONF[sqlPrefix]vyhledavani WHERE rating>$rating AND text!=LOWER('$hledej') AND SUBSTRING(SOUNDEX(text),1,4)=$soundexHledej ORDER BY rating DESC,id DESC") or die(mysql_error());
  153. }
  154. If( $tolerance>=1 ){
  155. /**
  156. * u tolerance větší než 1 musíme ignorovat první písmeno
  157. * a ze zbývajících hodnot vytvořit interval
  158. */
  159. $soundexMin = "(SUBSTRING( SOUNDEX(LOWER('$hledej')), 2, 3 ) - $tolerance)";
  160. $soundexMax = "(SUBSTRING( SOUNDEX(LOWER('$hledej')), 2, 3 ) + $tolerance)";
  161. $dotaz = Mysql_query("SELECT text FROM $CONF[sqlPrefix]vyhledavani WHERE rating>$rating AND text!=LOWER('$hledej') AND (SUBSTRING(SOUNDEX(text),2,3)>=$soundexMin AND SUBSTRING(SOUNDEX(text),2,3)<=$soundexMax) ORDER BY rating DESC,id DESC") or die(mysql_error());
  162. }
  163. /* -- Zobrazení tipů -- */
  164. $tipTmp = '';
  165. While($radek=mysql_fetch_array($dotaz)){
  166. //zabránění zobrazení více podobných slov za sebou
  167. If( soundex($radek["text"])!=soundex($tipTmp) ){
  168. $tmplVyhledavani->newBlok("tipy.slovo");
  169. $tmplVyhledavani->prirad("tipy.slovo.text", $radek["text"]);
  170. $tipTmp = $radek["text"];
  171. }
  172. }
  173. $tmpl->prirad("obsah", $tmplVyhledavani->getHtml());
  174. /////////////
  175. // Navigace
  176. /////////////
  177. $tmpl->prirad("navigace", '<a href="'.$CONF["absDir"].'">Úvodní strana</a> » Vyhledávání');
  178. /* $dotaz=mysql_query("SELECT *,SUBSTRING(SOUNDEX(text),2,3) FROM g3_vyhledavani ORDER BY SUBSTRING(SOUNDEX(text),2,3)") or die(mysql_error());
  179. While($radek=Mysql_fetch_array($dotaz)){
  180. Echo "text: ".$radek["text"]."; soundex(): ".substr(soundex($radek["text"]),1,3)."; SOUNDEX(): ".$radek["SUBSTRING(SOUNDEX(text),2,3)"]."<br>";
  181. }*/
  182. }
  183. ?>