2013-02-11 86 views
0

所以我想做一個簡單的外部彈出,有1個下拉菜單的類別和4列複選框作爲標籤。 (這是爲了養活一個WordPress的搜索引擎插件)更改提交表單上的URL

我用普通的形式提交了這一點,但我最終以此作爲最終網址:

Site.com/?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3

但我想我的網址是這樣:

Site.com/?category_name=VALUE&tag=tag1+tag2+tag3

任何人都可以點我在正確的方向爲實現這一目標?

CATEGORY_NAME用於搜索特定的WordPress類別 和TAGS是常規發佈標籤。

回答

0

你不能用複選框做到這一點。這不是複選框的工作方式。這不是一個選擇,真的。它是HTML,PHP和瀏覽器的構建方式。

此外,你所做的不會工作。您已將相同的變量設置爲多個不同的字段。每次設置時,都會覆蓋以前的值。雖然如果您要將var_dump($_GET);添加到您的腳本中,您的URL可能看起來像?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3,但您會看到PHP唯一看到的是最後一個 - tag=TAG3

您可以使用方括號 - [] - 在複選框名稱中獲得代碼工作。在很小的代碼示例(僅用於演示目的):

echo '<form>'; 
echo '<input type="checkbox" name="tag[]" value="tag1">'; 
echo '<input type="checkbox" name="tag[]" value="tag2">'; 
echo '<input type="checkbox" name="tag[]" value="tag3">'; 
echo '<input type="checkbox" name="tag[]" value="tag4">'; 
echo '<input type="checkbox" name="tag[]" value="tag5">'; 
echo '<input type="checkbox" name="tag[]" value="tag6">'; 
echo '<input type="submit" value="Clickie">'; 
echo '</form>'; 

「標籤」你的一部分的URL看起來像這樣但是:

&tag[]=tag1&tag[]=tag4&tag[]=tag6 

也就是說複選框是如何工作的。我可以想到兩種解決方法。

第一個是使用Javascript來填充表單中的隱藏字段。

echo '<form>'; 
echo '<input type="hidden" name="tag" value="">'; 
echo '<input type="checkbox" value="tag1">'; 
echo '<input type="checkbox" value="tag2">'; 
echo '<input type="checkbox" value="tag3">'; 
echo '<input type="checkbox" value="tag4">'; 
echo '<input type="checkbox" value="tag5">'; 
echo '<input type="checkbox" value="tag6">'; 
echo '<input type="submit" value="Clickie">'; 
echo '</form>'; 

你會有你的Javascript手錶點擊這些複選框,並填寫到隱藏標記字段的值。爲了得到你想要的URL,你必須從複選框中刪除name,這使得這個表單完全依賴於Javascript。沒有Javascript它不會工作。我認爲這是糟糕的設計。

另一個選擇是使用mod_rewrite來嘗試重寫您的URL,但說實話,我不知道mod_rewrite是否能夠完成這項工作所需的複雜正則表達式。

我不認爲任何解決方法值得努力或價格。我建議你使用方括號並在接收端處理數組。換句話說,如果你有&tag[]=tag1&tag[]=tag4&tag[]=tag6那麼這將得到一個字符串像你想在你的網址是什麼:

if (isset($_GET['tag'])) { 
    $tstr = implode('+',$_GET['tag']); 
} 
echo $tstr; 

您可以使用您的搜索功能,無論你是使用了點。

+0

謝謝你的提示!回到實驗室:) – Worldismine 2013-02-12 08:41:43

0

這就是我所做的。我沒有給wordpress添加一個額外的函數(當測試更深時,這導致了一些意想不到的錯誤),我只是創建了一個PHP來在進一步提交之前捕獲URL。

這是什麼樣子:

<?php 

if (isset($_GET['tag'])) { 
    $tstr = implode('+',$_GET['tag']); 
} 

$cat = ($_GET['category_name']); 

header("Location: http://url.com/?category_name=$cat&tag=$tstr"); 

?> 


I don't know if this is correct or secure, but it works :D 
Thanks for your help !