2012-12-03 100 views
0

我使用YII,并且我有一个复选框过滤器,可按品牌过滤产品。产品清单通过未启用Javascript的复选框过滤

这是我的过滤器HTML:

<dl class="brand-filter"> 
    <dd class="cat-text"> 
     <input value="1" id="chb_1" class="brand-filter-chb" type="checkbox" name="brands[]">    
     <label for="chb_1" class="brand-filter-text" style=" display: inline-block;">Brand Name 1</label>  
    </dd> 
    <dd class="cat-text">   
     <input value="2" id="chb_2" class="brand-filter-chb" type="checkbox" name="brands[]">    
     <label for="chb_2" class="brand-filter-text" style=" display: inline-block;">BRAND Name 2 </label> 
    </dd> 
    etc. 
</dl> 

当用户在做一个复选框,然后点击jQuery的做YII fn.yiiListView.update。这就像ajax调用,更新我正在过滤的数据。 Ajax调用控制器/动作(在我的情况下,控制器是产品,动作是列表),参数$品牌被传递给控制器​​/动作。

这是我的javascript过滤器(jQuery的):

$('.brand-filter-chb').live('click', function(){   
    brands = $('#filter-form').serialize();  //brand names are serialized 
    $.fn.yiiListView.update( //this updates product list by brand names 
     'product-list', //id of product list table 
     {data: brands} //serialized data send to controller/action by ajax call 
    );  
});  

这允许过滤由品牌产品清单。使用检查品牌名称复选框和列表已过滤。用户也可以检查多个品牌名称,一切正常。 但是,它不工作没有Javascript。

我想知道什么是允许在不支持JavaScript的相同或非常相似的用户体验的最佳解决方案。 例如,如果使用JavaScript可以只在一个品牌下过滤产品列表(如果未启用JavaScript),那也是可以接受的。

回答

0

如果你不想使用JavaScript,你可以做的是创造一个

<noscript>Please enable javascript</noscript>

或选中复选框后,在页面刷新和做的元素的显示/隐藏与你的PHP。

+0

这不是我的情况。我希望用户允许在没有Javascript的情况下使用我的页面。我需要一个运行时没有Javascript的页面来获得更好的搜索引擎优化(我需要谷歌找到按品牌过滤产品的可能性,至少我认为这是必要的)。当复选框选择并记住所检查的内容(无javascript)时,如何刷新页面? – renathy

+0

这不是SEO的工作原理。你应该研究SEO。几乎所有的网站都使用JS并拥有良好的SEO。您将需要他们单击提交按钮将表单提交给PHP,或者使用javascript作为onClick事件来提交表单。 – Bot

+0

Oups。我的意思是这个复选框过滤器更新是由Ajax完成的,Ajax通常不是SEO友好的...所以我可能会使用javascript onClick作为复选框。 – renathy

1

什么我建议是到表单中附上过滤器和HTML表单的操作设置为您用于AJAX过滤器同样的动作。

如果你正在考虑SEO,那么你的表格应提交使用GET方法,然后你可以使用Yii的要求对象:

Yii::app()->request->isPostRequest

,以确定它是否是一个的被处理的AJAX请求或非脚本版本。

你可以附上的表格过滤器一对夫妇的标签内提交按钮。

至于知道什么重新加载页面之前,选择复选框,我不能完全肯定这是没有可能的JavaScript。