2010-02-07 7 views
2

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

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

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

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

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

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

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

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

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

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

Хотя я видел другие способы сделать это, включая цикл 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>"; 
    } 
?> 

ответ

5

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

+0

Спасибо за ваше предложение. Если/else не был моим предпочтительным способом сделать это изначально, но, в конце концов, это был самый простой способ его достижения. Вероятно, так, как я это сделал, это не самый эффективный код, но он работает пока. Еще раз спасибо. – BlissC

3

Лучший способ сделать это, вероятно, будет просто использовать 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); 

?> 
+0

Спасибо - это действительно полезно. Я никогда не изучал GD и что он может сделать, но это хороший пример. – BlissC

+0

Вы также можете использовать фактические шрифты ... просто загрузите arial.ttf и другие. ImageMagick может выполнять еще более сложную компоновку. – Xorlev

1
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; 
} 

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

+0

Спасибо, что выглядит очень похоже на то, что я помню из сценария, который у меня был. Диапазоны дат будут месяц или, может быть, два месяца в нечетных случаях максимум - остальные будут либо неделями, либо неделями. Есть всего несколько потенциальных проблем, о которых мне интересно. Во-первых, будет ли это стоить без года (т. Е. Всего лишь месяц и день), а также то, что произойдет, если бы был день с изображением, которое находилось в диапазоне дат, который был указан другим изображением. Я хочу использовать его для отображения лент осведомленности для разных видов рака, и также может быть день в пределах диапазона дат. – BlissC

+0

Да, вы можете пропустить год полностью, если это подходит для вашего случая использования. В случае даты, соответствующей нескольким условиям, первая указанная будет отображаться (из-за инструкции 'break'). Сначала укажите наиболее конкретные даты, а более общие диапазоны - в нижней части, и вы будете в хорошей форме. – ceejayoz

+0

Это, наверное, очень глупый вопрос, но как указать диапазон дат? Я знаю, как это сделать, используя формат else/if и используя функцию, используя что-то вроде 'if ($ checkDate> $ firstDate1 && $ checkDate <$ firstDate2)', но я не помню, как это сделать, используя переключатель/case/break. Я пробовал 'case ('01 -25 ',' 01-31 '):', но это совсем не нравится. 'case ('01 -25 '> =' 01-31 '):' например, казалось, работал до тех пор, пока я не начал вводить больше дат, но тогда отображал только изображение для первого диапазона дат, когда у меня было больше диапазонов в – BlissC

2

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

$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 Date reference поможет вам подобрать даты, которые вы хотите сравнить.

+0

Спасибо, Алекс - это действительно полезный фрагмент, который нужно знать. – BlissC

1

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

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') 
)); 
+0

Спасибо Xue - это решает проблему просто использовать месяц и день, поэтому я могу просто указать месяц и день. Как и в моем комментарии ниже, я задаюсь вопросом, что произойдет, если бы был день с изображением, которое находилось в диапазоне дат, который был указан с другим изображением.Я хочу использовать его для отображения рекламных лент для разных видов рака, а также может быть день в пределах диапазона дат - то есть может быть более одного изображения для конкретной даты – BlissC

0

Рассматривали ли вы с помощью массива, который вы рамочную через?

$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']."'>"; 
    } 
} 

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

~ James.

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