Перейти к публикации

Рекомендованные сообщения

Сайт 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'] ) );

Изменено пользователем Nekroviktor
Ссылка на сообщение
Поделиться на других сайтах

И чё молчим? Неужели не кто не продолжит ход мысли...

Ну-ну..

Ссылка на сообщение
Поделиться на других сайтах

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, год, года, лет);


Изменено пользователем - Den -
Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое - 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'] ) );

За рание большое спасибо!

Изменено пользователем Nekroviktor
Ссылка на сообщение
Поделиться на других сайтах

В самой функции ничего менять не нужно, на то она и функция.

Использовать так


echo " мне " ".$years." " . pluralForm($years, 'год', 'года', 'лет');

Всё

но есть казус

И никаких казусов никогда нигде нет, давно пользуюсь этой функцией.

По поводу

куда и как воткнуть

не могу сказать пока, в DLE её еще не использовал, а сидеть сейчас и втыкать в код совсем нет времени.

Изменено пользователем - Den -
Ссылка на сообщение
Поделиться на других сайтах

- Den -,

Вашу функцию можно реализовать одной строчкой:

$years = $years%10==1&&$years%100!=11?'год' : ($years%10>=2&&$years%10<=4 && ($years%100<10||$years%100>=20)?'года':'лет')

:)

Ссылка на сообщение
Поделиться на других сайтах

Над сайтом пишет:

летМне years лет

Я так понял что это из за того что не туда постоянно встовляю:

echo " мне " ".$years." " . pluralForm($years, 'год', 'года', 'лет');

Правильно я думаю?

Ссылка на сообщение
Поделиться на других сайтах

Над сайтом пишет:

летМне 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, 'год', 'года', 'лет');

?>

Ссылка на сообщение
Поделиться на других сайтах
  • 7 месяцев спустя...

Внимание! Внимание! Есть готовое решение! ))

Нашёл и установил хак дата рождения юзера:

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} для вывода года.

Демо можно глянуть над авой тут. )

Ссылка на сообщение
Поделиться на других сайтах

А что говняного в функции pluralForm и правильным, точным выводом возроста пользователя + склонением лет?

Я вообще не понял, он не грамозкий, ошибок в нём нет и вообще работает без запинок и поправок...

Я вот сидел старарался, старался. всякие функции выискивал, а тут бац! И код гавно... Обидно блин...

Ссылка на сообщение
Поделиться на других сайтах

А что говняного в функции 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;

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...