2013-02-14 53 views
0

我有一個漫畫網站。它具有的功能是允許用戶搜索漫畫...搜索將立即解析輸入並根據匹配的標題和關鍵字返回縮略圖結果。PHP搜索:使用jquery改變一個php的值

最初,搜索將返回所有結果,並且邊界搜索框將無限向下展開,並保存每個漫畫結果。我認爲將結果限制爲4可能是一個很好的接觸,並且如果用戶選擇這樣做,則會顯示一條消息,如「加載5個剩餘圖像」。

如果他們點擊該消息,我想限制php變量被刪除或更改。

到目前爲止,它加載與限制,並顯示一個鏈接...

enter image description here

編輯:最新代碼:

search_field.php(即獲得的搜索文件包含在一個頁面中......此文件通過JQuery調用search.php):

<?php $site = (isset($_GET['site']) ? ($_GET['site']) : null); ?> 

<div id="sidebar" class="searchborder"> 
<!--Allow users to search for comic--> 
<!--<span class="search">Search for <?php// echo (($site == "artwork") ? 'artwork' : 'a comic'); ?> </span>--> 

<script type="text/javascript"> 

    function GetSearch(mySearchString){ 
    $.get("./scripts/search.php", {_input : mySearchString, _site : '<?php echo $site ?>'}, 
      function(returned_data) { 
       $("#output").html(returned_data); 
      } 
     ); 

    } 

</script> 
<center> 
    <table> 
     <tr> 
      <td> 

       <span class="search"> 
       <img src="./images/SiteDesign/Search.png" /> 
        <input type="text" onkeyup="GetSearch(this.value)" name="input" value="" /> 
        <!--<input id="site" type="hidden" value="<?php// echo $site; ?>">--> 
       </span> 
      </td> 
     </tr> 
    </table> 
</center> 
<span id="output"> </span> 

</div> 

search.php中,這就是所謂的解析字符串並返回結果的文件:

<?php 
//Query all images: 
include 'dbconnect.php'; 


$site = $_GET['_site']; 
$input = (isset($_GET['_input']) ? ($_GET['_input']) : 0); 
$siteChoice = (isset($_GET['_choice']) ? ($_GET['_choice']) : $site); 
$start = (isset($_GET['_start']) ? ($_GET['_start']) : null); 

echo "start: " . $start; 


//if user goes to hittingtreeswithsticks.com... no "site" value will be set... so I need to set one 
if ($site == null) { 
$site = "comics"; 
} 

if ($siteChoice == "artwork") { 
$sql = "SELECT id, title, keywords, thumb FROM artwork"; 
$thumbpath = "./images/Artwork/ArtThumbnails/"; 
} 
else if ($siteChoice == "comics") { 
$sql = "SELECT id, title, keywords, thumb FROM comics"; 
$thumbpath = "./images/Comics/ComicThumbnails/"; 
} 
else { 
$sql = "SELECT id, title, keywords, thumb FROM $site"; 
if ($site == "artwork") { 
    $thumbpath = "./images/Artwork/ArtThumbnails/"; 
} 
else { 
    $thumbpath = "./images/Comics/ComicThumbnails/"; 
} 
} 
/* For this to work, need all comics replicated in an "All Comics" file along with "All Thumbnails" 
else { 
$sql = "SELECT id, title, thumb FROM comics 
     UNION 
     SELECT id, title, thumb FROM artwork"; 
$thumbpath = "./images/AllThumbnails/"; 
}*/ 


$imgpaths = $mysqli->query($sql); 
mysqli_close($mysqli); 

$idresult = array(); 
$imgresult = array(); 
$thumbresult = array(); 

//CHECK IF $INPUT == IMAGE PATH 
if (strlen($input) > 0) 
{ 
while ($row = $imgpaths->fetch_assoc()) 
{ 
    //query against key words, not the image title (no one will remember the title) 
    if (stripos($row['keywords'], $input) !== false || strtolower($input)==strtolower(substr($row['title'],0,strlen($input)))) 
    //if (strtolower($input)==strtolower(substr($row['title'],0,strlen($input)))) 
    { 
     array_push($idresult, $row['id']); 
     array_push($imgresult, $row['title']); 
     array_push($thumbresult, $row['thumb']); 
    } 
} 
//ECHO RESULTS ARRAY 
if(count($imgresult) == 0) 
{ 
    echo "<p>no suggestions</p>"; 
} 
else 
{ 

    echo "<ul>"; 
     $k = 0; 
     $max = 4; 
     if (count($imgresult) > $max) { 
      while ($k < count($imgresult) && $k < $max) 
      { 
       echo '<li> 
         <span class="sidebarimages"><a href=".?action=viewimage&site=' . $siteChoice . '&id=' . $idresult[$k] . '"> 
         <img src="./scripts/thumber.php?img=.'.$thumbpath.$thumbresult[$k].'&mw=90&mh=90"/></a></span> 
         </li>'; 
      $k++; 
      } 
      $difference = count($imgresult)-$k; 
      echo "<br/><i><a href='.?action=homepage&site=" . $siteChoice . "&start=4' class='loadSearch'>load " . $difference . " more result" . (($difference != 1) ? 's' : '') . "... </a></i>"; 
     } 
     else { 
      while ($k < count($imgresult)) 
      { 
       echo '<li> 
         <span class="sidebarimages"><a href=".?action=viewimage&site=' . $siteChoice . '&id=' . $idresult[$k] . '"> 
         <img src="./scripts/thumber.php?img=.'.$thumbpath.$thumbresult[$k].'&mw=90&mh=90"/></a></span> 
         </li>'; 
      $k++; 
      } 
     } 




    echo "</ul>"; 
} 
} 
?> 
<script type="text/javascript"> 

$(".loadSearch").click(function() { 

//alert("Test"); 

$.get("./search.php", {_start : 4}, 
    function (returned_data) { 
     $("#moreResults").html(returned_data); 
    } 
); 


}); 
</script> 
+1

hummm的jQuery插件同位素將幫助... HTTP://isotope.metafizzy.co/ – 2013-02-14 06:41:15

+0

@DipeshParmar非常棒! – Growler 2013-02-19 15:54:57

回答

0

我結束了jQuery的顯示和隱藏功能去。

PHP代碼片段:

//ECHO RESULTS ARRAY 
if(count($imgresult) == 0) 
{ 
    echo "<p>no suggestions</p>"; 
} 
else 
{ 

    echo "<ul>"; 
     $k = 0; 
     $max = 4; 

      while ($k < count($imgresult) && $k < $max) 
      { 
       echo '<li> 
         <span class="sidebarimages"><a href=".?action=viewimage&site=' . $siteChoice . '&id=' . $idresult[$k] . '"> 
         <img src="./scripts/thumber.php?img=.'.$thumbpath.$thumbresult[$k].'&mw=90&mh=90"/></a></span> 
         </li>'; 
       $k++; 
      } 

      $difference = count($imgresult)-$k; 

      echo '<div id="moreResults">'; 
      while ($k < count($imgresult)) 
      { 
       echo '<li> 
         <span class="sidebarimages"><a href=".?action=viewimage&site=' . $siteChoice . '&id=' . $idresult[$k] . '"> 
         <img src="./scripts/thumber.php?img=.'.$thumbpath.$thumbresult[$k].'&mw=90&mh=90"/></a></span> 
         </li>'; 

       $k++; 
      } 
      echo '</div>'; 


     if (count($imgresult) > $max) { 
      ?> 
      <br /><a href="#" id="showMore">Load <?php echo $difference; ?> more result<?php echo (($difference != 1) ? 's' : ''); ?>...</a> 
      <?php 
     } 

    echo "</ul>"; 
} 
} 

的Jquery:

<script type="text/javascript"> 
$("#moreResults").hide(); 

$("#showMore").click(function() { 
    $("#moreResults").show(); 
    $("#showMore").hide(); 

}); 

1

試試這個:

<script type="text/javascript"> 

$("#loadSearch").click(function() { 
    $.get('URL WITH QUERY', function(data) { 
     $('#results').html(data); 
    }); 
}); 

</script> 
+0

爲$ .get,是否可以從這個相同的文件中加載一個PHP函數?或者我需要加載一個單獨的PHP文件? – Growler 2013-02-14 06:42:50

+0

沒有jQuery不能調用php函數,因爲它的客戶端和php是服務器端 – Tom 2013-02-14 06:44:46

+0

好吧,那麼我必須創建一個新的php文件,所以我可以用$ .get調用它嗎? – Growler 2013-02-14 06:56:49

1

從我得到所有你需要的是當點擊「加載更多」只顯示新結果。

加載更多必須是與您的搜索網址相同的網址。

Search/Autocomplete URL - example.com/autocomplete?q=xkd 
Load More URL - example.com/autocomplete?q=xkd&start=4&max=1000 

只需將兩個參數添加到您的網址。 start and max。將它們傳遞給你的查詢,你會得到確切的結果。

只驗證Start < Max並且是整數intval()而不是0 empty()。此外,如果Max <= 4然後不顯示加載更多。

+0

我編輯過我的帖子......你能硼酸鹽?我將這些參數添加到哪個網址? – Growler 2013-02-14 22:29:39

+0

@Growler查看我的更新回答 – aWebDeveloper 2013-02-15 04:00:04

+0

嗨,我已經更新了我的答案,上面有這樣的工作嗎?我應該使用jquery $ .get命令傳遞這些參數,對吧?或者我應該直接在加載更多的URL中傳遞它們? – Growler 2013-02-15 20:22:11

1

我會給你所有的結果,然後嘗試確定你的結果。如果超過4,則循環輸出前4個結果。如果用戶點擊加載更多按鈕,則從第4個元素開始循環。這樣你只需要打一次服務器(每次搜索)。

試着在json中給出你的結果,所以你可以用你喜歡的方式在你的html文件中格式化它。

在僞代碼:

searchTerm = 'hello'; 
resultsFromServer = getResults($searchterm); 
resultcounter = count(resultsFromServer); 

if(resultcounter > 4) 

    loop 4 results 

else 

    loop all results 


$(".loadSearch").click(function(e) { 

//alert("Test"); 

e.preventDefault(); 

$.get("./search.php", {_start : 4}, 
    function (returned_data) { 
     $("#moreResults").html(returned_data); 
    } 
); 
+0

如果他們點擊「加載更多」,我將如何從第4個元素開始循環? – Growler 2013-02-14 22:37:33

+0

另外,loadmore鏈接應該是什麼樣子?它應該鏈接到哪裏?做你的想法後,我仍然有 「加載更多」 鏈接爲:\t \t \t如果(計數($ imgresult)> $最大){ \t \t \t \t回聲「
load " . $difference . " more result" . (($difference != 1) ? 's' : '') . "...「; \t \t \t} – Growler 2013-02-14 22:48:50

+0

你可以跟蹤一個計數器(做一個計數你的元素,然後用一個for循環,讀取它們)負載更多我會將它添加到你的javascript,如果你看到有4個以上的元素。 – 2013-02-15 08:56:23