ส่งอีเมล์โหนดทั้งหมด (รวมถึงเนื้อหาเทมเพลต)


9

ฉันสร้างไฟล์ node.tpl.php ที่กำหนดเองของฉันเอง ตอนนี้ฉันต้องการส่งอีเมลถึงโหนดทั้งหมดทุกครั้งที่ผู้ใช้สร้างโหนดใหม่ของประเภทเนื้อหานั้น (ฉันแน่ใจว่า HTML ทั้งหมดในไฟล์ node.tpl.php ของฉันนั้นเป็นมิตรกับอีเมล)

ฉันจะทำสิ่งนี้ได้อย่างไร เป็นการดีที่ฉันต้องการให้อีเมลไปยังที่อยู่อีเมลที่ระบุโดยอัตโนมัติเมื่อบันทึกโหนด

ฉันพบว่าการรวมกันของกฎและจดหมาย HTMLสามารถบรรลุสิ่งที่ฉันต้องการ ยกเว้น ... เมื่อสร้างกฎการดำเนินการจะไม่มีตัวเลือกในการส่งอีเมลถึงโหนดทั้งหมด (รวมถึงการกำหนดให้ node.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);
  }
}

เนื้อหาไฟล์ติดตั้งและคลาส NodemailMailSystem ใช้เพื่ออนุญาตให้โมดูลนี้ส่งอีเมล html อีก 2 ฟังก์ชั่นการใช้งานของhook_mail ()และhook_node_insert ()ที่จัดการกับการส่งอีเมลเมื่อโหนดของmycontenttypeถูกสร้างขึ้น สิ่งหนึ่งที่คุณต้องทราบก็คือ Drupal จะใช้ไฟล์เท็มเพลตโหนดของธีมที่ใช้สำหรับหน้าการสร้างโหนด (หรือ core node.tpl.php หากธีมไม่มีมัน) สำหรับมุมมองโหนด . คุณอาจต้องการตรวจสอบฟังก์ชั่นnode_view ()และdrupal_mail ()ที่ใช้ที่นี่ สิ่งทั้งหมดนี้ควรทำงานกับฟังก์ชันการทำงานหลักของ Drupal 7 (ไม่จำเป็นต้องมีโมดูลที่สนับสนุน)


ขอบคุณ! ใช้งานได้ยกเว้น ... ในเว็บไซต์ของฉันเทมเพลตสำหรับโหนดจะเปลี่ยนไปตามคำศัพท์ทางภาษี ดังนั้นหากผู้ใช้แท็กโหนดด้วยเทอม 1 เทมเพลต 1 จะถูกใช้เพื่อแสดงผลโหนด (ดูdrupal.stackexchange.com/questions/23688/ … ) เมื่อฉันใช้รหัสของคุณจะใช้เฉพาะไฟล์ node.tpl.php ที่เป็นค่าเริ่มต้นเท่านั้น (ไม่ใช่เท็มเพลตที่ใช้สร้างการแสดงผลโหนด) มีวิธีแก้ไขปัญหานี้หรือไม่? (ขออภัยถ้าฉันดูเหมือนรำคาญที่ไม่ได้กล่าวถึงก่อนหน้านี้ - ฉันคิดว่ามันจะไม่เป็นปัญหาเพราะโหนดที่แสดงผลมีแม่แบบ)
big_smile

@big_smile ปัญหาน่าจะเป็นสิ่งที่ฉันพูดถึงในคำตอบของฉัน: ธีมผู้ดูแลระบบที่ถูกใช้สำหรับการสร้างโหนด การแก้ไขที่เป็นไปได้ที่ฉันคิดว่าในปัจจุบัน: 1) ใช้ชุดรูปแบบเริ่มต้นของคุณสำหรับการแก้ไข / สร้างเนื้อหา (ยกเลิกการทำเครื่องหมายใน 'admin / ลักษณะ') 2) คัดลอกรหัสที่จำเป็นจาก template.php และแม่แบบโหนดไปยังโฟลเดอร์ ล้างแคช 3) สร้างเทมเพลตที่กำหนดเองในโมดูลของคุณสำหรับอีเมล
Madis

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

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

เพื่อให้สิ่งนี้ใช้งานได้คุณจะต้องติดตั้งโมดูลโทเค็นเอนทิตีซึ่งเป็นส่วนหนึ่งของโมดูลเอนทิตี APIแต่สิ่งนี้เป็นสิ่งจำเป็นโดยกฎใด ๆ


ขอบคุณ - นั่นคือสิ่งที่ฉันต้องการ แต่คุณจะทำอย่างไร ฉันดาวน์โหลดกฎและโทเค็นแล้ว แต่ไม่มีตัวเลือกในการส่งโหนดที่แสดงผล
big_smile

@big_smile คุณจะต้องสร้างฟังก์ชั่นนี้ด้วยตัวเอง - มีหลายวิธีในการทำเช่นนี้
googletorp

ขอบคุณที่สละเวลาตอบ ความซื่อสัตย์คำตอบของคุณไม่ค่อยมีประโยชน์ ถ้าฉันรู้วิธีสร้างฟังก์ชันการทำงานด้วยตัวเองฉันจะไม่ถามคำถาม เห็นได้ชัดว่าฉันไม่ได้คาดหวังให้คุณโพสต์คำตอบแบบเต็ม อย่างไรก็ตามจะเป็นประโยชน์หากคุณสามารถให้ลิงก์ไปยังแหล่งข้อมูลที่มีรายละเอียดเกี่ยวกับวิธีการปฏิบัติตามคำแนะนำของคุณ
big_smile

2
@big_smile คุณจึงลงคะแนนฉันเพราะฉันไม่ได้ให้อาหารคุณ คุณลอง google แล้วหรือยังลองใช้หน้าแรกของโครงการหรือไม่ ฉันพบเอกสารกฎที่ครอบคลุมใน 30 วินาทีฉันแน่ใจว่าคุณสามารถทำเช่นเดียวกัน อย่าขี้เกียจ
googletorp

1
ฉันไม่ขี้เกียจและไม่คาดหวังว่าจะได้รับอาหาร คำตอบของคุณนั้นคลุมเครือมากและไม่ได้แปลว่าสามารถพบคำตอบได้ในเอกสารกฎ ในความเป็นจริง "คุณจะต้องสร้างฟังก์ชั่นนี้ด้วยตัวเอง" หมายความว่าฉันจะต้องสร้างบางสิ่งที่อยู่นอกกฎ นี่คือเหตุผลที่ฉัน downvote คำตอบของคุณ - มันคลุมเครือเกินไปที่จะเป็นประโยชน์ อย่างไรก็ตามเมื่อดูที่โปรไฟล์ของคุณฉันสามารถเห็นว่าคุณมีประโยชน์และอยู่บนพื้นฐานนี้ฉันไม่คิดว่ามันเป็นความตั้งใจของคุณที่จะคลุมเครือ ฉันไม่คิดว่าการลงคะแนนเสียงจะทำให้เสียเวลามาก ฉันจะย้อนกลับถ้าทำได้ ฉันหวังว่าจะไม่มีความรู้สึกที่ยากลำบาก
big_smile

1

ตัวเลือกอื่นจะใช้โมดูลEntity2Textของฉัน(DRupal 7)

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

ฉันจะเพิ่ม "htmlexport" ด้วย หากคุณต้องการลองชำระเงินที่สาขานี้: http://drupalcode.org/project/entity2text.git/shortlog/refs/heads/7.x-1-htmlexport

คุณยังคงต้องใช้กฎและMimeMail (หรืออาจเป็น htmlmail ที่กล่าวถึงข้างต้น)

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