केवल 24 घंटों से कम समय के लिए टिम्गो तिथि प्रारूप का उपयोग करें


8

मैं एक तिथि प्रारूप के रूप में टिमियागो मॉड्यूल का उपयोग करना चाहूंगा । हालाँकि, जब समय पहले 24h से अधिक हो गया है, तो मैं चाहूंगा कि यह एक और प्रारूप (जैसे 4 फरवरी, 2013) को ट्विटर या ड्रिबल के उपयोग की तरह दिखाए।

मैंने कोड को मोड़ने की कोशिश की, लेकिन मेरे कौशल ने मुझे निराश कर दिया: /

क्या संभवतः इस कारण के लिए एक बेहतर मॉड्यूल है? या मुझे अपना बनाना है?

मुझे यह कोड मिला जो दिखाता है कि मैं इसे कैसे काम करना चाहता हूं, हालांकि मुझे नहीं पता कि इसे ड्रुपल पर कैसे लागू किया जाए।

हर प्रकार की सहायता का स्वागत है, धन्यवाद।


यदि यह पहले से ही अनुरोध नहीं किया गया है, तो यह टिम्गो मॉड्यूल के लिए एक महान सुविधा अनुरोध होगा।
बेट

@ बीथ मैंने सिर्फ मॉड्यूल के लिए मुद्दों के माध्यम से देखा और यह अनुरोध किया गया नहीं लगता है। जब तक आप इसे करना चाहते हैं मैं कल (इसके लिए कोई समय नहीं) आज एक मुद्दा बनाऊंगा :)
एलेक्स

कोड को करने के लिए आपने किन ट्विक्स का प्रयास किया? आपकी साइट पर यह तिथि कहां दिखाई दे रही है?
beth

@beth ने jquery.timeago.js फ़ाइल में कोड बनाने की कोशिश की, अगर सेकंड्स वैरिएबल 86400 (24h) से कम था तो चलाएं। हालाँकि, मुझे पूरे मॉड्यूल को नहीं चलाना है, अन्यथा यह अन्य प्रारूपों को नहीं दिखाएगा, क्योंकि यह अभी भी उन्हें ओवरराइड कर रहा है।
एलेक्स

मैंने एक मुद्दा बनाया जो यहां
एलेक्स

जवाबों:


1

क्या उपयोगकर्ता वास्तव में एक पृष्ठ पर लंबे समय तक बैठे रहते हैं, कि इन तिथियों को जावास्क्रिप्ट के माध्यम से अद्यतन करने की आवश्यकता है? उनमें से अधिकांश कुछ पर क्लिक करेंगे और कुछ बिंदु पर पूरे पृष्ठ को फिर से लोड करेंगे। तो शायद, एक php समाधान भी एक विकल्प है?

आप कस्टम स्वरूपण मॉड्यूल का उपयोग करके php समाधान प्राप्त कर सकते हैं ।

यदि आप एक नया php टाइप कस्टम फॉर्मेट बनाते हैं, तो निम्न कोड के साथ (सुनिश्चित करें कि यह एक डेटास्टैंप प्रकार है)

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

फ़ॉर्मैटर बनाते समय, सुनिश्चित करें कि आप फ़ील्ड प्रकार 'डेटास्टैम्प' का चयन करें। एक बार जब फ़ॉर्मेटर बन जाता है, तो अपनी सामग्री प्रकार के प्रबंधन टैब में, इस फ़ॉर्मेटर का उपयोग करने के लिए फ़ील्ड सेट करें।

यदि आपके पास अपनी दिनांक एक अलग फ़ील्ड के रूप में संग्रहीत नहीं है, तो आप प्रदर्शन सूट मॉड्यूल को स्थापित करके कस्टम फ़ॉर्मेटर को नोड संशोधित समय पर लागू करने में सक्षम हो सकते हैं ।

यदि आप इनमें से किसी भी मॉड्यूल का उपयोग नहीं करना चाहते हैं, लेकिन अपने विषय या कुछ में कुछ php हैक करना चाहते हैं, तो आप अभी भी format_interval और format_date फ़ंक्शन के साथ ऊपर दिए गए तर्क का उपयोग कर सकते हैं।

उम्मीद है कि मदद कर सकता है।


0

जहाँ कहीं यह है कि आप फॉर्मेट की गई तारीख दिखाने के लिए टैमीगो का उपयोग कर रहे हैं, तो क्या नीचे वाला स्निपेट आपके जैसा चाल चलेगा?

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

क्या इसे .module फ़ाइल में लागू किया जाना है? मैं वास्तव में यह पता नहीं लगा सकता कि इसे कहां रखा जाए।
एलेक्स

आपको यह खोजने की आवश्यकता होगी कि टैमियागो में कहां है। नई तारीखों को लागू करने के लिए .module फाइल की जाती है और फिर आप यह प्रयास कर सकते हैं कि @Amarnath क्या सुझाव दे रहा था, या कुछ इसी तरह का, जैसे कि अगर कोई बयान नई तारीखों के वास्तविक आवेदन के आसपास लपेटता है और कुछ की स्थिति गणित यह कहता है कि यदि तारीख 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
हैलो। क्या आप एक स्पष्टीकरण पोस्ट कर सकते हैं? यह साइट उत्तर के लिए है , कोड के लिए नहीं ।
मोलॉट

हां बिल्कुल। मैं आगे के जवाब के लिए इसकी देखभाल करूंगा।
रूपेश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.