Какой безопасный способ объявить переменную, чтобы я мог вызвать ее из другого скрипта? - PullRequest
0 голосов
/ 02 октября 2011

Я создал массив URL-адресов изображений на странице шаблона Wordpress следующим образом:

<?php $attachments = get_posts(array(
        'order'          => 'ASC',
        'post_type'      => 'attachment',
        'post_parent'    => $post->ID,
        'post_mime_type' => 'image',
        'post_status'    => null,
        'numberposts'    => -1,
    ));
    if ($attachments) {
        //set up array of urls
        $image_urls = array();
        foreach($attachments as $attachment){
            $image_object = wp_get_attachment_image_src($attachment->ID,'full');
            $image_urls[] = $image_object[0];
        }
    } ?>

Затем в footer.php я бы хотел напечатать массив для Javascript следующим образом:

<script>
var images = [<?php $num_urls = count($image_urls);
                    $num = 1;
                    foreach($image_urls as $image_url) {
                        echo $image_url;
                        $num++;
                        if($num<$num_urls) echo ', ';
                    } ?>];
</script>

Я ошибочно предположил, что при объединении страницы шаблона и footer.php PHP будет рассматривать скрипт как непрерывный и запоминать значение переменной, но это не так, поскольку он возвращает:

Предупреждение: неверный аргумент указан для foreach ()

Как мне объявить этот массив $image_urls, чтобы я мог ссылаться на него позже, без опасности определения пространства / пространства имен?

PS Есть ли лучший способ добавить запятую в конце концов, кроме последнего элемента в последнем фрагменте кода?

Ответы [ 3 ]

3 голосов
/ 02 октября 2011

Чтобы безопасно передать $ image_urls в нескольких сценариях, объявите его следующим образом:

$GLOBALS['image_urls'] = array();
foreach($attachments as $attachment){
    $image_object = wp_get_attachment_image_src($attachment->ID,'full');
    $GLOBALS['image_urls'][] = $image_object[0];
}

И позже, чтобы сослаться на это:

<script>
var images = [<?php $num_urls = count($GLOBALS['image_urls']);
                $num = 1;
                foreach($GLOBALS['image_urls'] as $image_url) {
                    echo $image_url;
                    $num++;
                    if($num<$num_urls) echo ', ';
                } ?>];
</script>

Чтобы вы ни с чем не конфликтовали, вы можете добавить префикс к image_urls, чтобы указать, что он ваш.

2 голосов
/ 02 октября 2011

Я ошибочно предположил, что при объединении страницы шаблона и footer.php PHP будет рассматривать скрипт как непрерывный и запоминать значение переменной

Должно быть, если Wordpress не является странным, или переменная не находится внутри области действия функции (в любом файле). Если это так, добавьте эту декларацию:

global $image_urls;

в верхней части функции (ей). В качестве альтернативы , ссылка на $ image_urls везде через $ GLOBALS. Например.,

$GLOBALS['image_urls'][] = $image_object[0];

Есть ли лучший способ добавить запятую в конце концов, кроме последнего элемента в последнем фрагменте кода?

Используйте функцию взрыва:

echo implode(', ', $image_urls);

Я думаю, вам нужны кавычки вокруг каждого элемента, поэтому:

if (count($image_urls)) {
    echo '"' . implode('", "' $image_urls) . '"';
}

Или, вообще, я бы сделал что-то подобное для цикла такого типа:

$first = true;
foreach (...) {
    if ($first) $first = false; else echo ', ';
    echo $item;
}
2 голосов
/ 02 октября 2011

Скрипт выглядит отлично.

Хотя, это было бы лучше:

<script>
var images = [<?php echo implode(',',$image_urls) ?>];
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...