Використовуйте формат дати Timeago лише менше ніж за 24 години тому


8

Я хотів би використовувати модуль Timeago як формат дати. Однак, коли час тому перевищив 24 години, я хотів би, щоб він показав інший формат (наприклад, 4 лютого 2013 року), подібний до використання Twitter або Dribbble.

Я спробував налаштувати код, але мої навички мене підвели: /

Чи може бути кращий модуль для цієї причини? Або я повинен зробити своє?

Я знайшов цей код, який показує, як я хочу, щоб він працював, але я не маю уявлення, як реалізувати це для drupal.

Будь-яка допомога вдячна, дякую.


Це був би чудовий запит на функцію для модуля Timeago, якщо він ще не запитувався.
beth

@beth Я просто переглянув проблеми для модуля, і, схоже, його не вимагали. Я створіть випуск завтра (немає часу на це сьогодні), якщо ви не захочете це зробити :)
Alex

Які налаштування ви намагалися зробити в коді? Де ця дата з’являється на вашому сайті?
beth

@beth Я намагався зробити код у файлі jquery.timeago.js запускатися лише у випадку, якщо змінна секунд була менше 86400 (24 год). Однак я повинен змусити весь модуль не запускатися, інакше він не відображатиме інші формати, оскільки він все ще їх перекриває.
Олексій

Я створив випуск, який можна знайти тут
Алекс

Відповіді:


1

Чи дійсно користувачі сидять на сторінці досить довго, що ці дати потрібно оновлювати через javascript? Більшість із них щось натисне і в якийсь момент перезавантажить всю сторінку. То, можливо, php рішення теж є варіантом?

Ви можете досягти рішення php, використовуючи модуль користувальницьких форматів .

Якщо ви створюєте новий спеціальний формат формату php із наступним кодом (переконайтеся, що це тип датчика дати):

$element = array();
foreach ($variables['#items'] as $delta => $item) {
  $unixstamp = $item['value'];
  $time_since = mktime() - $unixstamp;
  if ($time_since < 86400) {
    $date_str = format_interval($time_since);
  }
  else {
    $date_str = format_date($unixstamp, 'custom', 'jS F Y');
  }

  $element[$delta] = array(
    '#type' => 'markup',
    '#markup' => $date_str,
  );
}
return $element;

Створюючи формат, переконайтесь, що ви вибрали тип поля 'датастака'. Після створення форматера на вкладці керування відображенням типу вмісту встановіть поле для використання цього форматера.

Якщо у вас немає дати, яка зберігається як окреме поле, можливо, ви зможете застосувати користувальницький форматер до модифікованого часу вузла, встановивши модуль Display Suite .

Якщо ви не хочете використовувати жоден із цих модулів, але хочете зламати якийсь php у свою тему чи щось таке, ви все одно можете використовувати ту саму логіку, що описана вище, з функціями format_interval та format_date.

Сподіваюся, що це може допомогти.


0

Де б ви не використовували timeago для показу відформатованої дати, чи буде фрагмент, подібний до наведеного нижче, зробити для вас трюк?

// Assume $timestamp has the raw Unix timestamp that I'd like to display using
// the "timeago" date format supposing it is within the last 24 hrs and another date
// format - "my_date_format" otherwise.
$rule = ((REQUEST_TIME - $timestamp) <= 24 * 60 * 60);
$fallback = format_date($timestamp, 'my_date_format');
return ($rule ? timeago_format_date($timestamp, $fallback) : $fallback);

Чи слід це застосовувати до файлу .module? Я не можу зрозуміти, куди це поставити.
Олексій

Вам потрібно буде знайти, де у файлі timeago .module застосовуються нові дати, і тоді ви можете спробувати те, що запропонував @Amarnath, або щось подібне, як, наприклад, якщо заява, що обертається навколо фактичного застосування нових дат, і умова є деякою математична приказка, якщо дата перевищує 24 години тому, зробіть це.
CR47

0

Створіть модуль MyCustom

myCustom.module містить

/**
 * Implements hook_date_formats().
 */
function myCustom_date_formats() {
  $formats = array('g:i a', 'H:i', 'M j', 'j M', 'm/d/y', 'd/m/y', 'j/n/y', 'n/j/y');
  $types = array_keys(myCustom_date_format_types());
  $date_formats = array();
  foreach ($types as $type) {
    foreach ($formats as $format) {
      $date_formats[] = array(
        'type' => $type,
        'format' => $format,
        'locales' => array(),
      );
    }
  }
  return $date_formats;
}

/**
 * Implements hook_date_format_types().
 */
function myCustom_date_format_types() {
  return array(
    'myCustom_current_day' => t('MyCustom: Current day'),
    'myCustom_current_year' => t('MyCustom: Current year'),
    'myCustom_years' => t('MyCustom: Other years'),
  );
}

/**
 * Formats a timestamp according to the defines rules.
 *
 * Examples/Rules:
 *
 * Current hour: 25 min ago
 * Current day (but not within the hour): 10:30 am
 * Current year (but not on the same day): Nov 25
 * Prior years (not the current year): 11/25/08
 *
 * @param $timestamp
 *   UNIX Timestamp.
 *
 * @return
 *   The formatted date.
 */
function myCustom_format_date($timestamp) {
  if ($timestamp > ((int)(REQUEST_TIME / 3600)) * 3600) {
    return t('@interval ago', array('@interval' => format_interval(abs(REQUEST_TIME - $timestamp), 1)));
  }
  if ($timestamp > ((int)(REQUEST_TIME / 86400)) * 86400) {
    return format_date($timestamp, 'myCustom_current_day');
  }
  if ($timestamp > mktime(0, 0, 0, 1, 0, date('Y'))) {
    return format_date($timestamp, 'myCustom_current_year');
  }
  return format_date($timestamp, 'myCustom_years');
}

Створіть myCustom.install & він містить

/**
 * @file
 * Install file for myCustom.module
 */

/**
 * Implements hook_install().
 */
function myCustom_install() {
  // Define default formats for date format types.
  variable_set("date_format_myCustom_current_day", 'g:i a');
  variable_set("date_format_myCustom_current_year", 'M j');
  variable_set("date_format_myCustom_years", 'n/j/y');
}

/**
 * Implements hook_uninstall().
 */
function myCustom_uninstall() {
  variable_del('date_format_myCustom_current_day');
  variable_del('date_format_myCustom_current_year');
  variable_del('date_format_myCustom_years');  
}

Використання:

echo myCustom_format_date(1392532844);

2
Привіт. Чи можете ви опублікувати пояснення? Цей сайт призначений для відповідей , а не для коду .
Молот

Так, звісно. Я буду дбати про це для подальшої відповіді.
Рупеш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.