私はこのメールフォームを機能させるために、1 週間以上も空いた機会を利用して努力してきました。これは、言語の多くが置き換えられているように見えるため、Joomla のはるかに古いバージョンと思われる Web チュートリアルに基づいています。それに応じてビットを変更しましたが、かなり明白な部分を見逃している可能性があります.
これをモジュールとして書いているので、{loadmodule contact} を使用して Joomla ページの任意の時点で呼び出すことができます。
特定の変更を加えて HTTP 内部サーバー エラー (500) を導入した場合を除き、フォームはページに正しく読み込まれますが、それ以上の説明はありません。
チュートリアルのようにフォーム アクションを「index.php」のままにしておくと、メールなしで Joomla サイトのインデックス ページで終了します。ここでの他のチュートリアルまたは回答が推奨するように、アクションを実行すると、フォームがクリアされますが、そこにあるものを処理するのに少し時間がかかるように見えますが、まだ電子メールはありません.
Joomla のインストールや電子メール機能に問題はありません。これは 2 ページの新規インストールであり、ユーザー確認メールを正しく送信することがテストされています。
私は PHP に慣れていないので、ほとんどの時間をこの文字を 1 文字ずつ調べ、コマンドを検索して正しいことを確認することに費やしてきました。全体の論理が間違っているかもしれませんが、私には正しいように思えます。
この種のものをオンラインでゼロから作成することはほとんどありません。ほとんどの議論は、事前に作成されたモジュールまたはコンポーネントに関連するか、それらを示唆することになります。これらはどれも、きれいでも単純でもなく、呼び出しの容易さを満たすこともできません。上記のように。
よし、これだ。このモジュールは mod_contact と呼ばれ、次のベース PHP ファイルがあります。
<?php
defined('_JEXEC') or die('Direct Access to this location is not permitted.');
$document =& JFactory::GetDocument();
$document->addStyleSheet(JURI::base() . 'modules/mod_contact/css/contact.css');
$document->addScript(JURI::base() . 'modules/mod_contact/js/contact.js');
$jinput = JFactory::getApplication()->input;
$c_send = JRequest::getVar('c_send', 'false');
switch($c_send){
case 'true':
$c_name = $jinput->get('c_name', 'No Name');
$c_email = $jinput->get('c_email', 'No Email Address');
$c_telephone = $jinput->get('c_telephone', 'No Telephone Number');
$c_message = $jinput->get('c_message', 'No Message');
$c_send = ModContactHelper::SendMail($c_send, $c_name, $c_email, $c_telephone, $c_message);
if($c_send !== true) {
echo 'Error Sending Email: ' . $c_send->message;
require(JModuleHelper::getLayoutPath('mod_contact',
'confirmation_tmpl'));
break;
default:
require(JModuleHelper::getLayoutPath('mod_contact',
'default_tmpl'));
}
?>
このモジュールには、メール送信を処理する helper.php ファイルがあり、$c_send に対して「true」の値を返すようになっています。これにより、テンプレートが「デフォルト」から「確認」に変更されます。確認テンプレートが表示されるのはまだ見ていません。フォームをクリアするのが最善です。
これが helper.php ファイルです。
<?php
defined('_JEXEC') or die('Direct access to this location is not permitted.');
class ModContactHelper {
public function SendMail($c_send, $c_name, $c_email, $c_telephone, $c_message) {
# Fetch Joomla Email Configuration
$config = JFactory::getConfig();
# Fetch JMail (Global Mail Object) through the JFactory Object.
$mailer = JFactory::getMailer();
# Set Sender to Name and Email Address from Contact Form
$mailer->setSender($c_email, $c_name);
# Set Subject Line
$mailer->setSubject('Message from Website Contact Form');
# Set Recipient to the Site Email Address, as defined in Joomla
$c_recipient = $config->getValue('config.mailfrom');
$mailer->addRecipient($c_recipient);
# Set Email Content
$c_body = "The following email was submitted via the Website Contact Form.<br />";
$c_body.= "<br />
$c_body.= "Name: ".$c_name."<br />";
$c_body.= "Email Address: ".$c_email."<br />";
$c_body.= "Contact Number: ".$c_telephone."<br />";
$c_body.= "<br />";
$c_body.= "Message: ".$c_message."<br />";
$mailer->setBody($c_body);
$mailer->IsHTML(true);
$c_send =& $mailer->Send();
return $c_send;
}
}
?>
受信者のメールアドレスをメールアドレスだけにするなど、いくつかの変数を切り替えてみましたが、それでもうまくいきません。
最後に、デフォルトのテンプレート default_tmpl.php を示します。参考までにアクションを残しておきます。
<?php
defined('_JEXEC') or die('Direct Access to this location is not permitted.');
?>
<div id="mod_contact">
<form action="index.php" method="post" id="c_form">
<input name="c_send" type="hidden" value="send"/>
<p><label for "name">Name</label><input name="c_name" type="text" id="c_name" size="30"/></p>
<p><label for "email">Email Address</label><input name="c_email" type="text" id="c_email" size="30"/></p>
<p><label for "telephone">Telephone Number</label><input name="c_telephone" type="text" id="c_telephone" size="30"/></p>
<p>
<label for "question">How can I help?</label><textarea name="c_message" cols="60" rows="10" class="c_message"></textarea></p>
<p class="submit"><input type="submit" value="Submit"/></p>
</form>
</div>
誰もが提供できる助けをありがとう。必要に応じて、完全なモジュールを ZIP ファイルとして提供できます。これにより、インストールが簡単になり、誰かがそれを試してみたいかどうかをテストできます。