所以搜索引擎应该如下工作:用户点击给定的属性,并将这些属性添加到URL,例如:+ 3000Mhz。如果单击其他类似属性(例如:2133Mhz),则应删除+ 3000Mhz,并添加其他属性。
属性是可点击的链接,如下所示:1600Mhz 2133Mhz 3000Mhz
网址如下所示:?query=2x4gb+DDR3+2133Mhz
现在,至于我迄今为止构建的代码:
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$var = 1;
$resSP=mysql_query("select * from specifications where categoryid='15' order by specificationorder asc ");
while($rowSP=mysql_fetch_array($resSP))
{
//search for the specification
$prefix="+".$rowSP['specificationname'];
//delete the specification found
$next_link = str_replace($prefix, "", $actual_link, $var);
//if the specification is found in the URL
if (strpos($actual_link,$rowSP['specificationname']) !== false) {
//echo the current URL without the specification
echo "<a href=\"".$next_link." \">".$rowSP['specificationname']."</a> ";
} else {
//or echo current URL without the currently applied specification and add another one
echo "<a href=\"".$next_link."+".$rowSP['specificationname']."\" \">".$rowSP['specificationname']."</a> ";
}
}
我遇到的问题是,只有当可点击链接的规范匹配时,第一个echo才能用作删除规范的方法。
第二个回声没有删除任何内容,只添加了另一个规范,但这样URL就会被破坏(example: ?query=2x4gb+DDR3+2133Mhz+3000Mhz
),因此不会产生任何结果。
我希望很清楚我正在努力实现的目标。我想我需要一个循环遍历规范的代码,并在第二个回声发生之前删除当前应用的规范,但我很难用它。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
对你来说很明显,2133Mhz和3000Mhz具有相同的规格类型,但服务器不知道这一点。
恕我直言,最简洁的方法是为单独的规范类型使用单独的查询字段:?ramsize=2x4gb&cpufreq=3000MHz
当然,您需要在数据库中使用 specificationtype 字段。
$link = "http://$_SERVER[HTTP_HOST]$_SERVER[SCRIPT_NAME]";
$resSP=mysql_query("select * from specifications where categoryid='15' order by specificationorder asc ");
while($rowSP=mysql_fetch_array($resSP))
{
$query = $_GET;
//if the specification is found in the URL
if(array_key_exists($rowSP['specificationtype'], $query) &&
$query[$rowSP['specificationtype']] == $rowSP['specificationname']) {
unset($query[$rowSP['specificationtype']]);
} else {
$query[$rowSP['specificationtype']] = $rowSP['specificationname'];
}
$next_link = $link;
if(count($query)) {
$next_link .= '?' . http_build_query($query);
}
echo "<a href=\"".$next_link." \">".$rowSP['specificationname']."</a> ";
}