Неисправность конкатенации строк в цикле - PullRequest
1 голос
/ 20 марта 2011

Я пытаюсь внести некоторые изменения в мою установку ZenPhoto, чтобы в нижней части страницы альбома у меня была текстовая область, которая отображает код для вставки сгенерированных изображений выше, чтобы читатели могли просто скопироватьэто и разместить HTML на своих сайтах.

Вот фрагмент кода.

<?php $str  = ''; ?>
<?php while (next_image()): ?>
    <div class="imagethumb"><a href="<?php echo html_encode(getImageLinkURL());?>" title="<?php echo getBareImageTitle();?>"><?php printImageThumb(getAnnotatedImageTitle()); ?></a></div>

     $str .= '<a href="<?php echo html_encode(getImageLinkURL());?>" title="<?php echo getBareImageTitle();?>"><?php printImageThumb(getAnnotatedImageTitle()); ?></a>;'
<?php endwhile; ?>

<textarea type="text" size="50">
     <?php echo $str; ?>
</textarea>

Код, который я добавил, - это $ str.Я пытаюсь перебрать изображения и создать HTML, который используется в первом div в цикле while, чтобы он помещал его как текст в строку str.Это объединяется для каждого изображения в библиотеке, а затем конец строки помещается в простую текстовую область для копирования пользователем.

Я не могу заставить работать конкатенацию $ str.

Я очень новичок в php и не могу заставить работать синтаксис.

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

5 голосов
/ 20 марта 2011

Конкатенация не находится внутри тегов <?php.Для удобства чтения вы должны использовать sprintf:

<?php $str  = ''; ?>
<?php while (next_image()): ?>
    <div class="imagethumb"><a href="<?php echo html_encode(getImageLinkURL());?>" title="<?php echo getBareImageTitle();?>"><?php printImageThumb(getAnnotatedImageTitle()); ?></a></div>

     <?php $str .= sprintf('<a href="%s" title="%s">%s</a>', 
                           html_encode(getImageLinkURL()),
                           getBareImageTitle(),
                           printImageThumb(getAnnotatedImageTitle()));
     ?>
<?php endwhile; ?>

Но вы повторяете здесь (вы создаете ссылку дважды).Вы можете немного изменить структуру кода, чтобы избежать этого:

<?php 
   $images = array();
   while (next_image()) {
       $images[] = sprintf('<a href="%s" title="%s">%s</a>', 
                               html_encode(getImageLinkURL()),
                               getBareImageTitle(),
                               printImageThumb(getAnnotatedImageTitle()));
   }
?>
<?php foreach($images as $image): ?>
    <div class="imagethumb"><?php echo $image; ?></div>
<?php endforeach; ?>

<textarea>
     <?php echo implode("", $images); ?>
</textarea>

Ссылка: implode

0 голосов
/ 20 марта 2011

Одна проблема заключается в том, что строки ' и " ведут себя по-разному в PHP.Если у вас есть:

echo '<?php echo $otherString; ?>';

PHP будет печатать:

<?php echo $otherString; ?>

вместо содержимого $otherString.

Я бы переписал эту строку:

<?php $str .= '<a href="<?php echo html_encode(getImageLinkURL());?>" title="<?php echo getBareImageTitle();?>"><?php printImageThumb(getAnnotatedImageTitle()); ?></a>' ?>

, чтобы выглядеть примерно так:

<?php $str .= '<a href="' . html_encode(getImageLinkURL()) . '" title="' . getBareImageTitle() . '" ' . printImageThumb(getAnnotatedImageTitle() . '</a>;'; ?>

Другая проблема заключается в том, что вы не можете echo в строку и объединить ее.Вместо этого вы хотите вернуть строковое значение.

0 голосов
/ 20 марта 2011

Переменная $str не заключена в теги <?php ?>.

0 голосов
/ 20 марта 2011

Ваш php-код начинается и заканчивается за пределами ваших php-блоков со случайными php-блоками между ними.

<?php $str .= '<a href="';
$str .= html_encode(getImageLinkURL());
$str .= '" title="';
$str .= getBareImageTitle();
$str .= '">';
$str .= printImageThumb(getAnnotatedImageTitle());
$str .= '</a>';
?>

В качестве альтернативы:

<?php $str .= '<a href="'.html_encode(getImageLinkURL()).'" title="'.getBareImageTitle().'">'.printImageThumb(getAnnotatedImageTitle()).'</a>'; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...