it-swarm.com.de

E-Mail an ein ganzes senden Node (einschließlich Vorlageninhalt)

Ich habe meine eigene benutzerdefinierte Datei node.tpl.php erstellt. Ich möchte jetzt den gesamten Knoten per E-Mail versenden, jedes Mal, wenn der Benutzer einen neuen Knoten dieses Inhaltstyps erstellt (ich habe sichergestellt, dass der gesamte HTML-Code in meiner Datei node.tpl.php E-Mail-freundlich ist).

Wie kann ich das machen? Idealerweise möchte ich, dass die E-Mail automatisch an eine bestimmte E-Mail-Adresse gesendet wird, wenn der Knoten gespeichert wird.

Ich habe festgestellt, dass eine Kombination aus Regeln und HTML Mail erreichen kann, was ich will. Außer ... Beim Erstellen einer Regelaktion besteht nicht die Möglichkeit, den gesamten Knoten per E-Mail zu versenden (einschließlich des Themas node.tpl.php). Regeln bieten nur die Möglichkeit, bestimmte Knotenfelder per E-Mail zu versenden (ohne Themen).

Anregungen wäre sehr dankbar!

9
big_smile

Hier ist ein anderer Ansatz. (Der Code ist verfügbar in diese Sandbox .)

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 = '[email protected]';
    $lang = language_default();
    drupal_mail('nodemail', 'node_mail', $to, $lang, $params, $from);
  }
}

Der Inhalt der Installationsdatei und die NodemailMailSystem-Klasse werden verwendet, damit dieses Modul HTML-E-Mails senden kann. Die beiden anderen Funktionen sind Implementierungen von hook_mail () und hook_node_insert () , die sich mit dem Senden der E-Mails befassen, wenn ein Knoten von mycontenttype erstellt wird. Eine Sache, die Sie beachten müssen, ist, dass Drupal verwendet die Knotenvorlagendatei des Themas, das für die Knotenerstellungsseiten verwendet wird (oder die Kernknoten.tpl.php, wenn das Thema dies nicht tut) Sie haben es auch für die Knotenansicht. Vielleicht möchten Sie auch die Funktionen node_view () und drupal_mail () überprüfen, die hier verwendet werden. Das Ganze sollte funktionieren mit Drupal 7 Kernfunktionalität (es werden keine beitragenden Module benötigt).

20
Madis

Sie können ein Token erstellen, das der gerenderte Knoten war, oder eine benutzerdefinierte Regelaktion erstellen, die den gerenderten Knoten sendet.

Du willst schauen

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

Aktualisiert mit Code

Dieser Code zeigt, wie Sie allen Knoten eine Eigenschaft hinzufügen, auf die in Regeln zugegriffen werden kann. Ich habe ein Modul namens googletorp erstellt

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

Die erste Funktion ist ein Hook, der die Eigenschaft dem Knoten hinzufügt, in dem in einem Rückruf die Bereitstellung der Daten definiert ist. Die zweite Funktion ist der eigentliche Rückruf, der den gerenderten Knoten zurückgibt.

Damit dies funktioniert, müssen Sie das Entity-Token-Modul installieren, das Teil des Entity-API-Moduls ist. Dies ist jedoch nach den Regeln erforderlich.

6
googletorp

Eine andere Option wäre die Verwendung meines Moduls Entity2Text (DRupal 7).

Im Moment gibt es ein "textexport" -Token für jeden Ansichtsmodus einer Entität. Dies funktioniert gut für viele Feldtypen, hat jedoch einige komplexere Probleme wie das Adressfeld.

Ich werde auch "htmlexport" hinzufügen. Wenn Sie das ausprobieren möchten, sehen Sie sich diesen Zweig an: http://drupalcode.org/project/entity2text.git/shortlog/refs/heads/7.x-1-htmlexport

Sie müssten weiterhin Rules und MimeMail (oder wahrscheinlich die oben erwähnte HTML-Mail) verwenden.

1
tedbow