Joomlaコンポーネントを開発しています。ドラッグアンドドロップアップローダーをajaxで追加しました。ファイルがアップロードされると、確認メールが送信されます。 $id = $app->input->getInt('id');
を使用してデータベースの適切な項目を取得します。これは機能しますが、ajax呼び出しが完了すると、変数$id
はnull
に設定されているため、メールでは$customers->name
もnull
です。 ajax-callの後にモデル全体がリロードされるのはなぜですか?
コントローラーメソッドを呼び出します:
$.ajax({
cache: false,
url: "index.php?option=com_customercenter&task=mailAfterUpload&tmpl=component",
dataType: "json",
formData: {"companyID":"companyID"},
success: function(data) {
for(var i=0;i<data.length;i++) {
obj.createProgress(data[i]["name"],data[i]["path"],data[i]["size"]);
}
}
});
public function mailAfterUpload() {
$model = $this->getModel();
$response = $model->sendEmailAfterUpload();
}
public function sendEmailAfterUpload() {
$customers = $this->getCustomercenterData();
$mailer = JFactory::getMailer();
$config = JFactory::getConfig();
$sender = array(
$config->get( 'mailfrom' ),
$config->get( 'fromname' )
);
$mailer->setSender($sender);
$user = JFactory::getUser();
$recipient = $sender;
$mailer->addRecipient($recipient);
$body = "Der Kunde: <b>" . $customers->name . "</b> hat neue Daten übermittelt<br>Ordner '" . $customers->upload_folder . "' checken" ;
$subject = $customers->name . " hat neue Daten übermittelt";
$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setSubject($subject);
$mailer->setBody($body);
$send = $mailer->Send();
if ( $send !== true ) {
echo 'Error sending email: ' . $send->__toString();
} else {
echo 'Mail sent';
}
}
$app = JFactory::getApplication('site');
$id = $app->input->getInt('id');
デフォルトでは、各HTTPリクエストは独立しています。各呼び出しですべてのパラメーターを再度送信する必要があります。
または、クライアントがセッションCookieを保持できる場合は、サーバー側の変数をユーザーセッションに保存して、httpリクエスト間の状態を保持できます。
$session = JFactory::getSession();
$session->set('myId', $myId);
...
$session = JFactory::getSession();
$myId = $session->get('myId');