我有一个显示一堆产品的php页面,左下方是一组过滤器(例如颜色,大小,样式)。我最初拥有它,以便当您选择过滤器(例如绿色)时,它将使用GET方法发布表单并使用过滤结果刷新页面。我现在正在更改它,以便它只刷新产品内容而不是整个页面本身,我正在使用jQuery。
当用户访问未选择过滤器的页面时,它使用PHP include来显示初始结果:
<div id="products">
<?php include('products.php') ?>
</div>
当用户点击过滤器时,我正在使用jQuery .load()
在其位置加载相同的include,但是使用查询字符串中的过滤器:
$("#products").load("products.php?colour=green");
当它刷新产品div时,它会使PHP位好,只显示绿色产品。
然而,它仍然运行PHP包含在筛选结果下,这意味着我已经显示了筛选结果,然后PHP包含显示在下面的结果,我不知道为什么!
我必须首先包含PHP,这样如果搜索引擎按页面编制索引,它就会看到内容,因为搜索引擎不会执行JavaScript(请参阅Search engine visibility and jquery load function的答案)。
这是我的代码。
shop.php
<form id="filterproducts" action="" method="get">
<div id="filters">
<p>Colour</p>
<input type="checkbox" name="colour" value="red" /> Red
<input type="checkbox" name="colour" value="blue" /> Blue
<input type="checkbox" name="colour" value="green" /> Green
<input type="checkbox" name="colour" value="yellow" /> Yellow
<input type="hidden" name="colours" value="" />
</div>
</form>
<div id="products">
<?php include("products.php"); ?>
</div>
<script>
$(':checkbox').change(function() {
var colour = $(this).val();
$("#products").load("products.php?colour="+colour);
});
</script>
products.php
<?php
$sql = "SELECT id, productname, productprice FROM products";
if (isset($_GET['colour']) && $_GET['colour'] != "") {
$colour = $_GET['colour'];
$sql .= " WHERE colour = '$colour'";
}
$sql .= " ORDER BY productprice LIMIT 10";
$result = mysql_query($sql,$link);
if (mysql_num_row($result) > 0) {
while($line = mysql_fetch_assoc($result) {
extract($line);
?>
<div id="product-<?php print $id ?>">
<p>
<a href="http://www.myshopsite.com/product/product-<?php print $id ?>" title="<?php print $productname ?>">
<img src="/images/product-<?php print $id ?>" alt="<?php print $productname ?>" />
<br />
<?php print $productname ?>
<br />
<?php print $productprice ?>
</a>
</p>
</div>
<?php
}
} else { ?>
<p>Sorry, there are no products to show</p>
<?php } ?>
我只添加了非常基本的代码,只是为了让你看到我在做什么。
我通过在#products中放入一些普通文本然后运行click函数来测试.load()
位:
<div id="products">
<p>This is some test text</p>
</div>
当我单击一个过滤器时,.load()用.load()中的任何内容替换
,所以我知道这个位有效,它只是不删除php包含内容...
答案 0 :(得分:0)
我会做这样的事情:
<div>
<?php
if(isset($_GET['Filter']))
{
echo $resultWithFilter;
}
else
{
echo $resultNoFilter;
}
?>
</div>
你没有提供太多的代码,所以很难知道这是否有用,但也许你可以在代码的另一部分使用这个想法。
答案 1 :(得分:0)
我发现了为什么它不起作用......我正在关闭一个没有打开的地方!我现在感觉很愚蠢,但它表明HTML需要有效才能使一切正常工作:)
感谢大家的帮助!