2017-10-09 10 views
0

J'ai développé une fonctionnalité séparée en utilisant PHP principal dans un sous-dossier de mon site drupal (supposons quelque chose comme mysite.com/myfolder/myfunc.php).comment utiliser la fonctionnalité de messagerie drupal à partir du fichier php externe (sous-dossier)?

Maintenant, je veux envoyer le même email comme le site drupal l'envoyer. Comme ce module n'est pas personnalisé, je ne peux pas utiliser hook_mail. Ou y a-t-il une possibilité d'y parvenir?

Comment utiliser la fonctionnalité de courrier électronique drupal à partir de php principal (sous-dossier du site)?

Répondre

1

meilleure façon est de créer un module mais si nécessaire, vous pouvez utiliser

require_once './includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 
/** 
Write your code here 
use PHP core, drupal core and contrib functions 
**/ 
+0

okay. Pour envoyer un email j'ai besoin d'utiliser les fonctions 'hook_mail' et ensuite' drupal_mail'. Mais le mien n'est pas un module. tout est écrit en PHP de base. Qu'est-ce que je peux faire dans ce cas? – siddiq

+1

Oh désolé. Nous pouvons utiliser n'importe quel nom comme nom de module. J'ai utilisé comme 'test'. J'ai référé http://dropbucket.org/node/308 et cela fonctionne bien, sauf qu'il doit être envoyé en tant que html. Que je peux vérifier plus tard. Mais l'utilisation de drupal_mail fonctionne très bien. :) – siddiq

0

D'accord avec le @AZinkey. L'one-way est d'inclure le bootstrap de drupal et a toutes les fonctionnalités de drupal disponibles, comme il a expliqué. Mais mieux serait de définir votre page depuis Drupal. Consultez la fonction hook_menu de drupal:

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

Comme il a expliqué:

function mymodule_menu() { 
    $items['abc/def'] = array(
    'page callback' => 'mymodule_abc_view', 
); 
    return $items; 
} 
function mymodule_abc_view($ghi = 0, $jkl = '') { 

    // ... 
} 

.. vous pouvez facilement vous définir la page personnalisée. Tout ce dont vous avez besoin est un chemin vers la page (que "abc/def") et une fonction qui fournira le contenu de la page ("mymodule_abc_view").

+0

Mais il n'y a pas de module. La page que j'ai écrite est php de base. – siddiq

+0

Créer un. Ce n'est pas difficile à faire. – MilanG

0

Pour la référence J'ai placé le code ici. Ce peut être du code complet, mais cela pourrait aider quelqu'un.

//These lines are to use drupal functions 
define('DRUPAL_ROOT', 'Your/drupal/path'); 
require_once '../../../includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

//Get the mail content 
$email_content = get_mail_content(); 
$params = array('body' => $email_content); 
$key = 'test_email'; //this is the key 
$to = '[email protected]'; 
$from = '[email protected]'; 

//use the hook_mail name here. in my case it is 'test'. 
$mail = drupal_mail('test', $key, $to, language_default(), $params, $from); 
echo "Mail sent"; 

//using hook_mail. we can use whatever the name we want. Parameters are just fine. 
function test_mail($key, &$message, $params) { 
    $language = $message['language']; 
    switch ($key) { 
//switching on $key lets you create variations of the email based on the $key parameter 
    case 'test_email': //this is the key 
     $message['subject'] = t('Test Email'); 
//the email body is here, inside the $message array 
     $message['body'][] = $params['body']; 
     break; 
    } 
} 


function get_mail_content() { 

    $email_to = '[email protected]'; 
    $pos = strpos($email_to, '@'); 
    $user_name = substr($email_to, 0, $pos); 
    $body = ''; 
    $body .= 'Hi ' . $user_name . '<br>'; 
    $body .= 'Please find my test email. <br>'; 
    $body .= 'This is the email body' . '<br>'; 
    $body .= 'Thanks<br>'; 
    $body .= 'TestTeam'; 
    return $body; 
}