RSSの作成
Alinous-Coreでは、簡単にRSSの作成も行うことができます。このサンプルはサンプルプロジェクトの「ALINOUS_HOME/rss/」のフォルダの中にあります。RSS自体は、「ALINOUS_HOME/rss/index.alns」と「ALINOUS_HOME/rss/index.rss」で構成されます。今までは、HTMLファイルとALNSファイルのペアで1つのページが構成されていましたが、今回は、HTMLファイルの代わりにRSSファイルが使われます。RSSの生成自体は非常に簡単なので、サンプルを見た方がよく分かると思います。
SELECT * INTO RECORDS FROM SAMPLE_table ORDER BY NAME DESC limit 10; $rdfAbout = "http://localhost:8080/"; $title = "Sample RSS"; return 0;
<?xml version="1.0" encoding="utf-8" ?> <rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja"> <channel> <title>{$title}</title> <link>{$rdfAbout}</link> <description>Sample RSS</description> <item alns:iterate="@RECORDS" alns:variable="rec"> <title>{$rec.NAME}</title> <link>http://localhost:8080/rss/show.html?name={$rec.NAME} </link> <description>{$rec.COMMENT} The email is {$rec.EMAIL} </description> </item> </channel> </rss>
Basic認証、フォーム認証
最近のWeb系の開発では、認証はシステムがからんだ場合には必ずと言ってよいほど求められると思います。Alinous-Coreででは、「alinous-config.xml」を記述することによって簡単に認証のシステムを構築できます。また、認証用のレルムとしてデータベースのテーブルを指定できることから、ユーザーやロールの登録や管理の部分も簡単に作成できます。
認証に関しては、以前の記事「Alinous-Coreの認証FWでBASIC認証とフォーム認証を運用」を参照してください。
メールの高速大量送信
メールはWebとはもはや、切っても切り離せない関係です。しかも大量に、そして高速にメールを配信したいという需要は相当あるのではないかと思います。Alinous-Coreでは単純にメールを送るだけではなく、高速にメールを送るための機能も備えています。
SMTPの設定
まずは、「ALINOUS_HOME/alinous-config.xml」にSMTPサーバの設定をする必要があります。
<mail> <server>mail.nanntoka.com</server> <port>25</port> <!-- If language encoding is necessary --> <lang-encode>ISO2022JP</lang-encode> <!-- If authentication is necessary --> <auth> <method>login</method> <user>user</user> <pass>pass</pass> </auth> </mail>
日本語のメールを送りたい場合は、lang-encode
を設定します。また、メール送信時にSMTPサーバの認証が必要な場合は、auth
タグに含まれる内容を記述します。プロバイダによりますが、SMTPサーバからメール送信する際に認証が必要のない場合はこの部分は省略してください。
メールの送信
Alinous-Coreで、メールを送信する場合には、Mail.send()
関数を使います。下のサンプルコードを参考にしていただければ、使い方は分かるかと思います。
// メールオブジェクト作成 $mail.from = "dummy@hogehoge.com"; $mail.to = "hoge@hogehoge.com"; $mail.cc = "hoge2@hogehoge.com"; $mail.bcc = "hoge2@hogehoge.com"; $mail.subject = "Test mail"; $mail.body = "こんにちは。 これは、テストメールです。 とりあえず、受信したら捨ててしまってかまいません。"; // Send Mail.send($mail);
この例は、TO
、CC
、BCC
のフィールドにそれぞれ1つずつアドレスを設定して送信している例です。では、大量送信したい場合にはどうしたらよいのでしょうか?実は、下の例のように、TO
、CC
、BCC
のフィールドは配列型を代入できます。
$toArray[0] = "hoge@hogehoge.com"; $toArray[1] = "hoge1@hogehoge.com"; $toArray[2] = "hoge2@hogehoge.com"; // メールオブジェクト作成 $mail.from = "dummy@hogehoge.com"; @mail.to = @toArray; $mail.cc = "hoge2@hogehoge.com"; $mail.bcc = "hoge2@hogehoge.com"; $mail.subject = "Test mail"; $mail.body = "こんにちは。 これは、テストメールです。 かなり高速に送信が可能ですので、スパムメール配信には絶対に利用しないでください。"; // Send Mail.send($mail);
上のソースと、その前の通常のメール送信のプログラムで違うところは、$mail
オブジェクトのto
に配列を代入しているところです。このようにすることによって高速にSMTPプロトコルでメールを送信できます。今回は、to
フィールドで例を示しましたが、cc
、bcc
も同様のことが可能です。
ファイルアップロード
Webアプリケーションでは、画像のアップロード機能が必要になることもあります。Alinous-Coreでは、画像やファイルのアップロードにも対応しており、業務系以外にもブログやSNS、CMSなどの開発も可能になっています。
ファイルアップロード用のフォーム
ファイルアップロードのサンプルは「ALINOUS_HOME/upload」にあります。最初のファイルを入力するためのフォームは「ALINOUS_HOME/upload/index.html」にあります。まずは、入力フォームのソースコードを示します。
<html> <head> <meta http-equiv="Content-Type"
content="text/html; charset=utf-8"> <title></title> </head> <body> <H3>Uploading an image file</H3> <form name="upload" action="upload.html" method="POST"
enctype="multipart/form-data"> <table> <tr> <td>FILE NAME</td> <td> <input type="text" name="filename" size="18"
alns:validate="notNull"> <span alns:msg="filename" alns:form="upload"
alns:validate="notNull"> <font color="#FF0000">Input FILE NAME.</font><br> </span> </td> </tr> <tr> <td>SELECT FILE</td> <td> <input type="file" name="file" size="18"
alns:validate="custom"> <span alns:msg="file" alns:form="upload"
alns:validate="NO_NAME"> <font color="#FF0000">Input FILE to upload.</font><br> </span> <span alns:msg="file" alns:form="upload"
alns:validate="WRONG_FILE"> <font color="#FF0000">File type is wrong.</font><br> </span> </td> </tr> <tr> <td></td> <td><input type="submit" name="submit" value="UPLOAD"></td> </tr> </table> </form> </body> </html>
このフォームでは、method
属性をPOST
に設定し、enctype
属性の値をmultipart/form-data
に設定しています。そうすることにより、ファイルをマルチパートのフォームデータとしてサーバに送ることができます。逆に、この設定を忘れると、ファイルのアップロードができないので気を付けてください。ファイルの選択自体はtype
属性がfile
のフォームインプットで行います。具体的には次の部分になります。
<input type="file" name="file" size="18" alns:validate="custom"> <span alns:msg="file" alns:form="upload" alns:validate="NO_NAME"> <font color="#FF0000">Input FILE to upload.</font><br> </span> <span alns:msg="file" alns:form="upload" alns:validate="WRONG_FILE"> <font color="#FF0000">File type is wrong.</font><br> </span>
今回、抜き出した部分には、バリデータ用のメッセージも含まれています。file
型のフォームインプットに対するバリデータの使いかたは後述します。
アップロードしたファイルの受け渡し
アップロードしたファイルの受け渡しは、「ALINOUS_HOME/tmp」フォルダにテンポラリーファイルを利用して行われます。テンポラリーファイルの名前は、
[SESSION ID]_[FILE NAME]
というフォーマットになります。例を示しますと、「sample.jpg」というファイルをアップロードしたときに、現在のセッションの値が「A43B2C8C0408BE4F741C7B096113E22B」だったとします。この時のテンポラリファイルのパスは「ALINOUS_HOME/tmp/A43B2C8C0408BE4F741C7B096113E22B_sample.jpg」になります。
バリデーションとその後の処理
ファイルのアップロードに関しても、バリデータを使うことができます。ファイルのアップロードの場合は、custom
型のバリデータを利用します。
$tmpFile = "/tmp/" + $SESSION + "_" + $IN.file; File.makeDir("/upload/images/"); File.copy($tmpFile, "/upload/images/" + $IN.file); return 0; function validate($formName, $inputName, $value, $IN, $SESSION) { if($inputName == "file"){ return validateFile($value); } } function validateFile($value) { if($value == ""){ return "NO_NAME"; } $value = String.toLowerCase($value); if(String.endsWith($value, ".gif") || String.endsWith($value, ".jpg") || String.endsWith($value, ".jpeg") || String.endsWith($value, ".png")){ return 0; } return "WRONG_FILE"; }
ファイルアップロード用のインプットにcustom
型のバリデータを設定した場合には、通常の場合と同じvalidate()
関数が呼ばれます。このとき、$inputName
には、アップロードしたファイルの名前(パスからフォルダをのぞいた名前)が入ります。
バリデーション成功後のロジックは、ソースの先頭部分になります。ここでは、パラメーターの$IN.file
(file
はファイルアップロードのフォームのname
属性)から、テンポラリーファイルへのパスを作り、イメージを保存するフォルダにコピーしています。
まとめ
今回は、Alinous-Coreで何ができるかについて書いてみましたが、Alinous-Core単体でもかなりのことができるということが分かっていただけたのではないかと思います。
Alinous-Coreの今後の動きとしては、PostgreSQLに注目し、データベースによる全文検索にフォーカスを当て、現在のWeb 2.0時代のWeb開発の需要に応えていこうと思っています。