2013-03-22 2 views
1

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

This is the description shortened... 
[image] 
[image] 
Description starts again with a new paragraph continuing... 

Заполнители являются [изображением]. С каждым новым сообщением я загружаю несколько изображений, но каждое сообщение может варьироваться от 1 до 10 изображений, поэтому размещается переменная сумма [image]. У меня есть функция, которая получает все связанные изображения с этим сообщением и подсчитывает, сколько изображений есть.

Вот код, который у меня есть до сих пор, но что не так, для первых двух заполнителей [изображение] он дважды отображает первое связанное изображение, затем цикл и показывает описание снова, на этот раз со вторым изображением, заменяющим оба [image] заполнители.

<?php 
    foreach ($photos as $picture) { 
    $count = count($picture); 
    for($i = 1; $i<= $count; $i++) { 
     $image = $picture['filename']; 
     $replace = "[image]"; 
     $image_path = '../../content_management/image_upload/'; 
     $placeholders = array("$replace"); 
     $image_location = array('<a class="fancybox" href="' . $image_path . '' . $image . '" data-fancybox-group="gallery"><img src="' . $image_path . '' . $image . '" /></a>'); 
     $rawstring = $photo_article['description']; 
     $new_string = $rawstring; 
     $new_string = str_replace($placeholders, $image_location, $new_string, $i); 
     echo $new_string; 
    } 
    } 
?> 

А выход:

This is the description shortened... 
Image1.jpg 
Image1.jpg 
Description starts again with a new paragraph continuing... 

This is the description shortened... 
Image2.jpg 
Image2.jpg 
Description starts again with a new paragraph continuing... 
+0

Ваша проблема, скорее всего, '$ я 'в вызове str_replace должно быть 1. Но использование str_replace в любом случае громоздко. Рассмотрим 'preg_replace_callback'. – mario

+0

Если я возьму $ i из str_replace(); он теперь удваивает выход. Я попытаюсь использовать preg_replace_callback – tunedin

ответ

0
$photos = array(
    'photo1' => array(
    'filename' => 'image1.png' 
    ), 
    'photo2' => array(
    'filename' => 'image2.png' 
    ), 
); 

$photo_article['description'] = "This is the description shortened... 
[image] 
[image]"; 

foreach ($photos as $picture) 
{ 
    $image = $picture['filename']; 
    $image_path = '../../content_management/image_upload/'; 
    $replacement = '<a class="fancybox" href="' . $image_path . '' . $image . '" data-fancybox-group="gallery"><img src="' . $image_path . '' . $image . '" /></a>'; 
    $photo_article['description'] = preg_replace("~\[image\]~s", $replacement, $photo_article['description'], 1); 
} 
    echo $photo_article['description']; 
+0

Я попытался применить ваш код, но теперь он просто повторяет каждое описание с помощью [image] заполнителей. Он не заменяет их. – tunedin

+0

Я отредактировал свой ответ. Я включил массив $ photos и переменную $ photo_article, которую я использовал для ее проверки. – C9HDN

+0

Вместо того, чтобы определять изображения в статье, тогда preg_replacing ... почему бы просто не добавить изображения в $ photo_article ['description'], как foreach ($ photos as $ picture) {... $ photo_article ['description']. = $ замена; } –

0

вы зацикливание но называть тот же $picture['filename'] он должен быть $picture[$i]['filename'] или просто foreach ($picture as $thisPic) { $thisPic['filename']; }

+0

Я не думаю, что вы можете сделать $ picture [$ i] ['filename']; – tunedin

+0

@tunedin Вы можете использовать цикл for, но это будет $ photos [$ i] ['filename']. – C9HDN

+0

@ Калум вы можете привести пример? – tunedin

Смежные вопросы