Talha Rehman
Talha Rehman

Reputation: 55

Use alternative titles for image

I have following code where inside image tag I open php tag and decide different images based on ifelse() condition. I want to add different titles for the images selected but could not come up with a solution. The code is as follows:

<img title = "Last assessment for this child was submitted <?php if ($time == 0){echo $time;}else{echo $time - 1;}?> Month(s) ago." 
            src="<?php 
                            if ($record->$period == 0) { echo base_url()."img/warning.png";}
                            else{

                                date("M d, Y", strtotime($record->$period));
                                $vtime = new DateTime($record->$period);             ///////////////////////
                                $today = new DateTime(); // for testing purposes            ///Calculate  Time period//
                                $diff = $today->diff($vtime);                                   ///
                                $time = $diff -> m;
                                if($time <= 4)
                                {echo base_url()."img/green.png";}
                                elseif( $time > 4 && $time <= 6)
                                {echo base_url()."img/yellow.png";}
                                elseif($time >= 6)
                                {echo base_url()."img/red.png";}
                            }
                " 
    />

I want different title for the first condition. i.e. If the first condition is true and the image shown is "warning.png". Then the image title should be "Check record" instead of title "last assessment submitted was ...."

Any help is much appreciated.

Upvotes: 0

Views: 63

Answers (4)

Alankar More
Alankar More

Reputation: 1115

PHP is easily embed with the HTML. So use it.

$imageURL = "";
if ($record->$period == 0) {
    $imageURL = base_url() . "img/warning.png";
} else {
    // date("M d, Y", strtotime($record->$period)); // This is not usable remove this statement
    $vtime = new DateTime($record->$period);             ///////////////////////
    $today = new DateTime(); // for testing purposes            ///Calculate  Time period//
    $diff = $today->diff($vtime);                                   ///
    $month = $diff->m;
    if ($month <= 4) {
        $imageURL = base_url() . "img/green.png";
    } elseif ($month > 4 && $month <= 6) {
        $imageURL = base_url() . "img/yellow.png";
    } else {
        $imageURL = base_url() . "img/red.png";
    }
}

Rewrite your image tag as follow:

<img title = "Last assessment for this child was submitted <?php echo ($time)? $time - 1: $time; ?> Month(s) ago." 
     src="<?php echo $imageURL; ?>" />

There are some mistakes with your code.Kindly check the below points for further developments.

date("M d, Y", strtotime($record->$period)) : Why this statement is there as you have not saved the result saved by the date function.

$vtime : What is vtime ? Variable should I short and meaningful name.

$diff->m : This will return the month number so to be more specific instead of $time use $month as variable name to store the month value.

Regarding the if condition

  • First If : checking for $month is <= 4 : correct
  • Second If: checking for $month > 4 or <=6
  • Third elseif : in your old code. Why we need this because if it is not satisfied by above two conditions then that means it is compulsory >= 6 then put this in else part directly.

Upvotes: 0

Kevin
Kevin

Reputation: 41885

Just like I've said in the comments, you could just separate the logic, make your calculations here and there. After you are done with it, set the variables and then echo it out in the presentation:

<?php
// initialization
$title = '';
$src = '';

// logic
$time = ($time == 0) ? $time : $time - 1;
$title = "Last assessment for this child was submitted %s Month(s) ago."; // initial

if ($record->$period == 0) { 
    $src = base_url() . "img/warning.png";
    // override $title
    $title = 'Check record';
} else {
    $vtime = new DateTime($record->$period);            
    $today = new DateTime();
    $diff = $today->diff($vtime);
    $time = $diff->m;
    if($time <= 4) {echo ;
        $src = base_url()."img/green.png";
    } elseif( $time > 4 && $time <= 6) {
        $src = base_url()."img/yellow.png";
    } elseif($time >= 6) {
        $src = base_url()."img/red.png";
    } else {
        // whatever you need to do
    }
}

$title = sprintf($title, $time);

?>
<!-- HTML MARKUP -->
<img title="<?php echo $title; ?>" src="<?php echo $src; ?>" />

Upvotes: 1

Kalkran
Kalkran

Reputation: 334

You should avoid putting so much PHP code inline in the HTML to keep your code readable.

if ($record->period === 0) {
    echo '<img src="img/warning.png" title="Warning title" />';
} else {
    // Are you sure this does what you want?
    // You probably need $record->period. (no $)
    $vtime = new DateTime($record->$period);
    $today = new DateTime();
    $diff = $today->diff($vtime);
    $time = $diff->m;
    $title = 'Last assessment for this child was submitted ' . 
        ($time === 0 ? 0 : $time-1) . 
        ' month(s) ago.';

    if ($time <= 4) {
        echo '<img src="img/green.png" title="'. $title . '" />';
    } else if ($time <= 6) {    
    // Don't need to check if it's bigger than 4, you've already checked this 
    // in the initial "if" and if that was succesful, we wouldn't be here.
        echo '<img src="img/yellow.png" title="'. $title . '" />';
    } else {
        echo '<img src="img/red.png" title="' . $title . '" />';
    }
}

Upvotes: 0

Aman Dhanda
Aman Dhanda

Reputation: 438

You can simply use the following. Just nest current if...else condition in another if...else condition on title tag also.

<img title = "
    <?php if($record->period==0) 
        echo "Check record"; 
    else { ?>
        Last assessment for this child was submitted <?php if ($time == 0){echo $time;}else{echo $time - 1;}?> Month(s) ago.
    <?php } ?>" 
            src="<?php 
                            if ($record->$period == 0) { echo base_url()."img/warning.png";}
                            else{

                                date("M d, Y", strtotime($record->$period));
                                $vtime = new DateTime($record->$period);             ///////////////////////
                                $today = new DateTime(); // for testing purposes            ///Calculate  Time period//
                                $diff = $today->diff($vtime);                                   ///
                                $time = $diff -> m;
                                if($time <= 4)
                                {echo base_url()."img/green.png";}
                                elseif( $time > 4 && $time <= 6)
                                {echo base_url()."img/yellow.png";}
                                elseif($time >= 6)
                                {echo base_url()."img/red.png";}
                            }
                " 
    />

Upvotes: 1

Related Questions