Дублировать сниппет php
На сайте реализовал появление случайного текста в поле, через вызов сниппета:
Сам вызов:
При попытке добавить еще одно такое поле и вызвать такой же сниппет, происходит краш.
PHP Fatal error: Cannot redeclare StrCharPosBack() (previously declared in /modx_11/public_html/core/cache/includes/elements/modsnippet/40.include.cache.php:2) in /modx_11/public_html/core/cache/includes/elements/modsnippet/40.include.cache.php on line 2
Как реализовать несколько таких полей на ресурсе, для рандомного отображения контента? Спасибо.
<?php
function StrCharPosBack($haystack, $needle) {
for ($i = strlen($haystack) ; $i>=0 ; $i--){
if (substr($haystack, $i, 1) === $needle)
return $i;
}
return false;
}
while (strpos($str, "{") !== false){
$pos1 = strpos($str, "}");
$buf_mas = substr($str, 0, $pos1);
$pos2 = StrCharPosBack ($buf_mas, "{");
$buf_mas = substr($buf_mas, $pos2+1);
$exploded_buf_mas = explode ("|", $buf_mas);
$rnd = rand(0, count($exploded_buf_mas)-1);
$str = substr_replace($str, $exploded_buf_mas[$rnd], $pos2, $pos1+1-$pos2);
}
$str = (isset($str )) ? $str : '';
return $str ;
[[!str? &str= {
текст|
текст2|
текст3|
тест4
}
]]
При попытке добавить еще одно такое поле и вызвать такой же сниппет, происходит краш.
PHP Fatal error: Cannot redeclare StrCharPosBack() (previously declared in /modx_11/public_html/core/cache/includes/elements/modsnippet/40.include.cache.php:2) in /modx_11/public_html/core/cache/includes/elements/modsnippet/40.include.cache.php on line 2
Как реализовать несколько таких полей на ресурсе, для рандомного отображения контента? Спасибо.
Комментарии: 3
Если этот вызов работает
[[!str? &str= {
текст|
текст2|
текст3|
тест4
}
]]
То возможно стоит попробовать вот так[[!str? &str= `{
текст|
текст2|
текст3|
тест4
}
{
текст|
текст2|
текст3|
тест4
}`
]]
Если я конечно правильно понял принцип работы сниппета.
Функцию нельзя 2 раза объявлять, вот и идет ошибка.
А вообще давайте я поищу за вас.
А вообще давайте я поищу за вас.
Попробуйте тело функции поместить в отдельный сниппет, который вызывался бы из основного сниппета(вместо вызова функции). Конечно, со всеми «вытекающими» параметрами. Fatal Error должна пропасть.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.