У меня установлен и работает слайдер jssor. Я пытаюсь добавить возможность изменять тип слайда из внешнего файла с помощью php. В моем неотредактированном коде jssor, если я ввожу следующее как типы слайдов, они работают как положено:
{$Duration:800,$Opacity:2},
{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}
Когда я пытаюсь загрузить функцию, как показано в приведенном ниже коде, вывод команды консоли
0: "{$Duration:800,$Opacity:2},"
1: "{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}"
Если я снимаю кавычки и помещаю их в функцию _SlideshowTransitions, они работают. Так это кавычки, которые вызывают проблемы? Если так, как я могу удалить их? Или функция jssor не будет работать с переменной? Или что-то другое?
function GetTransitions() {
$xsisitons = array();
$xsisitons[] = '{$Duration:800,$Opacity:2},';
$xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
return json_encode($xsisitons);
}
$jsondata = GetTransitions();
<script>
var xsitions = <?php echo $jsondata; ?>;
console.dir(xsitions);
var _SlideshowTransitions = [
xsitions
];
</script>
Просто создайте JS напрямую:
<?php
function GetTransitions() {
return $rawJS = '[
{
$Duration: 800,
$Opacity: 2
},
{
$Duration: 1000,
y: 1,
$Easing: $Jease$.$InBounce,
$Opacity: 2
}
]';
}
$options = GetTransitions();
?>
<script>
var xsitions = <?php echo $options; ?>;
console.dir(xsitions);
var _SlideshowTransitions = xsitions;
</script>
Это линия, которая мешает вам использовать json_encode
:
$Easing: $Jease$.$InBounce,
json_encode
будет относиться $Jease$.$InBounce
в виде строки, а не кода JS, что не позволяет ему функционировать должным образом.
Что делает GetTransitions
чрезвычайно опасно, на что намекает новое имя переменной rawJS
, Убедитесь, что вы обращаете внимание на то, что выводит эта функция.
Вы могли бы смело сделать $Duration
, $Opacity
, а также y
динамический в PHP путем приведения входных переменных к int при построении $rawJS
строка или экранирование динамических значений (но не всей строки) с json_encode
:
function GetTransitions($duration_1, $duration_2, $opacity, $y) {
return $rawJS = '[
{
$Duration: ' . (int)$duration_1 . ',
$Opacity: ' . (int)$opacity . '
},
{
$Duration: ' . (int)$duration_2 . ',
y: ' . (int)$y . ',
$Easing: $Jease$.$InBounce,
$Opacity: ' . (int)$opacity . '
}
]';
}
То, что вы хотите, не правильно, JSON, так json_encode
не поможет тебе Но вместо этого вы можете создать строку js самостоятельно.
$xsisitons[] = '{$Duration:800,$Opacity:2}';
$xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
return '[' . join(',', $xsisitons) . ']';