Заменить тег, если соответствующее значение не пустое, иначе не показывать - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть код:

$html = '<html>
            <body>
                <p><a href="[LINK]">[LINK]</a></p>
                <p><img src="[IMAGE]" alt="something" /></p>
                <p>Language specific string: [ANOTHER TAG]</p>
            </body>
         </html>';
$search = array('[LINK]', '[IMAGE]');
$replace = array($post['link'], $post['image']);
$html = str_replace($search, $replace, $html);

Выше заменит [LINK] и [IMAGE] соответствующими значениями $post - это хорошо, когда оба значения не пусты. Мне нужен способ скрыть соответствующий абзац, когда одно или несколько значений $post пусты. У кого-нибудь есть идеи, что было бы наиболее эффективным решением?
$html контент загружается с помощью file_get_contents (выше просто иллюстрация его контента).

РЕДАКТИРОВАТЬ : Поскольку в $html у меня также есть «локализованные» строки, я бы предпочел использовать решение, которое не вынуждает меня заменить весь абзац. Был хороший ответ, который использовал манипулирование DOM, но автор удалил его ...

Ответы [ 2 ]

1 голос
/ 05 декабря 2011
$html = '<html>
            <body>
                [LINK]
                [IMAGE]
            </body>
         </html>';
$search = array('[LINK]', '[IMAGE]');
$replace = array(
  (!empty($post['link'])) ? "<p><a href=\"{$post['link']}\">{$post['link']}</a></p>" : '', 
  (!empty($post['image'])) ? "<p><img src=\"{$post['image']}\" alt=\"something\" /></p>" : ''
);
$html = str_replace($search, $replace, $html);

Теперь [LINK] и [IMAGE] заменяются целым тегом, если они присутствуют, и пустой строкой, если нет.

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

EDIT

Поскольку это файлы шаблонов электронной почты, я бы предложил использовать шаблонную функциональность PHP и поместить некоторый PHP-код в шаблоны.

Файл шаблона

<html>
  <body>
<?php if (!empty($post['link'])) { ?>
    <p><a href="<?php echo $post['link']; ?>"><?php echo $post['link']; ?></a></p>
<?php } if (!empty($post['image'])) { ?>
    <p><img src="<?php echo $post['image']; ?>" alt="something" /></p>
<?php } if (!empty($post['another_tag'])) { ?>
    <p>Language specific string: <?php echo $post['another_tag']; ?></p>
<?php } ?>
  </body>
</html>

PHP скрипт

ob_start();
include('template.html');
$html = ob_get_clean();
0 голосов
/ 05 декабря 2011

Вы можете сделать:

if (empty($post['link']) || empty($post['image'])) {
    $html = str_replace('<p><a href="[LINK]">[LINK]</a></p>', '', $html);
    $html = str_replace('<p><img src="[IMAGE]" alt="something" /></p>', '', $html);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...