Bir Düğüme E-posta Gönder (Şablon içerikleri dahil)


9

Kendi özel node.tpl.php dosyamı oluşturdum. Şimdi kullanıcı bu içerik türünde yeni bir düğüm oluşturduğunda tüm düğümü e-posta ile göndermek istiyorum (benim node.tpl.php dosyasındaki tüm HTML'nin e-posta dostu olduğundan emin oldum).

Bunu nasıl yapabilirim? İdeal olarak, düğüm kaydedildiğinde e-postanın otomatik olarak belirli bir e-posta adresine gitmesini istiyorum.

Kurallar ve HTML Mail kombinasyonunun istediğimi elde edebildiğini gördüm. Dışında ... Kural eylemi oluştururken, tüm düğümü e-postayla gönderme seçeneği yoktur (node.tpl.php teması dahil). Kurallar yalnızca belirli düğüm alanlarını e-postayla gönderme seçeneği sunar (temalar olmadan).

Tavsiyeler çok makbule geçer!

Yanıtlar:


20

İşte başka bir yaklaşım. (Kod bu sanal alanda kullanılabilir .)

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

Kurulum dosyasının içeriği ve NodemailMailSystem sınıfı, bu modülün html e-postaları göndermesine izin vermek için kullanılır. Diğer 2 işlev, bir düğüm oluşturulduğunda e-postaları göndermekle ilgilenen hook_mail () ve hook_node_insert () uygulamalarıdır mycontenttype. Dikkat etmeniz gereken bir şey, Drupal'ın düğüm görünümü sayfaları için kullanılan temanın düğüm şablonu dosyasını (veya tema yoksa çekirdek node.tpl.php) kullanmasıdır. . Burada kullanılan node_view () ve drupal_mail () işlevlerine de göz atmak isteyebilirsiniz . Tüm bunlar Drupal 7 çekirdek işlevselliğiyle çalışmalıdır (katkıda bulunan modüle gerek yoktur).


Teşekkürler! Şunlar dışında çalışır… Sitemde, bir düğümün şablonu sınıflandırma terimine göre değişir. Kullanıcı düğümü 1 terimiyle etiketlerse, düğümü oluşturmak için şablon 1 kullanılır. (bkz. drupal.stackexchange.com/questions/23688/… ). Kodunuzu kullandığımda, yalnızca varsayılan node.tpl.php dosyası kullanılır (düğümü oluşturmak için kullanılan şablon değil). Bunu düzeltmenin bir yolu var mı? (Daha önce bahsetmediğim için bir sıkıntı gibi görünüyorsa üzgünüm - işlenen düğüm şablonu içerdiğinden bunun bir sorun olmayacağını düşündüm).
big_smile

@big_smile Sorun muhtemelen cevabımda bahsettiğim şey: düğüm oluşturmak için kullanılan yönetici teması. Şu anda düşünebileceğim olası düzeltmeler: 1) içerik düzenleme / oluşturma için varsayılan temanızı kullanın ('admin / görünüm' deki onay kutusunun işaretini kaldırın) 2) template.php ve düğüm şablonlarından admin tema klasörüne gerekli kodu kopyalayın ve önbellekleri temizle 3) e-postalar için modülünüzde özel şablonlar oluşturun.
Madis

6

Oluşturulan düğüm olan bir belirteç oluşturabilir veya işlenen düğümü gönderecek özel bir Kural eylemi oluşturabilirsiniz.

Bakmak istiyorsun

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

Kodla güncellendi

Bu kod, kurallarda erişilebilir hale getirilebilen tüm düğümlere nasıl özellik ekleneceğini gösterir. Bunu bir modül oluşturdumgoogletorp

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

İlk işlev, düğüme özelliği ekleyen bir kancadır; burada bir geri çağrıda veri sağlamak için tanımlanır. İkinci işlev, işlenen düğümü döndüren gerçek geri arama işlevidir.

Bunun çalışması için, varlık API'si modülünün bir parçası olan varlık belirteçleri modülünü yüklemeniz gerekir , ancak bu yine de kurallar tarafından gereklidir.


Teşekkürler - tam da ihtiyacım olan şey bu. Ama bunu nasıl yapıyorsun? Kurallar ve Jetonu indirdim, ancak işlenen düğümü gönderme seçeneği yok.
big_smile

@big_smile Bu işlevi kendiniz oluşturmanız gerekir - bunu yapmanın birkaç yolu vardır.
googletorp

Yanıtlamak için zaman ayırdığınız için teşekkür ederiz. Dürüst olmak gerekirse, cevaplarınız çok yardımcı olmuyor. İşlevi nasıl oluşturacağımı bilseydim, bir soru sormazdım. Açıkçası, tam cevabı göndermenizi beklemiyorum. Ancak, önerilerinizi nasıl gerçekleştireceğinizle ilgili ayrıntılı kaynaklara bağlantılar
sunmanız

2
@big_smile Yani beni aşağı indiriyorsun çünkü seni elle beslemedim mi? Google'ı denediniz mi, proje ana sayfasını denediniz mi? 30 saniye içinde kapsamlı Kurallar belgeleri buldum, eminim aynı şeyi yapabilirsiniz. Tembel olma.
googletorp

1
Tembel değilim ve beslenmeyi beklemiyorum. Cevabınız çok belirsizdi ve cevabın Kurallar belgesinde bulunabileceği anlamına gelmez. Aslında, "Bu işlevselliği kendiniz yaratırsınız", Kuralların dışında bir şey üretmem gerektiğini ima eder. Bu yüzden cevabınızı reddettim - yardımcı olmak için çok belirsizdi. Ancak, profilinize bakarak, çok yardımcı olduğunuzu görebiliyorum ve buna dayanarak belirsiz olmanın niyeti olduğunu sanmıyorum. Aşağı oylamanın çok üzücü olacağını düşünmedim. Eğer yapabilirsem tersine çevirirdim. Umarım zor duygular yoktur.
big_smile

1

Başka bir seçenek Entity2Text (DRupal 7) modülümü kullanmak olacaktır .

Şu anda bir varlığın her Görüntüleme Modu için bir "textexport" belirteci veriyor. Bu, birçok alan türü için iyi çalışır, ancak Adres Alanı gibi daha karmaşık olan bazı problemleri vardır.

Ayrıca "htmlexport" ekleyeceğim. Bunu kontrol etmek istiyorsanız bu şubeyi deneyin: http://drupalcode.org/project/entity2text.git/shortlog/refs/heads/7.x-1-htmlexport

Hala Kurallar ve MimeMail (veya muhtemelen yukarıda belirtilen htmlmail) kullanmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.