0

我有一个显示一堆产品的 php 页面,左边是一组过滤器(例如颜色、大小、样式)。我最初有它,以便当您选择过滤器(例如绿色)时,它会使用 GET 方法发布表单并使用过滤结果刷新页面。我现在正在更改它,以便它只刷新产品内容而不是整个页面本身,我正在使用 jQuery 执行此操作。

当用户访问没有选择过滤器的页面时,它使用 PHP 包含来显示初始结果:

<div id="products">
    <?php include('products.php') ?>
</div>

当用户单击过滤器时,我使用 jQuery.load()在其位置加载相同的包含,但在查询字符串中使用过滤器:

$("#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>

产品.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 } ?>

我只添加了非常基本的代码,以便您可以看到我在做什么。

新编辑

我已经.load()通过在#products 中放置一些普通文本然后运行点击功能来测试该位:

<div id="products">
  <p>This is some test text</p>
</div>

当我单击过滤器时, .load() 替换

使用 .load() 中的任何内容,所以我知道这一点有效,它只是不删除 php 包含内容...

4

2 回答 2

0

我会做这样的事情:

<div>
<?php 
if(isset($_GET['Filter']))
{
    echo $resultWithFilter;
}
else
{
    echo $resultNoFilter;
}
?>
</div>

您没有提供太多代码,因此很难知道这是否可行,但也许您可以在代码的另一部分使用这个想法。

于 2013-08-21T20:29:14.840 回答
0

我发现它为什么不起作用...我正在关闭一个未打开的 div !我现在觉得很愚蠢,但这表明 HTML 需要有效才能使其正常工作:)

不过还是感谢大家的帮助!

于 2013-08-22T09:37:04.143 回答