Gunakan format tanggal Timeago kurang dari 24 jam yang lalu

8

Saya ingin menggunakan modul Timeago sebagai format tanggal. Namun, ketika waktu yang lalu telah melampaui 24 jam, saya ingin menampilkan format lain (misalnya 4 Februari 2013) seperti Twitter atau penggunaan Dribbble.

Saya mencoba untuk mengubah kode, tetapi keterampilan saya mengecewakan saya: /

Apakah mungkin ada modul yang lebih baik untuk tujuan ini? Atau apakah saya harus membuatnya sendiri?

Saya menemukan kode ini yang menunjukkan bagaimana saya ingin bekerja, namun saya tidak tahu bagaimana menerapkannya ke drupal.

Bantuan apa pun dihargai, terima kasih.

Alex
sumber
Ini akan menjadi permintaan fitur yang hebat untuk modul Timeago jika belum diminta.
beth
@ Tapi saya baru saja melihat masalah untuk modul dan sepertinya tidak pernah diminta. Saya akan membuat masalah besok (tidak ada waktu untuk hari ini) kecuali jika Anda ingin melakukannya :)
Alex
Perubahan apa yang Anda coba lakukan terhadap kode? Di mana tanggal ini muncul di situs Anda?
beth
@beth, saya mencoba membuat kode di file jquery.timeago.js hanya berjalan jika variabel detik kurang dari 86400 (24 jam). Namun, saya harus membuat seluruh modul tidak berjalan, jika tidak maka tidak akan menampilkan format lain, karena masih menimpa mereka.
Alex
Saya membuat masalah yang dapat ditemukan di sini
Alex

Jawaban:

1

Apakah pengguna benar-benar duduk di halaman untuk waktu yang cukup lama, sehingga tanggal ini perlu diperbarui melalui javascript? Sebagian besar dari mereka akan mengklik sesuatu dan akhirnya memuat kembali seluruh halaman di beberapa titik. Jadi mungkin, solusi php juga merupakan opsi?

Anda dapat mencapai solusi php dengan menggunakan modul Custom Formatters .

Jika Anda membuat formatter khusus jenis php baru, dengan kode berikut (pastikan itu adalah tipe datestamp):

$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;

Saat membuat formatter, pastikan Anda memilih jenis bidang 'datestamp'. Setelah formatter dibuat, maka di tab kelola tampilan jenis konten Anda, setel bidang untuk menggunakan formatter ini.

Jika tanggal Anda tidak disimpan sebagai bidang yang terpisah, Anda mungkin bisa menerapkan pemformat khusus ke waktu yang dimodifikasi node, dengan menginstal modul Display Suite .

Jika Anda tidak ingin menggunakan modul-modul ini tetapi ingin meretas beberapa php ke dalam tema Anda atau sesuatu, Anda masih dapat menggunakan logika yang sama di atas dengan fungsi format_interval dan format_date.

Semoga itu bisa membantu.

alexkb
sumber
0

Di mana pun Anda menggunakan timeago untuk menunjukkan tanggal yang diformat, apakah cuplikan seperti di bawah ini akan melakukan trik untuk Anda?

// 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);
Amarnath Ravikumar
sumber
Apakah ini seharusnya diterapkan pada file .module? Saya benar-benar tidak tahu di mana harus meletakkannya.
Alex
Anda perlu menemukan di mana dalam file timemo.module tanggal baru diterapkan dan kemudian Anda bisa mencoba apa saran @Amarnath, atau sesuatu yang serupa, seperti pernyataan if yang membungkus aplikasi aktual dari tanggal baru dan kondisinya menjadi beberapa matematika mengatakan jika tanggal lebih besar dari 24 jam yang lalu, lakukan ini.
CR47
0

Buat Modul MyCustom

mengandung 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');
}

Buat myCustom.install & isinya

/**
 * @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');  
}

Penggunaan:

echo myCustom_format_date(1392532844);
Rupesh
sumber
2
Halo. Bisakah Anda memposting penjelasan? Situs ini dimaksudkan untuk jawaban , bukan untuk kode .
Mołot
Ya tentu saja. Saya akan merawatnya untuk jawaban lebih lanjut.
Rupesh