ใช้รูปแบบวันที่ของ Timeago ในเวลาน้อยกว่า 24 ชั่วโมงก่อนเท่านั้น


8

ฉันต้องการใช้โมดูลTimeagoเป็นรูปแบบวันที่ อย่างไรก็ตามเมื่อเวลาผ่านไปเกิน 24 ชั่วโมงฉันต้องการให้แสดงรูปแบบอื่น (เช่น 4 ก.พ. 2013) คล้ายกับการใช้ Twitter หรือ Dribbble

ฉันพยายามที่จะปรับแต่งรหัส แต่ทักษะของฉันทำให้ฉันผิดหวัง: /

อาจมีโมดูลที่ดีกว่าสำหรับสาเหตุนี้หรือไม่? หรือฉันต้องทำเอง

ฉันพบรหัสนี้ที่แสดงให้เห็นว่าฉันต้องการให้มันทำงานอย่างไร แต่ฉันไม่รู้ว่าจะนำมันไปใช้กับ drupal ได้อย่างไร

ความช่วยเหลือใด ๆ ที่ชื่นชมขอบคุณ


นี่จะเป็นการร้องขอคุณสมบัติที่ยอดเยี่ยมสำหรับโมดูล Timeago หากยังไม่ได้รับการร้องขอ
beth

@beth ฉันเพิ่งตรวจสอบปัญหาสำหรับโมดูลและดูเหมือนจะไม่ได้รับการร้องขอ ฉันจะสร้างปัญหาในวันพรุ่งนี้ (ไม่มีเวลาสำหรับวันนี้) เว้นแต่คุณต้องการที่จะทำมัน :)
อเล็กซ์

คุณพยายามปรับแต่งโค้ดอะไร? วันนี้ปรากฏที่ใดบนเว็บไซต์ของคุณ

@beth ฉันพยายามสร้างรหัสในไฟล์ jquery.timeago.js เฉพาะเมื่อตัวแปรวินาทีนั้นน้อยกว่า 86400 (24 ชั่วโมง) อย่างไรก็ตามฉันต้องทำให้โมดูลทั้งหมดไม่ทำงานไม่เช่นนั้นจะไม่แสดงรูปแบบอื่น ๆ
อเล็กซ์

ฉันสร้างปัญหาที่สามารถพบได้ที่นี่
Alex

คำตอบ:


1

ผู้ใช้นั่งอยู่บนหน้าเว็บนานพอจริงหรือไม่ว่าวันที่เหล่านี้ต้องได้รับการอัพเดทผ่านทางจาวาสคริปต์หรือไม่? ส่วนใหญ่จะคลิกที่บางสิ่งและจบการโหลดหน้าใหม่ในบางจุด ดังนั้นบางทีการแก้ปัญหา php เป็นตัวเลือกด้วยหรือไม่

คุณสามารถใช้ php solution ได้โดยใช้โมดูลCustom Formatters

หากคุณสร้างฟอร์แมตเตอร์แบบกำหนดเองชนิด php ใหม่โดยใช้รหัสต่อไปนี้ (ตรวจสอบให้แน่ใจว่าเป็นประเภท 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;

เมื่อสร้างตัวจัดรูปแบบตรวจสอบให้แน่ใจว่าคุณเลือกประเภทฟิลด์ 'datestamp' เมื่อฟอร์แมตเตอร์ถูกสร้างขึ้นจากนั้นในแท็บจัดการการแสดงผลของประเภทเนื้อหาของคุณให้ตั้งค่าฟิลด์เพื่อใช้ฟอร์แมตเตอร์นี้

หากคุณไม่ได้จัดเก็บวันที่ของคุณเป็นฟิลด์แยกคุณอาจใช้ตัวจัดรูปแบบที่กำหนดเองกับเวลาที่แก้ไขโหนดโดยติดตั้งโมดูลชุดการแสดงผล

หากคุณไม่ต้องการใช้โมดูลเหล่านี้ แต่ต้องการแฮ็ค 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);

นี่ควรจะใช้กับไฟล์. โมดูลหรือไม่ ฉันคิดไม่ออกว่าจะวางยังไง
อเล็กซ์

คุณจะต้องค้นหาว่ามีการใช้วันที่ใหม่ที่ไหนในไฟล์ timeago .module จากนั้นคุณสามารถลองใช้สิ่งที่ @Amarnath เป็นคำแนะนำหรือสิ่งที่คล้ายกันเช่นคำสั่ง if ล้อมรอบแอปพลิเคชันจริงของวันที่ใหม่และเงื่อนไขบางอย่าง คณิตศาสตร์บอกว่าถ้าวันที่มากกว่า 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
สวัสดี. คุณช่วยโพสต์คำอธิบายได้ไหม? เว็บไซต์นี้มีความหมายสำหรับคำตอบไม่ได้สำหรับรหัส
Mołot

ใช่แน่นอน ฉันจะดูแลมันสำหรับคำตอบเพิ่มเติม
Rupesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.