1

我在自定义 Magento 商店中使用 bxSlider 插件(类似于 jcarousel 的滑块)。

虽然滑块通过这种方式在 documet.ready() (在 head html 部分)上进行了实例化:

jQuery('#slider2').bxSlider({
    pause: 4000,
    auto: true,
    autoControls: true,
    displaySlideQty: 4,
    moveSlideQty: 1
});

如果滑块项目数小于 5,我想在 php 代码中将 auto 属性更改为 false。我尝试将其更改为:

<?php
    // slider items count
    $prom_count = $this->getPromotionalProducts()->count();;
?>
<?php if($prom_count<5): ?>
    <script>
        $("#slider2").attr('auto','false');    
    </script>
<?php endif; ?> 

但它不起作用,所以我不确定在 dom ready 上实例化的对象的属性是否可以通过这种方式进行更改。有人可以帮忙吗?

4

3 回答 3

1

看起来没有用于此的API函数。如果您使用 reloadShow(),可能会再次加载配置。如果这对您没有帮助,您必须阅读源代码

于 2011-11-07T09:11:16.373 回答
1

attrjQuery 库中的- 方法适用于 HTML 元素的属性:

<img src="..." alt="...">

在这种情况下,srcalt是“属性”。

bxSlider 通过给 -functionbxSlider一个数组来配置。将其传递给函数后,您无法更改此数组。

您可以使用 bxSlider 的 -function 来切换自动显示stopShow()。为此,您需要保存您创建的 bxSlider-instance:

var slider = jQuery('#slider2').bxSlider({
   ...
});

所以你可以在这个对象上调用函数:

slider.stopShow();

以混合方式(如您建议的那样)使用 PHP 和 JavaScript 执行此操作是丑陋的,应该避免。

相反,您应该使用仅 JavaScript 的解决方案:

var slider = jQuery('#slider2').bxSlider({
   auto: true,
   ...
});
if (slider.getSlideCount() < 5){
  slider.stopShow();
}

请注意,getSlideCount()返回幻灯片的数量,不保证是图库中的图像数量!一次显示的幻灯片数量可以通过 - 属性设置displaySlideQty。然而,默认值为 1。


似乎有一个错误导致startShowand stopShow-functions 不起作用:https ://github.com/wandoledzep/bxslider/pull/43

作为一种肮脏的解决方法,您可以执行以下操作:

<?php
    echo "<script type=\"text/javascript\">
        jQuery('#slider2').bxSlider({
            pause: 4000,
            autoControls: true,
            displaySlideQty: 4,";
    if($prom_count >= 5) echo "auto: true,";
    echo "moveSlideQty: 1
        });
    </script>";
?>
于 2011-11-07T09:19:39.573 回答
0

这将auto在它自己的元素上设置属性,而不是插件的自动选项。尽管我只是快速浏览了一下,但看起来插件在实例化后无法更改选项。

在运行插件时,您不能通过auto将 php 代码放在首位来设置正确的值吗?

于 2011-11-07T09:11:54.887 回答