एक संपूर्ण नोड ईमेल करें (टेम्पलेट सामग्री सहित)


9

मैंने अपना स्वयं का कस्टम नोड.tpl.php फ़ाइल बनाया है। मैं अब पूरे नोड को ईमेल करना चाहता हूं, हर बार जब उपयोगकर्ता उस सामग्री प्रकार का एक नया नोड बनाता है (मैंने सुनिश्चित किया है कि मेरे नोड में सभी HTML.pl.php फ़ाइल ईमेल के अनुकूल है)।

मैं यह कैसे कर सकता हूँ? आदर्श रूप से मैं चाहूंगा कि नोड सहेजे जाने पर ईमेल अपने आप एक विशिष्ट ईमेल पते पर जाए।

मैंने पाया है कि नियम और HTML मेल का एक संयोजन जो मैं चाहता हूं वह प्राप्त कर सकता है। को छोड़कर ... एक नियम कार्रवाई बनाते समय, पूरे नोड को ईमेल करने का विकल्प नहीं होता है (नोड.tpl.php थीम सहित)। नियम केवल विशिष्ट नोड क्षेत्रों को ईमेल करने का विकल्प देता है (बिना थीम के)।

किसी भी सुझाव की बहुत सराहना की जाएगी!

जवाबों:


20

यहाँ एक और दृष्टिकोण है। (कोड इस सैंडबॉक्स में उपलब्ध है ।)

nodemail.info

name = Nodemail
description = Sends node e-mails.
core = 7.x

nodemail.install '

<?php
function nodemail_enable() {
  $current = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  $addition = array('nodemail' => 'NodemailMailSystem');
  variable_set('mail_system', array_merge($current, $addition));
}

function nodemail_disable() {
  $mail_system = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  unset($mail_system['nodemail']);
  variable_set('mail_system', $mail_system);
}

nodemail.module

<?php
class NodemailMailSystem extends DefaultMailSystem {
  public function format(array $message) {
    $message['body'] = implode("\n\n", $message['body']);
    $message['body'] = drupal_wrap_mail($message['body']);
    return $message;
  }
}

function nodemail_mail($key, &$message, $params) {
  switch ($key) {
    case 'node_mail':
      $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;';
      $message['subject'] = $params['subject'];
      $message['body'][] = $params['body'];
      break;
  }
}

function nodemail_node_insert($node) {
  if ($node->type == 'mycontenttype') {
    $params['subject'] = 'Node "' . $node->title . '" was created';
    $params['body'] = render(node_view($node));
    $to = variable_get('site_mail', '');
    $from = 'noreply@example.com';
    $lang = language_default();
    drupal_mail('nodemail', 'node_mail', $to, $lang, $params, $from);
  }
}

इस मॉड्यूल को html ई-मेल भेजने की अनुमति देने के लिए इनस्टॉल फाइल कंटेंट और NodemailMailSystem क्लास का उपयोग किया जाता है। 2 अन्य कार्य हुक_मेल () और हुक_नोड_इन्टर () के कार्यान्वयन हैं जो नोड का mycontenttypeनिर्माण होने पर ई-मेल भेजने के साथ सौदा करते हैं । एक बात आपको ध्यान रखनी होगी कि Drupal उस नोड नोड फ़ाइल का उपयोग करेगा जिसका उपयोग नोड निर्माण पृष्ठों के लिए किया जा रहा है (या यदि विषय नोड के पास नहीं है। । आप यहां उपयोग किए जाने वाले नोड_व्यू () और ड्रुपल_मेल () फ़ंक्शन की जांच करना चाहते हैं। यह पूरी बात Drupal 7 कोर कार्यक्षमता (कोई योगदान मॉड्यूल की आवश्यकता है) के साथ काम करना चाहिए।


धन्यवाद! इसके अलावा यह काम करता है ... मेरी साइट पर, एक नोड के लिए टेक्नोनॉमी शब्द के अनुसार टेम्पलेट बदलता है। इसलिए यदि उपयोगकर्ता नोड 1 के साथ टैग करता है, तो नोड को रेंडर करने के लिए टेम्पलेट 1 का उपयोग किया जाता है। (देखें drupal.stackexchange.com/questions/23688/… )। जब मैं आपके कोड का उपयोग करता हूं, तो केवल डिफ़ॉल्ट node.tpl.php फ़ाइल का उपयोग किया जाता है (और नोड रेंडर करने के लिए उपयोग किया जाने वाला टेम्पलेट नहीं)। क्या इसको ठीक करने का कोई तरीका है? (क्षमा करें, यदि मैं पहले उल्लेख नहीं करने के लिए एक उपद्रव की तरह लगता हूं - मुझे लगा कि यह एक मुद्दा नहीं होगा क्योंकि प्रदान किए गए नोड में टेम्पलेट शामिल है)।
बड़ा_स्मिल

@big_smile समस्या शायद वही है जिसका मैंने अपने उत्तर में उल्लेख किया था: नोड निर्माण के लिए उपयोग किया जा रहा व्यवस्थापक विषय। संभावित फ़िक्सेस जो मैं वर्तमान में सोच सकता हूं: 1) सामग्री संपादन / निर्माण के लिए अपने डिफ़ॉल्ट थीम का उपयोग करें ('व्यवस्थापक / उपस्थिति' में चेकबॉक्स अनचेक करें) 2 टेम्पलेट टेम्पलेट से आवश्यक कोड कॉपी करें और नोड थीम व्यवस्थापक फ़ोल्डर में और स्पष्ट कैश 3) ई-मेल के लिए अपने मॉड्यूल में कस्टम टेम्पलेट बनाएं।
मेडिस

6

आप एक टोकन बना सकते हैं जो प्रदान किया गया नोड था, या एक कस्टम नियम कार्रवाई बनाएँ जो प्रदान किए गए नोड को भेजेगा।

आप देखना चाहते हैं

$build = node_view($node);
$html = render($build);

कोड के साथ अपडेट किया गया

यह कोड दिखाता है कि सभी नोड्स में एक संपत्ति कैसे जोड़ें, जिसे नियमों में सुलभ बनाया जा सकता है। मैंने इसे एक मॉड्यूल कहा हैgoogletorp

/**
 * Implements hook_entity_property_info_alter().
 */
function googletorp_entity_property_info_alter(&$info) {
  // Add the current user's shopping cart to the site information.
  $info['node']['properties']['rendered_node'] = array(
    'label' => t("Rendered_node"),
    'description' => t('The full rendered node.'),
    'getter callback' => 'googletorp_render_node',
  );
}

/**
 * Return a rendered node as HTML.
 */
function googletorp_render_node($node) {
  return render(node_view($node));
}

पहला फ़ंक्शन एक हुक है जो संपत्ति को नोड में जोड़ता है, जहां कॉलबैक में डेटा प्रदान करने के लिए परिभाषित किया गया है। दूसरा फ़ंक्शन वास्तविक कॉलबैक है जो प्रदान किए गए नोड को लौटाता है।

इसे काम करने के लिए, आपको इकाई टोकन मॉड्यूल को स्थापित करने की आवश्यकता है जो कि इकाई एपीआई मॉड्यूल का एक हिस्सा है , लेकिन इसके लिए किसी भी तरह से नियमों की आवश्यकता होती है।


धन्यवाद - ठीक वैसा ही जैसा मुझे चाहिए। परन्तु तुमसे यह कैसे होता है? मैंने नियम और टोकन डाउनलोड किए हैं, लेकिन प्रदान किए गए नोड को भेजने के लिए कोई विकल्प नहीं हैं।
big_smile

@big_smile आपको यह कार्यक्षमता स्वयं बनानी होगी - ऐसा करने के कई तरीके हैं।
googletorp

जवाब देने का समय निकालने के लिए धन्यवाद। ईमानदार होने के लिए, आपके उत्तर बहुत मददगार नहीं हैं। अगर मुझे पता है कि मैं स्वयं कार्यक्षमता कैसे बनाऊं, तो मैं एक प्रश्न नहीं पूछूंगा। जाहिर है, मैं आपसे पूर्ण उत्तर की उम्मीद नहीं करता। हालाँकि, यह उपयोगी होगा यदि आप संसाधनों के लिंक प्रदान कर सकते हैं जो आपके सुझावों को पूरा करने के बारे में विस्तृत जानकारी देता है,
big_smile

2
@big_smile इसलिए आपने मुझे नीचा दिखाया क्योंकि मैंने आपको खाना नहीं दिया? क्या आपने Google की कोशिश की है, क्या आपने प्रोजेक्ट होमपेज की कोशिश की है? मुझे 30 सेकंड में व्यापक नियम डॉक्स मिले, मुझे यकीन है कि आप भी ऐसा कर सकते हैं। आलसी मत बनो।
googletorp

1
मैं आलसी नहीं हूं और न ही खिलाए जाने की उम्मीद है। आपका उत्तर बहुत अस्पष्ट था और इसका मतलब यह बिल्कुल भी नहीं है कि उत्तर नियमों में पाया जा सकता है। वास्तव में, "आपने इस कार्यक्षमता को स्वयं बनाया होगा" का अर्थ है कि मुझे कुछ ऐसा बनाना होगा जो नियमों के बाहर हो। यही कारण है कि मैंने आपके उत्तर को अस्वीकार कर दिया - यह सहायक होने के लिए बहुत अस्पष्ट था। हालाँकि, आपकी प्रोफ़ाइल को देखते हुए, मैं देख सकता हूँ कि आप बहुत सहायक हैं और इसके आधार पर मुझे नहीं लगता कि यह अस्पष्ट होने का आपका इरादा था। मुझे नहीं लगता था कि नीचे का वोट बहुत परेशान करेगा। अगर मैं कर सकता तो मैं इसे उलट दूंगा। मुझे उम्मीद है कि कोई कठिन भावनाएं नहीं हैं।
big_smile

1

एक अन्य विकल्प मेरे मॉड्यूल Entity2Text (DRupal 7) का उपयोग किया जाएगा ।

अभी यह एक इकाई के प्रत्येक दृश्य मोड के लिए "टेक्सटेक्सपोर्ट" टोकन देता है। यह बहुत सारे फ़ील्ड प्रकारों के लिए अच्छी तरह से काम करता है, लेकिन कुछ समस्याएँ अधिक जटिल हैं जैसे एड्रेस फ़ील्ड।

मैं "htmlexport" भी जोड़ने जा रहा हूं। यदि आप कोशिश करना चाहते हैं कि इस शाखा को चेकआउट करें: http://drupalcode.org/project/entity2text.git/shortlog/refs/heads/7.x-1-htmlexport

आपको अभी भी नियम और माइममेल (या शायद ऊपर वर्णित htmlmail) का उपयोग करना होगा ।

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