Utilizza il formato data di Timeago solo per meno di 24 ore fa


8

Vorrei utilizzare il modulo Timeago come formato data. Tuttavia, quando il tempo fa ha superato le 24 ore, mi piacerebbe che mostrasse un altro formato (ad es. 4 febbraio 2013) molto simile a Twitter o Dribbble.

Ho provato a modificare il codice, ma le mie abilità mi hanno deluso: /

Esiste forse un modulo migliore per questa causa? O devo crearne uno mio?

Ho trovato questo codice che mostra come voglio che funzioni, tuttavia non ho idea di come implementarlo su Drupal.

Qualsiasi aiuto è apprezzato, grazie.


Questa sarebbe un'ottima richiesta di funzionalità per il modulo Timeago se non è già stato richiesto.
Bet

@beth Ho appena esaminato i problemi del modulo e non sembra essere stato richiesto. Domani creerò un problema (non c'è tempo per farlo oggi) a meno che tu non voglia farlo :)
Alex

Quali modifiche hai provato a fare al codice? Dove appare questa data sul tuo sito?
Bet

@beth Ho provato a far funzionare il codice nel file jquery.timeago.js solo se la variabile dei secondi era inferiore a 86400 (24h). Tuttavia, devo far funzionare l'intero modulo, altrimenti non mostrerà gli altri formati, perché li sta ancora sovrascrivendo.
Alex

Ho creato un problema che può essere trovato qui
Alex

Risposte:


1

Gli utenti siedono davvero su una pagina per un tempo abbastanza lungo, che queste date devono essere aggiornate tramite javascript? La maggior parte di loro farà clic su qualcosa e finirà per ricaricare l'intera pagina ad un certo punto. Quindi forse anche una soluzione php è un'opzione?

È possibile ottenere la soluzione php utilizzando il modulo Formatter personalizzati .

Se crei un nuovo formattatore personalizzato di tipo php, con il seguente codice (assicurati che sia un tipo di 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;

Quando si crea il formatter, assicurarsi di selezionare il tipo di campo 'datestamp'. Una volta creato il formatter, quindi nella scheda Gestisci visualizzazione del tipo di contenuto, imposta il campo per utilizzare questo formatter.

Se la data non è memorizzata come campo separato, è possibile applicare il formatter personalizzato all'ora modificata del nodo, installando il modulo Display Suite .

Se non vuoi usare nessuno di questi moduli ma vuoi hackerare alcuni php nel tuo tema o qualcosa del genere, puoi comunque usare la stessa logica sopra con le funzioni format_interval e format_date.

Spero che possa essere d'aiuto.


0

Ovunque tu stia usando timeago per mostrare una data formattata, uno snippet come quello qui sotto farà il trucco per te?

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

Questo dovrebbe essere applicato a un file .module? Non riesco davvero a capire dove metterlo.
Alex

Dovresti trovare dove nel file .module di timeago vengono applicate le nuove date e quindi puoi provare quale suggerimento di @Amarnath o qualcosa di simile, come un'istruzione if che circonda l'applicazione effettiva delle nuove date e la condizione essendo alcune matematica dicendo se la data è maggiore di 24 ore fa, fare questo.
CR47

0

Crea un modulo MyCustom

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

Crea myCustom.install e contiene

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

Utilizzo:

echo myCustom_format_date(1392532844);

2
Ciao. Potresti pubblicare una spiegazione? Questo sito è pensato per risposte , non per codice .
Mołot,

Sì, naturalmente. Mi prenderò cura di ulteriori risposte.
Rupesh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.