Timeago tarih biçimini yalnızca 24 saatten daha kısa bir süre önce kullan


8

Timeago modülünü tarih formatı olarak kullanmak istiyorum . Ancak, zaman önce 24 saati aştığında, Twitter veya Dribbble kullanımı gibi başka bir format (ör. 4 Şub, 2013) göstermesini istiyorum.

Kodu düzeltmeye çalıştım, ancak yeteneklerim beni hayal kırıklığına uğrattı: /

Bu sebeple muhtemelen daha iyi bir modül var mı? Yoksa kendiminkini yapmak zorunda mıyım?

Nasıl çalışmasını istediğimi gösteren bu kodu buldum , ancak nasıl drupal için bu uygulamak için hiçbir fikrim yok.

Herhangi bir yardım takdir, teşekkürler.


Bu, henüz talep edilmemişse Timeago modülü için harika bir özellik isteği olacaktır.
beth

@beth Modülle ilgili sorunları inceledim ve talep edilmiyor gibi görünüyor. Bunu yapmak istemiyorsanız yarın bir sorun yaratacağım (bugün için zaman yok)
Alex

Kod için ne gibi düzenlemeler yaptınız? Bu tarih sitenizde nerede görünüyor?
beth

@beth jquery.timeago.js dosyasındaki kodu yalnızca seconds değişkeni 86400'den (24 saat) azsa çalıştırmaya çalıştım. Ancak, tüm modülün çalışmamasını sağlamak zorundayım, aksi takdirde diğer formatları göstermeyecek, çünkü hala onları geçersiz kılıyor.
Alex

Yanıtlar:


1

Kullanıcılar gerçekten bir sayfada, bu tarihlerin javascript yoluyla güncellenmesi gerektiği kadar uzun süre oturuyor mu? Çoğu, bir şeye tıklayacak ve tüm sayfayı bir noktada yeniden yükleyecektir. Belki de bir php çözümü de bir seçenektir?

Özel Biçimlendiriciler modülünü kullanarak php çözümünü elde edebilirsiniz .

Aşağıdaki kodla yeni bir php türü özel biçimlendirici oluşturursanız (bunun bir tarih damgası türü olduğundan emin olun):

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

Formatlayıcıyı oluştururken, 'datetamp' alan türünü seçtiğinizden emin olun. Biçimlendirici oluşturulduktan sonra, içerik türünüzün görüntü yönetme sekmesinde, bu biçimlendiriciyi kullanmak için alanı ayarlayın.

Tarihinizi ayrı bir alan olarak kaydetmediyseniz, Display Suite modülünü yükleyerek özel biçimlendiriciyi düğüm değiştirme süresine uygulayabilirsiniz .

Bu modüllerden herhangi birini kullanmak istemiyorsanız, ancak temanıza veya php'nize bir miktar php kesmek istiyorsanız, yine de format_interval ve format_date işlevleriyle aynı mantığı kullanabilirsiniz.

Umarım yardımcı olabilir.


0

Biçimlendirilmiş bir tarihi göstermek için timeago kullandığınız her yerde, aşağıdaki gibi bir kod parçası sizin için hile yapar mı?

// 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);

Bunun bir .module dosyasına uygulanması gerekiyor mu? Nereye koyacağımı gerçekten anlayamıyorum.
Alex

Timeago .module dosyasında yeni tarihlerin nerede uygulandığını bulmanız gerekir ve daha sonra @Amarnath'ın öneri olduğunu ya da benzer bir şeyi, örneğin yeni tarihlerin gerçek uygulaması ve bazı koşulların etrafını saran bir if ifadesi gibi deneyebilirsiniz. matematik tarih 24 saatten büyükse bunu yapın.
CR47

0

MyCustom Modülü Oluşturma

myCustom.module içeriği

/**
 * 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 oluşturun ve içerir

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

Kullanımı:

echo myCustom_format_date(1392532844);

2
Merhaba. Bir açıklama gönderebilir misiniz? Bu site kodlar için değil, cevaplar içindir .
Mołot

Evet tabi ki. Daha fazla cevap için ben ilgileneceğim.
Rupesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.