Nekroviktor 5 Опубликовано: 17 мая 2011 Рассказать Опубликовано: 17 мая 2011 (изменено) Сайт zudemon.ru Появилась такая задумка, что при редактировании профиля юзер выберет сколько ему лет указывая только число, а скрипт уже сам реагирует на то, какое слово указать. Взял за основу хак правильное отображение просмотров. Для установки хака нужно в файлах show.short.php, show.full.php, show.custom.php Найти строчку (~ Строка 136): $news_find = array ('{comments-num}' => $row['comm_num'], '{views}' => $row['news_read'], '{category}' => $my_cat, '{link-category}' => $my_cat_link, '{news-id}' => $row['id'], '{PAGEBREAK}' => '' ); Заменить на: $n_read = substr($row['news_read'], -1); if ($n_read == 1) { $view_n = "просмотр"; } elseif( $n_read > 1 AND $n_read < 5 ) { $view_n = "просмотра"; } else { $view_n = "просмотров"; } $view_new = $row['news_read'] ." ". $view_n; $news_find = array ('{comments-num}' => $row['comm_num'], '{views}' => $view_new, '{category}' => $my_cat, '{link-category}' => $my_cat_link, '{news-id}' => $row['id'], '{PAGEBREAK}' => '' ); А вот что получилось: Добавить в БД: В users строку years Так получается что нужно где то дописать в profile.php $n_read = substr($row['years'], -1); if ($n_read == 21,31,41,51,61,71,81,91) { $view_n = "год"; } elseif( $n_read > 6 AND $n_read < 20 ) { $view_n = "лет"; } elseif( $n_read > 25 AND $n_read < 30 ) { $view_n = "лет"; } elseif( $n_read > 35 AND $n_read < 40 ) { $view_n = "лет"; } elseif( $n_read > 45 AND $n_read < 50 ) { $view_n = "лет"; } elseif( $n_read > 55 AND $n_read < 60 ) { $view_n = "лет"; } elseif( $n_read > 65 AND $n_read < 70 ) { $view_n = "лет"; } elseif( $n_read > 75 AND $n_read < 80 ) { $view_n = "лет"; } elseif( $n_read > 85 AND $n_read < 90 ) { $view_n = "лет"; } elseif( $n_read > 95 AND $n_read < 100 ) { $view_n = "лет"; } else { } elseif( $n_read > 22 AND $n_read < 24 ) { $view_n = "года"; } elseif( $n_read > 32 AND $n_read < 34 ) { $view_n = "года"; } elseif( $n_read > 42 AND $n_read < 44 ) { $view_n = "года"; } elseif( $n_read > 52 AND $n_read < 54 ) { $view_n = "года"; } elseif( $n_read > 62 AND $n_read < 64 ) { $view_n = "года"; } elseif( $n_read > 72 AND $n_read < 74 ) { $view_n = "года"; } elseif( $n_read > 82 AND $n_read < 84 ) { $view_n = "года"; } elseif( $n_read > 92 AND $n_read < 94 ) { $view_n = "года"; } $view_new = $row['years'] ." ". $view_n; И как не знаю добавить поле что бы человек не выбрал из списка сколько ему лет, а сам ввёл, но что бы это в базе данных конечно было, со смыслом что при последующем редактировании профиля не обнулилось. Надо я так думаю ещё отредактировать profile.php После: $icq = intval( $_POST['icq'] ); if( ! $icq ) $icq = ""; Дописать: $icq = intval( $_POST['years'] ); if( ! $years ) $years = ""; После: if( strlen( $icq ) > 20 ) { $stop .= $lang['news_err_25']; } Дописать: if( strlen( $years ) > 3 ) { $stop .= $years['news_err_25']; } Заменить это: if( strlen( $password1 ) > 0 ) { $password1 = md5( md5( $password1 ) ); $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } else { $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } На это: if( strlen( $password1 ) > 0 ) { $password1 = md5( md5( $password1 ) ); $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', years='$years', email='$email', info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } else { $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', years='$years', email='$email', info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } После: $tpl->set( '{icq}', stripslashes( $row['icq'] ) ); Добавить: $tpl->set( '{years}', stripslashes( $row['years'] ) ); Изменено 17 мая 2011 пользователем Nekroviktor Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 17 мая 2011 Рассказать Опубликовано: 17 мая 2011 Автор И чё молчим? Неужели не кто не продолжит ход мысли... Ну-ну.. Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 18 мая 2011 Рассказать Опубликовано: 18 мая 2011 Оператор % похоже уже не в моде... P.S. вводить нужно не возраст а дату рождения. Иначе люди на сайте не будут взрослеть))) Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 18 мая 2011 Рассказать Опубликовано: 18 мая 2011 Автор Тож верно...( Цитата Ссылка на сообщение Поделиться на других сайтах
keiZ 1 Опубликовано: 24 мая 2011 Рассказать Опубликовано: 24 мая 2011 В чём проблема сделать дату рождения ? Цитата Ссылка на сообщение Поделиться на других сайтах
- Den - 32 Опубликовано: 24 мая 2011 Рассказать Опубликовано: 24 мая 2011 (изменено) function pluralForm($n, $form1, $form2, $form5) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; if ($n1 > 1 && $n1 < 5) return $form2; if ($n1 == 1) return $form1; return $form5; } echo pluralForm($n, год, года, лет); Изменено 24 мая 2011 пользователем - Den - Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 25 мая 2011 Рассказать Опубликовано: 25 мая 2011 (изменено) Автор Спасибо большое - Den -! - Den -, я как понял ты взял функцию pluralForm, Склонение существительных с числительными. Использования этой функции происходит так: echo "Мне ".$n." ".pluralForm($n, "год", "года", "лет"); Отличный выреант, но есть казус... Вот упёрся и всё, не получаеться блин... Вот моя мысь: Заменить в коде $n на $years function pluralForm($n, $form1, $form2, $form5) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; if ($n1 > 1 && $n1 < 5) return $form2; if ($n1 == 1) return $form1; return $form5; } echo pluralForm($n, год, года, лет); Получиться так: function pluralForm($years, $form1, $form2, $form5) { $n = abs($years) % 100; $n1 = $years % 10; if ($years > 10 && $n < 20) return $form5; if ($years1 > 1 && $n1 < 5) return $form2; if ($years1 == 1) return $form1; return $form5; } echo pluralForm($years, год, года, лет); Так получаеться куда и как воткнуть: ??? echo "Мне ".years." ".pluralForm($years, "год", "года", "лет"); и куда воткнуть: ??? function pluralForm($years, $form1, $form2, $form5) { $n = abs($years) % 100; $n1 = $years % 10; if ($years > 10 && $n < 20) return $form5; if ($years1 > 1 && $n1 < 5) return $form2; if ($years1 == 1) return $form1; return $form5; } echo pluralForm($years, год, года, лет); Далее я понимаю, что нужно сделать стандарт добавление years После: $icq = intval( $_POST['icq'] ); if( ! $icq ) $icq = ""; Дописать: $icq = intval( $_POST['years'] ); if( ! $years ) $years = ""; После: if( strlen( $icq ) > 20 ) { $stop .= $lang['news_err_25']; } Дописать: if( strlen( $years ) > 3 ) { $stop .= $years['news_err_25']; } Заменить это: if( strlen( $password1 ) > 0 ) { $password1 = md5( md5( $password1 ) ); $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } else { $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } На это: if( strlen( $password1 ) > 0 ) { $password1 = md5( md5( $password1 ) ); $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', years='$years', email='$email', info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } else { $sql_user = "UPDATE " . USERPREFIX . "_users set fullname='$fullname', land='$land', icq='$icq', years='$years', email='$email', info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' WHERE user_id = '{$id}'"; } После: $tpl->set( '{icq}', stripslashes( $row['icq'] ) ); Добавить: $tpl->set( '{years}', stripslashes( $row['years'] ) ); За рание большое спасибо! Изменено 25 мая 2011 пользователем Nekroviktor Цитата Ссылка на сообщение Поделиться на других сайтах
- Den - 32 Опубликовано: 25 мая 2011 Рассказать Опубликовано: 25 мая 2011 (изменено) В самой функции ничего менять не нужно, на то она и функция. Использовать так echo " мне " ".$years." " . pluralForm($years, 'год', 'года', 'лет'); Всё но есть казус И никаких казусов никогда нигде нет, давно пользуюсь этой функцией. По поводукуда и как воткнуть не могу сказать пока, в DLE её еще не использовал, а сидеть сейчас и втыкать в код совсем нет времени. Изменено 25 мая 2011 пользователем - Den - Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 077 Опубликовано: 25 мая 2011 Рассказать Опубликовано: 25 мая 2011 - Den -, Вашу функцию можно реализовать одной строчкой: $years = $years%10==1&&$years%100!=11?'год' : ($years%10>=2&&$years%10<=4 && ($years%100<10||$years%100>=20)?'года':'лет') Цитата Ссылка на сообщение Поделиться на других сайтах
- Den - 32 Опубликовано: 25 мая 2011 Рассказать Опубликовано: 25 мая 2011 Да эт не моя функция, давно нашел где-то и юзаю. Но спасибо за еще один вариант Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 26 мая 2011 Рассказать Опубликовано: 26 мая 2011 Автор Над сайтом пишет: летМне years лет Я так понял что это из за того что не туда постоянно встовляю: echo " мне " ".$years." " . pluralForm($years, 'год', 'года', 'лет'); Правильно я думаю? Цитата Ссылка на сообщение Поделиться на других сайтах
sergey_479 3 Опубликовано: 31 мая 2011 Рассказать Опубликовано: 31 мая 2011 Над сайтом пишет: летМне years лет Я так понял что это из за того что не туда постоянно встовляю: echo " мне " ".$years." " . pluralForm($years, 'год', 'года', 'лет'); Правильно я думаю? Кавычки у тебя лишние. Рабочий пример <?PHP function pluralForm($n, $form1, $form2, $form5) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; if ($n1 > 1 && $n1 < 5) return $form2; if ($n1 == 1) return $form1; return $form5; } $year = 41; echo 'Мне '.$year.' '.pluralForm($year, 'год', 'года', 'лет'); ?> Цитата Ссылка на сообщение Поделиться на других сайтах
Critical Error 155 Опубликовано: 4 июня 2011 Рассказать Опубликовано: 4 июня 2011 Как такое на jQuery реализовать? Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 19 января 2012 Рассказать Опубликовано: 19 января 2012 Автор Внимание! Внимание! Есть готовое решение! )) Нашёл и установил хак дата рождения юзера: http://www.4dle.ru/hacks/1147155152-khak-data-rozhdenija.html В profile.php добавить: function pluralForm($n, $form1, $form2, $form5) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; elseif ($n1 > 1 && $n1 < 5) return $form2; elseif ($n1 == 1) return $form1; else return $form5; } $r = mktime(0, 0, 0, $birth_m, $birth_d, $birth_y); $age = (time()-$r)/31536000; list($year) = explode(".",$age); $years = round($year); $tpl->set('{years}',$years." ".pluralForm($years, 'год', 'года', 'лет')); В userinfo.tpl использоваться {years} для вывода года. Демо можно глянуть над авой тут. ) Цитата Ссылка на сообщение Поделиться на других сайтах
Adobe 111 Опубликовано: 19 января 2012 Рассказать Опубликовано: 19 января 2012 Если на говнокод.ру выложить этот код, сотку наберем? Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 19 января 2012 Рассказать Опубликовано: 19 января 2012 Автор А что говняного в функции pluralForm и правильным, точным выводом возроста пользователя + склонением лет? Я вообще не понял, он не грамозкий, ошибок в нём нет и вообще работает без запинок и поправок... Я вот сидел старарался, старался. всякие функции выискивал, а тут бац! И код гавно... Обидно блин... Цитата Ссылка на сообщение Поделиться на других сайтах
Adobe 111 Опубликовано: 19 января 2012 Рассказать Опубликовано: 19 января 2012 А что говняного в функции pluralForm и правильным, точным выводом возроста пользователя + склонением лет? Я вообще не понял, он не грамозкий, ошибок в нём нет и вообще работает без запинок и поправок... Я вот сидел старарался, старался. всякие функции выискивал, а тут бац! И код гавно... Обидно блин... Да я не об этом), А вот об этом: $n_read = substr($row['years'], -1); if ($n_read == 21,31,41,51,61,71,81,91) { $view_n = "год"; } elseif( $n_read > 6 AND $n_read < 20 ) { $view_n = "лет"; } elseif( $n_read > 25 AND $n_read < 30 ) { $view_n = "лет"; } elseif( $n_read > 35 AND $n_read < 40 ) { $view_n = "лет"; } elseif( $n_read > 45 AND $n_read < 50 ) { $view_n = "лет"; } elseif( $n_read > 55 AND $n_read < 60 ) { $view_n = "лет"; } elseif( $n_read > 65 AND $n_read < 70 ) { $view_n = "лет"; } elseif( $n_read > 75 AND $n_read < 80 ) { $view_n = "лет"; } elseif( $n_read > 85 AND $n_read < 90 ) { $view_n = "лет"; } elseif( $n_read > 95 AND $n_read < 100 ) { $view_n = "лет"; } else { } elseif( $n_read > 22 AND $n_read < 24 ) { $view_n = "года"; } elseif( $n_read > 32 AND $n_read < 34 ) { $view_n = "года"; } elseif( $n_read > 42 AND $n_read < 44 ) { $view_n = "года"; } elseif( $n_read > 52 AND $n_read < 54 ) { $view_n = "года"; } elseif( $n_read > 62 AND $n_read < 64 ) { $view_n = "года"; } elseif( $n_read > 72 AND $n_read < 74 ) { $view_n = "года"; } elseif( $n_read > 82 AND $n_read < 84 ) { $view_n = "года"; } elseif( $n_read > 92 AND $n_read < 94 ) { $view_n = "года"; } $view_new = $row['years'] ." ". $view_n; Цитата Ссылка на сообщение Поделиться на других сайтах
Nekroviktor 5 Опубликовано: 19 января 2012 Рассказать Опубликовано: 19 января 2012 Автор Ну этот то конечно, кто ж спорить будет. ) Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.