Email Seluruh Node (Termasuk konten template)


9

Saya telah membuat file node.tpl.php kustom saya sendiri. Saya sekarang ingin mengirim email ke seluruh simpul, setiap kali pengguna membuat simpul baru dari jenis konten itu (saya telah memastikan bahwa semua HTML di file node.tpl.php saya ramah email).

Bagaimana saya bisa melakukan ini? Idealnya saya ingin email masuk ke alamat email tertentu secara otomatis ketika node disimpan.

Saya telah menemukan bahwa kombinasi antara Aturan dan Surat HTML dapat mencapai apa yang saya inginkan. Kecuali ... Saat membuat tindakan aturan, tidak ada opsi untuk mengirim email seluruh node (termasuk theming node.tpl.php). Aturan hanya memberikan opsi untuk mengirim email bidang simpul tertentu (tanpa tema).

Setiap saran akan sangat dihargai!

Jawaban:


20

Ini pendekatan lain. (Kode tersedia di kotak pasir ini .)

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

Isi file instal dan kelas NodemailMailSystem digunakan untuk memungkinkan modul ini mengirim email html. 2 fungsi lainnya adalah implementasi dari hook_mail () dan hook_node_insert () yang berhubungan dengan pengiriman email ketika sebuah node mycontenttypedibuat. Satu hal yang harus Anda perhatikan adalah bahwa Drupal akan menggunakan file template simpul dari tema yang sedang digunakan untuk halaman pembuatan simpul (atau inti node.tpl.php jika tema tidak memilikinya) untuk tampilan simpul . Anda mungkin juga ingin memeriksa fungsi node_view () dan drupal_mail () yang digunakan di sini. Semua ini harus bekerja dengan fungsionalitas inti Drupal 7 (tidak ada modul kontribusi yang diperlukan).


Terima kasih! Itu berfungsi kecuali ... Di situs saya, templat untuk sebuah simpul berubah sesuai dengan istilah taksonomi. Jadi jika pengguna menandai simpul dengan istilah 1, templat 1 digunakan untuk membuat simpul. (lihat drupal.stackexchange.com/questions/23688/… ). Ketika saya menggunakan kode Anda, hanya file node.tpl.php default yang digunakan (dan bukan template yang digunakan untuk membuat node). Apakah ada cara untuk memperbaikinya? (Maaf jika saya tampak seperti gangguan karena tidak menyebutkan ini sebelumnya - saya pikir itu tidak akan menjadi masalah karena node yang diberikan memang mengandung template).
big_smile

@ big_smile Masalahnya mungkin apa yang saya sebutkan dalam jawaban saya: tema admin yang sedang digunakan untuk pembuatan simpul. Kemungkinan perbaikan yang dapat saya pikirkan saat ini: 1) menggunakan tema default Anda untuk mengedit / membuat konten (hapus centang pada 'admin / penampilan') 2) salin kode yang diperlukan dari template.php dan templat node ke folder tema admin dan hapus cache 3) buat templat khusus di modul Anda untuk surel.
Madis

6

Anda bisa membuat token yang merupakan simpul yang diberikan, atau membuat tindakan Aturan khusus yang akan mengirim simpul yang diberikan.

Anda ingin melihatnya

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

Diperbarui dengan kode

Kode ini menunjukkan cara menambahkan properti ke semua node yang dapat dibuat dapat diakses dalam aturan. Saya telah membuat modul ini disebutgoogletorp

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

Fungsi pertama adalah pengait yang menambahkan properti ke node, di mana dalam panggilan balik didefinisikan untuk menyediakan data. Fungsi kedua adalah panggilan balik aktual yang mengembalikan node yang diberikan.

Agar ini berfungsi, Anda perlu menginstal modul token entitas yang merupakan bagian dari modul API entitas , tetapi ini diperlukan oleh aturan apa pun.


Terima kasih - itulah yang saya butuhkan. Tetapi bagaimana Anda melakukannya? Saya telah mengunduh Aturan dan Token, tetapi tidak ada opsi untuk mengirim node yang diberikan.
big_smile

@ big_smile Anda harus membuat fungsionalitas ini sendiri - ada beberapa cara untuk melakukan ini.
googletorp

Terima kasih telah meluangkan waktu untuk membalas. Sejujurnya, jawaban Anda tidak terlalu membantu. Jika saya tahu cara membuat fungsionalitas sendiri, saya tidak akan mengajukan pertanyaan. Jelas, saya tidak berharap Anda memposting jawaban lengkap. Namun, akan sangat membantu jika Anda dapat memberikan tautan ke sumber daya yang menguraikan cara melakukan saran Anda,
big_smile

2
@big_smile Jadi Anda menurunkan saya karena saya tidak memberi makan Anda dengan tangan? Sudahkah Anda mencoba google, sudahkah Anda mencoba beranda proyek? Saya menemukan dokumen Aturan yang luas dalam 30 detik, saya yakin Anda dapat melakukan hal yang sama. Jangan malas.
googletorp

1
Saya tidak malas dan tidak berharap diberi makan. Jawaban Anda sangat kabur dan sama sekali tidak menyiratkan bahwa jawabannya dapat ditemukan di Doc aturan. Bahkan, "Anda harus membuat fungsi ini sendiri" menyiratkan bahwa saya harus menghasilkan sesuatu yang berada di luar Aturan. Inilah mengapa saya menurunkan jawaban Anda - terlalu samar untuk membantu. Namun, melihat profil Anda, saya dapat melihat Anda sangat membantu dan berdasarkan ini saya tidak berpikir itu niat Anda untuk menjadi kabur. Saya tidak berpikir suara turun akan sangat mengecewakan. Saya akan membalikkannya jika saya bisa. Saya harap tidak ada perasaan sulit.
big_smile

1

Opsi lain akan menggunakan modul Entity2Text saya (DRupal 7).

Saat ini ia memberikan token "textexport" untuk setiap Mode Tampilan suatu entitas. Ini bekerja dengan baik untuk banyak jenis bidang tetapi memiliki beberapa masalah yang lebih kompleks seperti Bidang Alamat.

Saya juga akan menambahkan "htmlexport". Jika Anda ingin mencoba keluar dari cabang ini: http://drupalcode.org/project/entity2text.git/shortlog/refs/heads/7.x-1-htmlexport

Anda masih harus menggunakan Aturan dan MimeMail (atau mungkin htmlmail yang disebutkan di atas).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.