Поддержка Плагины Четный / нечетный + день недели

  • Доброго дня, товарищи.
    Подскажите, как можно реализовать следующую идею:
    выводить на определенной странице контент в зависимости от того, четный или нечетный день. А если углубиться, то в идеале еще завязаться на день недели.
    т.е.
    если сегодня четное число и день недели понедельник, то выводим «1»
    если сегодня нечетное число и день недели понедельник, то выводим «2»
    и так далее.
    Сталкивался ли кто-нить с подобным?

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Используйте доки PHP для работы с датой http://php.net/manual/ru/function.date.php
    Алгоритм такой (примерно):
    1. Получаете текущий день (число) date('j');
    2. Получаете день недели date('w'); или date('N');
    3. Проверяете «четность» if ($var%2 == 0) { чет } else { нечет }*
    3. Выводите необходимый контент.


    *Обратите внимание, что ПН, в том и другом случае, будет нечетным.

    в таком случае у меня получается 14 условий:
    четное && понедельник
    четное && вторник

    if (($var%2 == 0) && (date(«N») == 1))
    if (($var%2 == 0) && (date(«N») == 2))
    if (($var%2 == 0) && (date(«N») == 3))
    if (($var%2 == 0) && (date(«N») == 4))
    if (($var%2 == 0) && (date(«N») == 5))
    if (($var%2 == 0) && (date(«N») == 6))
    if (($var%2 == 0) && (date(«N») == 7))
    if (($var%2 == 1) && (date(«N») == 1))
    if (($var%2 == 1) && (date(«N») == 2))
    if (($var%2 == 1) && (date(«N») == 3))
    if (($var%2 == 1) && (date(«N») == 4))
    if (($var%2 == 1) && (date(«N») == 5))
    if (($var%2 == 1) && (date(«N») == 6))
    if (($var%2 == 1) && (date(«N») == 7))

    есть мысли как это упростить?

    в таком случае у меня получается 14 условий:

    Впечатляет 🙂

    есть мысли как это упростить?

    Есть. Я, когда испытываю трудности с визуализацией алгоритма в уме, рисую на листочке https://ru.wikipedia.org/wiki/Блок-схема
    Помогает добиться результата за меньшее число шагов. Попробуйте.
    Мой вариант будет таким (за достоверность не ручаюсь, и для применения к вашей задаче потребует подгонки):

    $day = date('j');
    $weekday = date('N');
    
    echo ( $day%2 ) //Нечетный день: 1,3,5,7,9...
    	? ( ( $weekday%2 ) //Нечетный день недели: Пн,Ср,Пт,Вс
    		? 'Среда 11' : 'Четверг 23' ) //Первый: оба ДА, Второй: первый ДА, второй НЕТ
    	: ( ( $weekday%2 ) //Четный день и Нечетный день недели
    		? 'Пятница 14' : 'Суббота 30' ); //Первый: оба ДА, Второй: Первый ДА, второй НЕТ

    Мог и запутаться с комментариями 😀
    Может и существует более элегантное решение, не искал )

    Переписал с комментариями в нужном месте, для лучшего понимания:

    echo ( $day%2 )
    	? //Нечетное число 1,3,5,7,9...
    	( ( $weekday%2 )
    		? 'Среда 11' //Нечетный день недели ПН,СР,ПТ,ВС
    		: 'Четверг 23' ) //Четный день недели ВТ,ЧТ,СБ
    	: //Четное число 2,4,6,8,10....
    	( ( $weekday%2 )
    		? 'Пятница 14' //Нечетный день недели ПН,СР,ПТ,ВС
    		: 'Суббота 30' ); //Четный день недели ВТ,ЧТ,СБ

    Модератор Yuri

    (@yube)

    switch ( ( date( 'j' ) % 2 ) * 10 + date( 'N' ) ) {
       case 1 : // четный понедельник
       ....
       case 17 : // нечетное воскресенье
    }

    😉

    😉

    я тоже сначала хотел с кейсами, но мне тернары больше нравятся 🙂

    😉

    :DDD

    switch (date('j') % 2 . date('N') % 2) {
        case '00':
    	echo 'оба четные';
    	break;
        case '01':
            echo 'четное число. нечетный день недели';
    	break;
        case '10':
    	echo 'нечетное число. четный день недели';
    	break;
        default:
    	echo 'оба нечетные';
    	break;
    }

    :DDD

    У-упс 🙂 patch

    switch ( (int)(bool)( date('j') % 2 ) . (int)(bool)( date('N') % 2 ) )

    Подскажите, как можно реализовать следующую идею:
    выводить на определенной странице контент в зависимости от того, четный или нечетный день

    https://wordpress.org/plugins/shortcodes-ultimate/

    В этом плагине, после его последнего обновления, появилась новая и очень интересная функция — показ\скрытие контента по любому произвольному расписанию. Этот раздел называется «Планировщик»

    Вот что получается:

    switch (date('j') % 2 . date('N')) {
    // Нечетное число. День недели - Понедельник
    case '11':
    	query_posts('p=223');
    break;
    // Нечетное число. День недели - Вторник
    case '12':
    	query_posts('p=227');
    break;
    // Нечетное число. День недели - Среда
    case '13':
    	query_posts('p=231');
    break;
    // Нечетное число. День недели - Четверг
    case '14':
    	query_posts('p=235');
    break;
    // Нечетное число. День недели - Пятница
    case '15':
    	query_posts('p=239');
    break;
    // Нечетное число. День недели - Суббота
    case '16':
    	query_posts('p=248');
    break;
    // Нечетное число. День недели - Воскресенье
    case '17':
    	query_posts('p=248');
    break;
    
    // Четное число. День недели - Понедельник
    case '01':
    	query_posts('p=225');
    break;
    // Четное число. День недели - Вторник
    case '02':
    	query_posts('p=229');
    break;
    // Четное число. День недели - Среда
    case '03':
    	query_posts('p=233');
    break;
    // Четное число. День недели - Четверг
    case '04':
    	query_posts('p=237');
    break;
    // Четное число. День недели - Пятница
    case '05':
    	query_posts('p=241');
    break;
    // Четное число. День недели - Суббота
    case '06':
    	query_posts('p=248');
    break;
    // Четное число. День недели - Воскресенье
    case '07':
    	query_posts('p=248');
    break;
    }

    И как мне кажется, это не упростить…

    В любом случае, Спасибо за подсказку с реализацией!

    Модератор Yuri

    (@yube)

    И как мне кажется, это не упростить…

    $dd = array('11'=>223, '12'=>231, ... '07'=>248);
    query_posts(array('p' => $dd[date('j') % 2 . date('N')]));

    ^_^

    Модератор Yuri

    (@yube)

    А еще лучше добавить постам произвольное поле, в которое записать эти самые 01, 02, 03, 04, и по нему делать выборку. Код сокращается до одной строки, а заодно появляется возможность вносить изменения в привязку без редактирования кода.

    Юрий, спасибо! Круто!

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Четный / нечетный + день недели» закрыта для новых ответов.