#php #javascript #jquery #bxslider
#php #javascript #jquery #bxslider
Вопрос:
я использую плагин bxSlider (слайдер, похожий на jcarousel) в пользовательском магазине Magento.
Пока ползунок установлен в documet.ready() (в разделе head html) таким образом:
jQuery('#slider2').bxSlider({
pause: 4000,
auto: true,
autoControls: true,
displaySlideQty: 4,
moveSlideQty: 1
});
Я хочу изменить атрибут auto на false в коде php, если количество элементов слайдера меньше 5. Я пытался изменить его с помощью:
<?php
// slider items count
$prom_count = $this->getPromotionalProducts()->count();;
?>
<?php if($prom_count<5): ?>
<script>
$("#slider2").attr('auto','false');
</script>
<?php endif; ?>
но это не работает, поэтому я не уверен, что атрибут объектов, созданных в dom ready, может быть изменен таким образом. кто-нибудь может помочь?
Ответ №1:
attr
-Метод из библиотеки jQuery работает с атрибутами для HTML-элементов:
<img src="..." alt="...">
В этом случае src
и alt
являются «атрибутами».
bxSlider настраивается путем предоставления bxSlider
-функции массива. Вы не можете изменить этот массив после того, как он был передан функции.
Что вы можете сделать, чтобы переключить автоматическое отображение, это использовать stopShow()
-функцию bxSlider. Вероятно, для этого вам потребуется сохранить созданный вами экземпляр bxSlider:
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.
Похоже, что есть ошибка, из-за которой startShow
и stopShow
-функции не работают: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>";
?>
Комментарии:
1. Спасибо. ну, я попробовал ваше решение, но все еще не работает. это код в файле general .js, вызываемом в разделе head document: dpaste.com/648712 это не работает, и я могу подсчитывать элементы только в разделе тела…
2. Я понял, что это проблема, и есть исправление, которое ожидает извлечения в проекте: github.com/wandoledzep/bxslider/pull/43 Поэтому вам нужно подождать или найти другое решение…
3. Это останавливает слайд, но не изменяет параметр auto. Потому что, как вы сказали, это не может быть изменено какой-либо заданной функцией.
4. Предполагается создавать автоматический слайд только при наличии более 5 изображений. Это должно выполнить задание.
5. Обновил мой ответ. Это должно работать, пока не будет найден лучший способ.
Ответ №2:
Похоже, для этого нет функции API. Возможно, конфигурация будет загружена снова, если вы используете reloadShow(). Если это не поможет, вам нужно прочитать исходный код.
Комментарии:
1. Существует функция, которая делает это. Смотрите мой пост.
Ответ №3:
Это установит auto
атрибут для самого элемента, а не для автоматической опции плагина. Не похоже, что плагин имеет возможность изменять параметры после того, как вы создали его экземпляр, хотя я только бегло взглянул.
Вы не можете установить правильное auto
значение при запуске плагина, поместив сначала php-код?
Комментарии:
1. нет, поскольку шаблон и php-код, которые генерируют html-раздел слайдера, не совпадают с головной частью … я могу учитывать элементы слайдера только в основной HTML-секции