1. Приветствую гостей и пользователей нашего форума! Первый раз вы у нас или же давно участвуете в жизни ресурса, хочу напомнить несколько моментов.

    1) Пользуемся поиском по форуму! Зачастую информация может находиться не по разделу!

    2) Раздел ИНФО-продуктов относительно новый, но имеем уже более 3000 высококлассных материалов (пользуемся сортировкой по прификсам).

    3) И самое важное, КАК КАЧАТЬ БЕЗ ОГРАНИЧЕНИЙ, вся информация находится по этой ссылке КУПИТЬ VIP

    4) Временная акция, получи +5 постов за вступление в нашу группу "Вконтакте" Более подробно ТУТ

    5) Веди активную жизнь на форуме и получай рубли на личный счёт!

    Скрыть объявление
  2. На нашем форуме Null-Prog действует серьёзное правило касательно размещения материалов!

    ДЛЯ РЕЛИЗЁРОВ: категорически запрещается выкладка материалов на файлообменники типа Deposit, letitbit и другие, требующие просмотров рекламы, обрезающие скорость и тд. Нарушителям, первые 2 раза предупреждения, далее БАН. Тему по этому поводу можно посмотреть ТУТ

    Скрыть объявление
  3. В тестовом режиме на нашем форуме открыт онлайн конструктор сайтов. Вы можете попробовать создать свой сайт у НАС, интуитивно понятный интерфейс, переведёт на 95%, быстрый экспорт проекта, от вас только перетаскивать элементы и вставить в них необходимый текст!

    Все вопросы ТУТ

    Скрыть объявление

  4. Скрыть объявление
  5. Уважаемые форумчане, открывается новый раздел форума, посвящённый ремонту и эксплуатации автомобилей. Просмотреть его можно ТУТ

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

    Напоминаю, сообщения в разделе АВТО не учитываются, общение не ограничено.

    Скрыть объявление
  6. Объявляется набор Модераторов на различные раздел форума, свои заявки можно оставлять в ЭТОМ разделе, перед оставлением заявки рекомендуется ознакомиться с ПРАВИЛАМИ для модераторов.

Набор PHP-функции для создания user-friendly интерфейса на русском языке

Тема в разделе "FAQ", создана пользователем Sam Jack, 18 май 2015.

  1. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.756
    Симпатии:
    4.631
    Они умеют склонять существительные по числовому признаку, выводить дату с нормальными русскими названиями месяцев и выводить дату в удобочитаемом человеко-понятном виде (вчера, позавчера, 2 дня 3 часа и 2 минуты назад, через 1 год и 2 месяца и т.д.


    Использовать их можно так:
    Код:
    <acrnonym title="<?php print r_date($timestamp, 'j M Y в H:i', false); ?>"><?php print human_date($timestamp, 2, false);?></acronym>
    <acrnonym title="<?php print r_date($timestamp, 'j M Y в H:i'); ?>"><?php print human_date($timestamp);?></acronym>
    Получаем примерно такой результат:
    Код:
    <acronym title="2 января 2009 в 23:39">1 день назад</acronym>
    <acronym title="2 января в 23:39">Вчера</acronym>
    И так:
    Код:
    <?php
    $count = 10;
    printf('%d %s', $count, declension($count, array('комментарий', 'комментария', 'комментариев')));
    ?>
    Возврат 10 комментариев


    Сами функции:
    Код:
    <?php
    /**
    * Склонение существительных по числовому признаку
    *
    * @var integer    Число, по которому производится склонение
    * @var array    Массив форм существительного
    * @return string Существительное в нужной форме
    *
    * Например:
    * $count = 10;
    * sprintf('%d %s', $count, declension($count, array('комментарий', 'комментария', 'комментариев')));
    *
    * Возвращает:
    * 10 комментариев
    */
    function declension($number, $words) {
        $number = abs($number);
        if ($number > 20) $number %= 10;
        if ($number == 1) return $words[0];
        if ($number >= 2 && $number <= 4) return $words[1];
        return $words[2];
    }
    /**
    * Приводит дату к заданному формату с учетом русских названий месяцев
    *
    * В качестве параметров функция принимает все допустимые значения функции date(),
    * но символ F заменяется на русское название месяца (вне зависимости от локали),
    * а символ M — на русское название месяца в родительном падеже
    *
    * @var integer    Unix-timestamp времени
    * @var string    Формат даты согласно спецификации для функции date() с учетом замены значения символов F и M
    * @var boolean    Флаг отсекания года, если он совпадает с текущим
    * @return string Отформатированная дата
    */
    function r_date($time = '', $format = 'j M Y', $cut_year = true) {
        if(empty($time)) $time = time();
        if($cut_year && date('Y') == date('Y', $time)) $format = preg_replace('/o|y|Y/', '', $format);
        $month = abs(date('n', $time)-1);
        $rus = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
        $rus2 = array('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
        $format = preg_replace(array("'M'", "'F'"), array($rus[$month], $rus2[$month]), $format);
        return date($format, $time);
    }
    /**
    * Выводит дату в приблизительном удобочитаемом виде (например, "2 часа и 13 минут назад")
    *
    * Необходимо наличие функции declension() для корректной работы
    *
    * @var integer    Unix-timestamp времени
    * @var integer    Степень детализации
    * @var boolean    Флаг использования упрощенных названий (вчера, позавчера, послезавтра)
    * @var string    Формат даты с учетом замены значения символов F и M, если объявлена функция r_date()
    * @return string Отформатированная дата
    */
    function human_date($timestamp, $granularity = 1, $use_terms = true, $default_format = 'j M Y') {
        $curtime = time();
        $original = $timestamp;
        $output = '';
        if($curtime >= $original) {
            $timestamp = abs($curtime - $original);
            $tense = 'past';
        } else {
            $timestamp = abs($original - $curtime);
            $tense = 'future';
        }
        $units = array('years' => 31536000,
                    'weeks' => 604800,
                    'days' => 86400,
                    'hours' => 3600,
                    'min' => 60,
                    'sec' => 1);
        $titles = array('years' => array('год', 'года', 'лет'),
                    'weeks' => array('неделя', 'недели', 'недель'),
                    'days' => array('день', 'дня', 'дней'),
                    'hours' => array('час', 'часа', 'часов'),
                    'min' => array('минута', 'минуты', 'минут'),
                    'sec' => array('секунда', 'секунды', 'секунд'));
        foreach ($units as $key => $value) {
            if ($timestamp >= $value) {
                $number = floor($timestamp / $value);
                $output .= ($output ? ($granularity == 1 ? ' и ' : ' ') : '') . $number .' '. declension($number, $titles[$key]);
                $timestamp %= $value;
                $granularity--;
            }
        }
        if($tense == 'future') {
            $output = 'Через '.$output;
        } else {
            $output .= ' назад';
        }
      if($use_terms) {
          $terms = array('Через 1 день' => 'Послезавтра',
                        '1 день назад' => 'Вчера',
                        '2 дня назад' => 'Позавчера'
                        );
          if(isset($terms[$output])) $output = $terms[$output];
      }
      return $output ? $output : (function_exists('r_date') ? r_date($original, $default_format) : date($default_format, $original));
    }
    ?>
     
    Метки:
  2. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.756
    Симпатии:
    4.631
    Вот интересный способ получить количество Twitter последователей на чистом PHP
    Во-первых, создаём файл Cache.php и копируем туда код:
    Код:
    /**
    * @desc Class реализация кэш функциональности
    */
    class Cache
    {
    const PATH_TO_CACHE = 'cache/';
    /**
    * @desc считать данные из кэша
    * @param string $fileName - название кэш файла
    * @return bool/string
    * Usage: Cache::read('fileName.extension')
    */
    function read($fileName)
    {
    $fileName = self::PATH_TO_CACHE . $fileName;
    if (file_exists($fileName)) {
    $handle = fopen($fileName, 'rb');
    $data = fread($handle, filesize($fileName));
    $data = unserialize($data);
    // проверка истечения срока жизни кэша
    if (time() > $data[0]) {
    // it expired, delete the file
    @unlink($fileName);
    return false;
    }
    fclose($handle);
    // если кэш валиден, возвращаем данные
    return $data[1];
    } else {
    return false;
    }
    }
    /**
    * @desc записать кэш типа key => value
    * @param string $fileName - название кэш файла (ключ)
    * @param mixed $variable - значение
    * @param number $ttl - время жизни файла
    * @return void
    * Usage: Cache::write('fileName.extension', value)
    */
    function write($fileName, $variable, $ttl)
    {
    $fileName = self::PATH_TO_CACHE . $fileName;
    $handle = fopen($fileName, 'a');
    fwrite($handle, serialize(array(time() + $ttl, $variable)));
    fclose($handle);
    }
    /**
    * @desc удаление кэш файла
    * @param string $fileName - название кэш файла (ключ)
    * @return void
    * Usage: Cache::delete('fileName.extension')
    */
    function delete($fileName)
    {
    $fileName = self::PATH_TO_CACHE . $fileName;
    @unlink($fileName);
    }
    } 
    Данный класс будет использоваться для создания и считки кэша. Так же в классе есть такой параметр как время жизни кэша, так что вы можете быть спокойны о “свежести” информации.

    Для работы с Twitter, можно использовать библиотеку https://github.com/J7mbo/twitter-api-php, которую нашёл на Github. Создайте файл TwitterAPIExchange.php и вставьте следующий код:
    Код:
     function getTwitterFollowers($screenName = 'codeforest')
    {
    require_once('Cache.php');
    require_once('TwitterAPIExchange.php');
    // данную информаци можно взять при создании Twitter приложения на http://dev.twitter.com/apps
    $settings = array(
    'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
    );
    $cache = new Cache();
    // получаем последователей из кэша
    $numberOfFollowers = $cache->read('cfTwitterFollowers.cache');
    // если кэша нет или время его жизни истекло
    if (false === $numberOfFollowers) {
    // создаём запрос
    $apiUrl = "https://api.twitter.com/1.1/users/show.json";
    $requestMethod = 'GET';
    $getField = '?screen_name=' . $screenName;
    $twitter = new TwitterAPIExchange($settings);
    $response = $twitter->setGetfield($getField)
    ->buildOauth($apiUrl, $requestMethod)
    ->performRequest();
    $followers = json_decode($response);
    $numberOfFollowers = $followers->followers_count;
    // кэшируем информацию на час
    $cache->write('cfTwitterFollowers.cache', $numberOfFollowers, 1*60*60);
    }
    return $numberOfFollowers;
    } 
    Теперь, там где вам нужно внедрить функционал воспользуйтесь следующем кодом:

    Код:
    // подключаем файлы!
    require_once(getTwitterFollowers.php);
    // получаем инфу из Twitter
    echo getTwitterFollowers('codeforest'); 
     

Поделиться этой страницей

iHax Community
Рейтинг@Mail.ru Яндекс.Метрика мониторинг сайтов
Форум программного обеспечения/
Загрузка...