Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP

Войти
Регистрация
Восстановить пароль
 
DenTheBeast
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 21
#1

Неправильно выводятся Дни Рождения сотрудников - PHP

01.02.2017, 11:54. Просмотров 194. Ответов 3
Метки php (Все метки)

Есть сайт на wordpress, есть плагин birthday-widget, где файл class-birthdays-widget.php отвечает за вывод списка именинников. Наблюдается такая ошибка, что если сегодня есть у кого ДР, то он начинает выводить коряво (скрин приложен), а если сегодня нет ни у кого ДР, то выводит правильно.
В чем может быть ошибка при выводе?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
wp_enqueue_script( 'jquery-ui-tooltip' );
                    wp_enqueue_script( 'birthdays-script' );
                    wp_enqueue_style ( 'jquery-style' );
                    $days_organized = self::organize_days( $filtered );
                    //TODO get current day in format MM-DD
                    $today_key = date( 'm-d' );
                    $upcoming_days = $birthdays_settings[ 'upcoming_days_birthdays' ];
                    $consecutive_days = $birthdays_settings[ 'upcoming_consecutive_days' ];
                    $upcoming_mode = $birthdays_settings[ 'upcoming_mode' ];
                    /* If today is not in the array, add the key and sort the array again */
                    if ( ! array_key_exists( $today_key, $days_organized ) ) {
                        $days_organized[ $today_key ] = array();
                        ksort( $days_organized );
                    }
                    /* Find the current day in the array, then iterate to it */
                    $offset = array_search( $today_key, array_keys( $days_organized ) );
                    for ( $i = 0; $i < $offset; $i++ ) {
                        next( $days_organized );
                    }
                    //var_dump( $days_organized );
                    /* Now show the number of days user desires */
                    $final_days = array();
                    $not_empty = false;
                    if ( $upcoming_mode ) {
                        $today = DateTime::createFromFormat( 'm-d', $today_key );
                        for ( $i = 0; $i < $consecutive_days; $i++ ) {
                            $today->add( new DateInterval( 'P1D' ) );
                            $tmp_day = $today->format( 'm-d' );
                            if ( ! array_key_exists( $tmp_day, $days_organized ) ) {
                                $days_organized[ $tmp_day ] = array();
                            }
                        }
                        ksort( $days_organized );
                        $offset = array_search( $today_key, array_keys( $days_organized ) );
                        for ( $i = 0; $i < $offset; $i++ ) {
                            next( $days_organized );
                        }
                        $tmp_count = $offset;
                        $total = count( $days_organized );
                        for ( $i = 0; $i < $consecutive_days; $i++ ) {
                            $final_days[] = current( $days_organized );
                            next( $days_organized );
                            $tmp_count++;
                            if ( current( $days_organized ) == false && ( $tmp_count == $total ) ) {
                                reset( $days_organized );
                                $tmp_count = 0;
                            }
                        }
                    } else {
                        $tmp_count = $offset;
                        $total = count( $days_organized );
                        for ( $i = 0; $i < $upcoming_days; $i++ ) {
                            if( ( current( $days_organized ) == false ) && ( $tmp_count == $total ) ) {
                                reset( $days_organized );
                                $tmp_count = 0;
                            } elseif( ( current( $days_organized ) == false ) && $i == 0 ) {
                                $tmp_count++;
                                if ( $tmp_count == $total ) {
                                    reset( $days_organized );
                                    $final_days[] = current( $days_organized );
                                    next( $days_organized );
                                    $tmp_count = 1;
                                    continue;
                                }
                                next( $days_organized );
                            }
                            if ( $tmp_count == $offset && $i != 0 ) {
                                break;
                            }
                            $final_days[] = current( $days_organized );
                            next( $days_organized );
                            $tmp_count++;
                        }
                    }
                    foreach( $final_days as $day ) {
                        if ( !empty( $day ) ) {
                            $not_empty = true;
                            break;
                        }
                    }
                    if ( !$not_empty ) {
                        if ( $birthdays_settings[ 'empty_response' ] ) {
                            $html = '<div class="birthday_error">';
                            $html .= $birthdays_settings[ 'empty_response_text' ];
                            $html .= '</div>';
                            return $html;
                        } else {
                            return;
                        }
                    } else {
                        $year_passed = false;
                        $format = get_option( 'date_format' );
                        $format = str_replace( 'Y', '', $format );
                        $today = new DateTime( "today" );
                        $year = date( 'Y' );
                        foreach ( $final_days as $day ) {
                            if ( !$day )
                                continue;
                            uasort( $day, "cmp" );
                            $html_date = date_i18n( $format, $day[ 0 ]->date );
                            $html_date = self::remove_empty( $html_date );
                            $date1 = new DateTime( date( 'j-m', $day[ 0 ]->date ). '-' .$year );
                            if ( $birthdays_settings[ 'upcoming_year_seperate' ] && !$year_passed ) {
                                if ( $date1 < $today && $date1 != $today ) {
                                    $tmp = $year + 1;
                                    $html .= '<div class="birthday_year" >'. __( 'Year' ) . ' ' . $tmp . '</div>';
                                    $year_passed = true;
                                }
                            }
                            if ( $birthdays_settings[ 'upcoming_year' ] ) {
                                if ( $date1 < $today ) {
                                    $year += 1;
                                }
                                $html_date .= '&nbsp;<span class="birthday_upcoming_year">' . $year . '</span>';
                            }
                            $html .= '<div class="birthday_date" >' . $html_date . '</div>';
                            $flag = false;
                            foreach ( $day as $row ) {
                                $html .= '<div class="birthday_element birthday_name">';
                                if ( $flag && $birthdays_settings[ 'comma' ] ) {
                                    $html .= ', ';
                                } else {
                                    $flag = true;
                                }
                                if ( isset( $row->link ) ) {
                                    $html .= $row->link;
                                } else {
                                    $html .= $row->name;
                                }
                                $age = date( "Y" ) - date( "Y", $row->date );
                                if ( $birthdays_settings[ 'user_image_enabled' ] ) {
                                    $html .= '<a href="' . $row->image . '" target="_blank" class="user_image_enabled" ';
                                } else {
                                    $html .= '<a href="#" target="_blank" ';
                                }
                                if( $birthdays_settings[ 'user_verbiage' ] ) {
                                    $html .= 'data-age="' . $age . ' ' . $birthdays_settings[ 'user_verbiage_text' ] . '" ';
                                }
                                $html .= '></a></div>';
                            }
                        }
                    }
0
Миниатюры
Неправильно выводятся Дни Рождения сотрудников  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2017, 11:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неправильно выводятся Дни Рождения сотрудников (PHP):

Неправильно выводятся страницы - PHP
Всем привет! Я в сайтостроении новичок. Не могу решить пробшему. Сайт написан на php, html и css. Все страницы выводтся корректно. Но если...

Неправильно выводятся данные через printf - PHP БД
Здрасте! Имеется БД с полями id, Nick, Pass Хочу вывести на экран инфу из всех полей с id2. Написал вот так: ...

1C 8.x Запрос. Дни Рождения сотрудников в ближайшие 3 дня - 1С
Добрый день. Необходимо решить задачу. &quot;При старте системы нужно сообщать сотрудников, у которых в ближайшие 3 дня день рождения....

Дни рождения - Delphi БД
Здравствуйте, помогите организовать оповещения о днях рождения. БД сделано в access.. как примерно сделать выведения оповещения в делфи

Дни рождения - C++
Написать программу, пердупреждающую о днях рождениях друзей, желательно с подсказками Дублирование тем запрещено правилами форума (п....

Дни рождения - Теория вероятностей
Какова вероятность того что из R людей хотя бы у двух совпадут дни рождения?29февраля не учитывать помогите с задачей и если можно...

3
Para bellum
Эксперт PHP
3143 / 2906 / 643
Регистрация: 06.01.2011
Сообщений: 8,486
01.02.2017, 13:29 #2
Цитата Сообщение от DenTheBeast Посмотреть сообщение
начинает выводить коряво (скрин приложен)
А что коряво? И как должно быть?
0
DenTheBeast
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 21
01.02.2017, 13:33  [ТС] #3
В изображении видно: что так как сегодня есть ДР у людей, то он остальные дни рождения в этом месяце пропускает и выводит в других месяцах рандомно. А должен выводить на каждый день как обычно.
0
DenTheBeast
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 21
02.02.2017, 14:31  [ТС] #4
Ошибки нет, условия не хватает - только не пойму какого.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2017, 14:31
Привет! Вот еще темы с ответами:

Получить дни рождения на 2 недели вперед - MySQL
Пытался получить дни рождения, написал вот такой код SELECT * FROM таблица WHERE DAYOFYEAR(`cb_dob`) BETWEEN DAYOFYEAR(NOW()) AND...

как создать запрос позволяющий выводить дни рождения - MS Access
может быть уже была подобная тема как создать запрос позволяющий выводить ФИО и номер тел. тех клиентов, у которых сегодня день рождения ...

Распечатать список студентов, дни рождения которых весной - Pascal
Распечатать список студентов, дни рождения которых весной.

Написать программу, которая запрашивает дни рождения трех человек - C++
Написать программу, которая запрашивает дни рождения трех человек, родившихся в марте 1981 г., и выводит на экран дату рождения старшего.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru