Отображение изображения на основе даты в PHP - PullRequest
2 голосов
/ 07 февраля 2010

Где-то на моем компьютере у меня был PHP-скрипт для отображения изображения на основе даты, который позволял бы мне отображать разные изображения в определенные даты или между выбранными датами и отображать дату по умолчанию, если текущая дата не была один из перечисленных с определенным изображением для отображения.

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

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

Возможно, я использую неправильные условия поиска (я пробовал что-то вроде «php display image date»), но ничего подобного не нахожу.

Кто-нибудь знает что-нибудь подходящее под описание, приведенное выше, или может предложить лучший способ сделать это?

Я думаю, что мне нужно указать изображение по умолчанию, если для текущей даты задано определенное изображение, и, возможно, блок кода case / break может быть лучшим способом сделать это, чем if / else ....

У кого-нибудь есть мысли о том, как лучше это сделать?

Редактировать: Спасибо всем за ваши предложения. Я не был особенно заинтересован в использовании if / else / elseif, но, в конце концов, это казалось самым простым способом сделать это. То, как я это сделал, вероятно, не самый эффективный способ кодирования, но пока он работает.

(часть кода - она ​​довольно длинная, поэтому я не буду утомлять вас всем этим)

`` Хммм ... ладно, спасибо. Это объясняет, почему то, что я пытался сделать, не работало! : Лол:

Хотя я видел другие способы сделать это, включая цикл foreach и GD, я остановился на if / elseif / else в конце. Вероятно, это не самый эффективный способ сделать это с точки зрения кода, но это сработало в конце (часть кода в любом случае - это очень длинный список, и я не буду утомлять вас всем этим!):

<?php 
    // Macmillan Cancertalk week (21-25 Jan)
    if ((date('m') == 01) && (date('d') >= 21) || (date('m') == 01) && (date('d') <= 23)) {
    echo "<img src=\"images/ribbons/cancertalk.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }   
    // Macmillan Cancertalk week (21-25 Jan) and Cervical Cancer Awareness Week (24-30 Jan) 
    else if ((date('m') == 01) && (date('d') == 24)) {
    echo "<img src=\"images/ribbons/macmillan_cervical.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk and white and teal awareness ribbons\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week &amp; Cervical Cancer Awareness Week <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }   
    // Macmillan Cancertalk week (21-25 Jan), Cervical Cancer Awareness Week (24-30 Jan) and Beating Bowel Cancer - Be Loud Be Clear Week (25-31 Jan)   
    else if ((date('m') == 01) && (date('d') == 25)) {
    echo "<img src=\"images/ribbons/macmillan_cervical_bowel.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk, white & teal awareness ribbons, and blue & brown cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week, Cervical Cancer Awareness Week, and Be Loud Be Clear Week (Beating Bowel Cancer) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }
    // Beating Bowel Cancer - Be Loud Be Clear Week (25-31 Jan) 
    else if ((date('m') == 01) && (date('d') == 31)) {
    echo "<img src=\"images/ribbons/brown_blue_ribbon.gif\" height=\"145\" width=\"175\" alt=\"blue and brown cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Be Loud Be Clear Week (Beating Bowel Cancer) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }   
    // International Childhood Cancer Day (15 Feb)
    else if ((date('m') == 02) && (date('d') == 15)) {
    echo "<img src=\"images/ribbons/gold_ribbon.gif\" height=\"145\" width=\"175\" alt=\"gold cancer awareness ribbons\" /><br /><h6 class=\"awareness\">International Childhood Cancer Day <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }       
    // Gynaecological Cancers Campaign (1 Feb to 31 March)
    else if ((date('m') == 02) && (date('d') >= 01) || (date('m') == 02) && (date('d') <= 28)) {
    echo "<img src=\"images/ribbons/teal_ribbon.gif\" height=\"145\" width=\"175\" alt=\"teal cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Gynaecological Cancers Campaign (1st February &ndash; 31st March) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>";
    }   
    else {
    echo "<a class=\"awareness_link\" href=\"the-bookstall-cancer-links-and-resources.php\"><img src=\"images/ribbons/default_ribbon.gif\" height=\"145\" width=\"175\" alt=\"calendar\" /><br /><h6 class=\"awareness\">Check our awareness calendar for information about awareness events &ndash; <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6></a>";
    }
?>

Ответы [ 6 ]

5 голосов
/ 07 февраля 2010

Вы можете использовать функцию date() для проверки текущего месяца / дня / года и некоторые простые конструкции if / else для отображения разных изображений.

3 голосов
/ 07 февраля 2010

Лучший способ сделать это - использовать GD для отображения.

<?php

// Create a 75*15 image
$im = imagecreate(75, 15);

// White background and black text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 0);

// Write the date at the top left, offset by 2px to the right
imagestring($im, 5, 2, 0, date("m/d/y"), $textcolor);

// Output the image
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);

?>
2 голосов
/ 07 февраля 2010

Звучит так, как будто вы копировали / вставляли свой код раньше, но это действительно хороший фрагмент, чтобы узнать, готовы ли вы к нему. Базовая конструкция, которую вы ищете:

$today = getdate();
$day = $today['wday'];
if ($day == 1 OR $day == 2 OR $day == 3){
    echo "<img src='whatever image you want'>";
}
elseif ($day == 4 OR $day ==5){
    echo "<img src='another image' />";
}
else { echo "<img src='default image' />";}

Обычно вы находите дату и, используя циклы IF / ELSE, определяете, находится ли сегодняшний день в том или ином диапазоне. Если это так, отразите изображение, которое вы хотите показать.

В этом примере переменная $ day установлена ​​в число 1-7. 1 == Понедельник, 2 == Вторник, 3 == Среда ... Если это понедельник, вторник или среда, он показывает одно изображение (строка if ($day == 1 OR $day == 2 OR $day == 3)), четверг / пятница показывает другое, а в противном случае отображается «по умолчанию изображение, которое показывает на выходных. Очевидно, что это не ТОЧНЫЙ случай дней / дат, который вы хотите, но что-то вроде этой конструкции поможет вам.

Ознакомьтесь с ссылкой на дату PHP , чтобы узнать, какие даты вы хотите сравнить.

1 голос
/ 07 февраля 2010

Это моё решение, я гость, может быть, вам все равно, какой год, поэтому в этом решении просто рассмотрите месяц и дату:

function image_of_date($default, $options) {
    $today = date('md');
    foreach ($options as $item) {
        $src = $item[0];
        $begin = $item[1];
        $end = (3===count($item))? $item[2] : $begin;
        $begin = date('md', strtotime($begin));
        $end = date('md', strtotime($end));
        if ($today >= $begin && $today <= $end) {
            return $src;
        }
    }
    return $default;
}


echo image_of_date('default.png', array(
    array('jan-01.png', 'Jan 1'),
    array('feb.png', 'Feb 1', 'Feb 29')
));
1 голос
/ 07 февраля 2010
switch(date('Y-m-d')) {
  // multiple dates with same image
  case '2010-02-15':
  case '2010-02-07':
    print '<img src="/path/to/image.jpg" alt="" />';
    break;
  // really long ranges don't work all that well in this solution
  case '2010-03-01':
  case '2010-03-02':
  case '2010-03-03':
  case '2010-03-04':
  case '2010-03-05':
  case '2010-03-06':
  case '2010-03-07':
  case '2010-03-08':
  case '2010-03-09':
  case '2010-03-10':
    print '<img src="/path/to/image.jpg" alt="" />';
    break;
  // specific date image
  case '2010-12-25':
    print '<img src="/path/to/christmas.jpg" alt="" />';
    break;
  // fallback image
  default:
    print '<img src="/path/to/default.jpg" alt="" />';
    break;
}

Если вы делаете много больших диапазонов дат, это сломается, но хорошо работает для нескольких небольших диапазонов и конкретных дат.

0 голосов
/ 09 сентября 2014

Рассматривали ли вы использование массива, через который вы проходите цикл?

$events = array(
  array(
   'image' => 'img/1.png',
   'start' => '01-02-2014',
   'end' => '02-02-2014'
  ),
  array(
   'image' => 'img/2.png',
   'start' => '03-02-2014',
   'end' => '04-02-2014'
  )
);

и затем вы просто продолжаете с

foreach($events as $event) {
  if(date('d-m-Y') >= $event['start'] && date('d-m-Y') <= $event['end']) {
    echo "<img src='".$event['image']."'>";
  }
}

Надеюсь, это немного проще / чище для вас. И, конечно, вы можете добавить в массив любые дополнительные данные, которые вы хотите.

~ Джеймс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...