Sử dụng định dạng ngày Timeago chỉ dưới 24 giờ


8

Tôi muốn sử dụng mô-đun Timeago làm định dạng ngày. Tuy nhiên, khi thời gian trước đã vượt quá 24h, tôi muốn nó hiển thị một định dạng khác (ví dụ: ngày 4 tháng 2 năm 2013) giống như sử dụng Twitter hoặc Dribbble.

Tôi đã cố chỉnh sửa mã, nhưng các kỹ năng của tôi làm tôi thất vọng: /

Có thể có một mô-đun tốt hơn cho nguyên nhân này? Hay tôi phải tự làm?

Tôi tìm thấy mã này cho thấy cách tôi muốn nó hoạt động, tuy nhiên tôi không biết làm thế nào để thực hiện điều này để drupal.

Bất kỳ trợ giúp được đánh giá cao, cảm ơn.


Đây sẽ là một yêu cầu tính năng tuyệt vời cho mô-đun Timeago nếu nó chưa được yêu cầu.
beth

@beth Tôi chỉ xem qua các vấn đề cho mô-đun và dường như nó không được yêu cầu. Tôi sẽ tạo ra một vấn đề vào ngày mai (không có thời gian cho ngày hôm nay) trừ khi bạn muốn làm điều đó :)
Alex

Những gì bạn đã cố gắng để làm cho mã? Ngày này xuất hiện trên trang web của bạn ở đâu?
beth

@beth Tôi đã cố gắng tạo mã trong tệp jquery.timeago.js chỉ chạy nếu biến giây nhỏ hơn 86400 (24h). Tuy nhiên, tôi phải làm cho toàn bộ mô-đun không chạy, nếu không nó sẽ không hiển thị các định dạng khác, vì nó vẫn ghi đè lên chúng.
Alex

Tôi đã tạo một vấn đề có thể tìm thấy ở đây
Alex

Câu trả lời:


1

Người dùng có thực sự ngồi trên một trang trong một thời gian đủ dài, rằng những ngày này cần được cập nhật qua javascript? Hầu hết trong số họ sẽ nhấp vào một cái gì đó và cuối cùng tải lại toàn bộ trang tại một số điểm. Vì vậy, có lẽ, một giải pháp php là một lựa chọn quá?

Bạn có thể đạt được giải pháp php bằng cách sử dụng mô đun Custom Formatters .

Nếu bạn tạo một trình định dạng tùy chỉnh kiểu php mới, với đoạn mã sau (đảm bảo đó là kiểu dấu dữ liệu):

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

Khi tạo trình định dạng, hãy đảm bảo bạn chọn loại trường 'dấu thời gian'. Khi trình định dạng được tạo, sau đó trong tab hiển thị quản lý loại nội dung của bạn, hãy đặt trường để sử dụng trình định dạng này.

Nếu bạn không lưu trữ ngày của mình dưới dạng một trường riêng biệt, bạn có thể áp dụng trình định dạng tùy chỉnh cho thời gian sửa đổi nút, bằng cách cài đặt mô-đun Display Suite .

Nếu bạn không muốn sử dụng bất kỳ mô-đun nào trong số này nhưng muốn hack một số php vào chủ đề của bạn hoặc một cái gì đó, bạn vẫn có thể sử dụng cùng một logic ở trên với các hàm format_interval và format_date.

Hy vọng rằng có thể giúp đỡ.


0

Bất cứ nơi nào bạn đang sử dụng timeago để hiển thị một ngày được định dạng, một đoạn mã như bên dưới sẽ thực hiện thủ thuật cho bạn?

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

Đây có phải là áp dụng cho một tập tin .module? Tôi thực sự không thể tìm ra nơi để đặt nó.
Alex

Bạn sẽ cần tìm vị trí trong tệp timeago .module, ngày mới được áp dụng và sau đó bạn có thể thử những gì @Amarnath đã đề xuất, hoặc một cái gì đó tương tự, như một câu lệnh if bao quanh ứng dụng thực tế của ngày mới và điều kiện là một số toán học nói nếu ngày lớn hơn 24 giờ trước, hãy làm điều này.
CR47

0

Tạo mô-đun MyCustom

myCustom.module chứa

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

Tạo myCustom.install & nó chứa

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

Sử dụng :

echo myCustom_format_date(1392532844);

2
Xin chào. Bạn có thể gửi một lời giải thích? Trang web này có nghĩa là cho câu trả lời , không phải cho .
Mołot

Phải, tất nhiên. Tôi sẽ quan tâm nó để trả lời thêm.
Rupesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.