2015-08-28 2 views
3

Я новичок в php, но мне нужно изменить некоторую строку, чтобы добавить ссылку с rel intro в виде короткого кода визуального композитора, анимированного значка. Проблема в том, что у меня есть эта переменная, по умолчанию, где я должен добавить две переменные, только если они были вставлены.

Вот первоначальный код:

$svg_icon = '<div class="svg-icon-holder" data-size="'. $icon_size . '" data-animation-speed="'.$animation_speed_time.'" data-animation="'.$enable_animation.'" data-animation-delay="'.$animation_delay.'" data-color="'.strtolower($color) .'"><span>'. get_template_directory_uri() . '/css/fonts/svg/' . $image .'</span></div>'; 

Проблема заключается в том, что: я должен вставить <a href="'. $icon_link . '" rel="'. $icon_link_rel .'"> перед тегом <div> в код и </a> после закрытия DIV Но это только если переменная &icon_link устанавливаются, если нет, то тег <a> не должен отображаться, поскольку мне не нужно иметь ссылку на все значки.

Надеюсь, что я хорошо объяснил, если не дайте мне знать!

С уважением, Алинь.

+2

Почему бы не сделать оператор 'if' и не проверить это условие, а затем изменить html-теги? – rst

ответ

3

сделать if-statement, если $icon_link определен и установлен, затем добавьте <a> тег в $svg_icon переменной с помощью точки (.):

$svg_icon = '<div class="svg-icon-holder" data-size="'. $icon_size . '" data-animation-speed="'.$animation_speed_time.'" data-animation="'.$enable_animation.'" data-animation-delay="'.$animation_delay.'" data-color="'.strtolower($color) .'"><span>'. get_template_directory_uri() . '/css/fonts/svg/' . $image .'</span></div>'; 
if($icon_link) 
    { 
     $svg_icon = '<a href="'. $icon_link . '" rel="'. $icon_link_rel .'">'. 
        $svg_icon.'</a>'; 
    } 
+0

Не могли бы вы объяснить, почему вы сбиваете? что могло бы помочь мне улучшить мой ответ –

+0

Здравствуйте! Спасибо за ваш ответ, это сработало для меня и выглядит как самый простой способ! Может ли кто-нибудь еще сказать мне, действительно ли этот код? –

+0

@AlinIonescu Я рад, что смогу помочь. если этот ответ разрешил ваш вопрос, отметьте его как принятый, нажав галочку.Это указывает более широкому сообществу, что вы нашли решение и принесли некоторую репутацию как автору, так и самому себе. –

1

Просто используйте, если Постулаты. Вы манипулируете строку, так что вы легко можете добавить слова к другой строки, как этот

if ($icon_link){ 
    $beginning = "<a href='$icon_link' rel='$icon_link_rel'>"; 
    $ending = "</a>" 
} 
else { 
    $beginning = ""; 
    $ending = "" 
} 
$svg_icon = "$beginning<div class='svg-icon-holder' data-size='$icon_size' data-animation-speed='$animation_speed_time' data-animation='$enable_animation' data-animation-delay='$animation_delay' data-color='".strtolower($color)."'> 
<span>".get_template_directory_uri()."/css/fonts/svg/$image</span></div>$ending"; 
+0

Где закрывается '' –

+0

Я только что увидел, что я отредактировал – Hearner

+0

, теперь он просто начинает казаться беспорядочным. Я думаю, что LuthandoLoot придумал лучший ответ. –

-1

Во-первых, не пишите все на одной линии, так что он подходит на экране здесь на SO (и, возможно, в вашем коде тоже).

Во-вторых, я бы использовал переменные instring. В php вы можете использовать singlequotes, где ваша строка используется как есть, или вы можете использовать doublequotes, где вы можете использовать переменные в ней. например echo "Hey, my name is $name"; $ имя здесь будет заменено значением переменной. Если вам нужно doublequotes в строке, вы можете избежать их с помощью обратной косой черты \"

В-третьих, вы можете использовать встроенный, если-то еще, folowing синтаксис: $str = boolean ? "str if true" : "str if false"

$svg_icon = isset($icon_link) ? "<a href=\"$icon_link\" 
    rel=\"$icon_link_rel\">" : '' . //add your opening <a> if needed 
    "<div class=\"svg-icon-holder\" 
    data-size=\"$icon_size\" data-animation-speed=\"$animation_speed_time\" 
    data-animation=\"$enable_animation\" 
    data-animation-delay=\"$animation_delay\" 
    data-color=\"strtolower($color) \"><span>" 
    . get_template_directory_uri() 
    . "/css/fonts/svg/ $image </span></div>" 
    . isset($icon_link) ? '<\a>' : ''; //add your closing <\a> if needed 
+1

Вы говорите ему не писать все на одной строке, но вы даете ему ответ, где вы ставите все в одной строке, используя оператор inline if .... –

+0

@MeneerVenus отредактировал это для вас. Теперь лучше? – inetphantom

0

Лично я предпочитаю формат строки с помощью sprintf вместо вставки строки вместе с использованием точек. Вы можете поместить строку $svg_icon вместе с помощью sprintf только с тегом <div>. После этого просто обернуть <a> тег вокруг $svg_icon если $icon_link определяется:

$svg_icon_format = '<div class="svg-icon-holder" data-size="%d" data-animation-speed="%d" data-animation="%d" data-animation-delay="%d" data-color="%d"><span>%s</span></div>'; 

$values = array(..enter values here..); 

$svg_icon = sprintf($svg_icon_format,$values); 

if(isset($icon_link) && isset($icon_link_rel)) { 
    $svg_icon = sprintf('<a href="%s" rel="%s">%s</a>',$icon_link,$svg_icon,$icon_link_rel); 
} 

Отказ от ответственности: Этот код не проверяется. Посмотрите документацию sprintf, которую я связал, и попробуйте написать код самостоятельно.