Alinous CMS updatealinous-portal.comAlinous-CMSの資料のアップデート配信用のRSSですAlinous-CMS技術資料http:alinous-portal.com/contents/alinous_cms/tech.html

Alinous-CMS及びAlinous-Coreの動作環境

Alinous-CMSは、Alinous-Core上に構築されたテンプレートですので、動作環境はAlinous-Coreに準じます。Alinous-Coreの動作環境は

OS Windows, Linux(Javaに準拠)
JDK version 1.5以降
アプリケーションサーバ Tomcat, Websphere, Weblogic (J2EE対応のWebコンテナ)

が必要です。

Alinous-CMSに関する技術資料

Alinous-CMSには、Alinous-Coreのプロフェッショナル版の上位版の「Alinous-Core CMS Enterprise Edition」が利用されています。この、エディションには

  • CMS用のツリー表示エンジン
  • SEO用の静的HTML出力エンジン
  • Luceneによる全文検索機能

が付加されています。

Alinous-CMSの技術資料

Alinous-Coreに関する技術資料

Alinous-Coreに関する資料として、『Alinous-CORE徹底入門』という資料を用意しています。こちらのドキュメントでは、順を追って読んでいくことで、サンプルのプロジェクトを動かしながらAlinous-COREを学習できるようになっています。

Alinous-CORE徹底入門

Alinous上での設定http:alinous-portal.com/alinous_cms/contents/doc/treenode/config.html

alinous-config.xml上での設定

alinous-config.xmlに設定する際には、次のようなコードを記述します。

<treenodes>
	<node>
		<id>contents</id>
		<datastore>pgapps</datastore>
		<doc-type>
			<id>normalDoc</id>
			<display-name>通常の文書</display-name>
			<editpage>/edit/edit.html</editpage>
			<showpage>/show/show.html</showpage>
			<deletepage>/edit/deleteDoc.html</deletepage>
			<spanclass></spanclass>
			<folderimg>
/alinous-common/treenode/img/toc_open.gif</folderimg> </doc-type> </node> </treenodes>

このとき、nodeタグひとつにつき、ひとつのツリーオブジェクトが作成されます。各タグの意味については次の表のようになります。

id ツリーオブジェクトのIDです
datasotre ツリーオブジェクトの値を保持するデータベースのインスタンス名です
display-name ドキュメントの表示名を記述します
editpage ツリー上からAjaxでドキュメントの「Update」コマンドが選択されたときに、ドキュメントを編集するためのページを選択します
showpage ツリー上からAjaxでドキュメントの「Update」コマンドが選択されたときに、ドキュメントを表示するためのページを選択します
deletepage ツリー上からAjaxでドキュメントの「Delete」コマンドが選択されたときに、ドキュメントを削除するために実行するページを選択します
spanclass (オプション)ツリーに表示されるノードのスタイルシートのクラスを指定します
folderimg (オプション)ツリーに表示されるノードの画像を指定します

この中で重要なのは、editpage, showpage, deletepageです。これらは、ツリーオブジェクトがHTML上で表示されたときに、ノードをクリックした際に表示されるコマンドを実行する際に実行されるページを指定し、ツリーオブジェクトに関連付けられたドキュメントを操作するために利用します。
コマンドは、下図のように、ツリーオブジェクトをHTML上に埋め込んだ際に、鉛筆のアイコンをクリックするとコンテキストメニューとして表示されるものです。

コマンド例

Alinous-Coreの仕組み(上級者向け)http:alinous-portal.com/alinous/contents/alinous_core/system.html

この章について

この節では、Alinous-Coreの技術的なしくみについて説明します。 この節に関しては、かなり、技術的にシステムの開発に詳しい人向けに書かれてありますので、あまり、システムに詳しくない方や、とにかく早く何かを作りたいという方は読み飛ばしていただいてかまいません。

Java上につくられた仮想マシン

Alinous-CoreはJavaで実装されていますが、それには多くの理由があります。 それは、今までに作られたさまざまなJava部品の再利用が考えられているからです。

Alinous-Coreの本体はalinous.warというwarファイルで提供されています。 このwarファイルは、Servletコンテナ上にデプロイできるようになっており、 Alinous-Coreの仮想マシンはTomcatなどのServletコンテナ上で動作します。

また、独自のクラスローダーも持っており、ライブラリ用のフォルダにあるjarファイル をリアルタイムで読み込んで実行する仕組みも持っています。

Alinous-Coreのシステム構成

HTMLとスクリプトの実行方法

Alinous-Coreは、「ALINOUS_HOME」という環境変数で指定されたフォルダの中の ファイルをHTTP経由でリクエストされたアドレスにマッピングしてHTTPクライアントに 返すHTTPサーバです。

ただし、Alinous-Coreは拡張子が「*.alns」「*.html」「*.rss」のファイルに 関しては一度中間オブジェクトにコンパイルした後、Alinous-Coreの仮想マシン上で 実行されます。この中間オブジェクトは、一度コンパイルされると元のファイルが更新 されるまで仮想マシン内でキャッシュされ、効率よくコンパイルを行うようになっています。

Alinous-Coreのコンパイルの仕組み

HTMLのサーバサイドレンダリング

Alinous-Coreは、データベースのインスタンスを2つ使います。 ひとつのDBインスタンスは、アプリケーションで利用するもので、もうひとつの DBインスタンスはAlinous-Coreのシステムが利用するものです。

システム用のインスタンスは

  • 画面の遷移情報のキャッシュ
  • Alinousスクリプトで利用された変数のキャッシュ
  • セッション情報
  • フォーム入力の値の過去データ

を管理しており、通常のフレームワークで書く際に面倒な画面の遷移とそれに 伴う状態(FormパラメータやAlinousスクリプトの実行結果)を自動化しています。

また、Alinous-Coreでは、HTMLで記述されたフォームを部品化するためのポートレット 機能を利用することにより、ひとつのHTMLファイルを他のHTMLファイルのdivタグやtdタグ の中に埋め込むことが可能です。このとき、埋め込まれたHTMLの部分は、まるでframeタグ のように独立して画面遷移します。これは、サーバー側で各HTMLがオブジェクト化されて 独立した状態をもち、それが最終的にサーバー側で直列のHTML文字列にレンダリングされる ことで実現しています。

フォーム認証http:alinous-portal.com/alinous/contents/alinous_core/tutorial/form_authentication/index.html

フォーム認証

Alinous-Coreおける認証機能は、「alinous-config.xml」に設定することで動作させることができます。実際には以下のような記述をします。

<?xml version="1.0" encoding="utf-8"?>
<alinous-config>
    <system>
           <system-datastore id="pgsrc" />
           <default-datastore id="pgapps" />
    </system>

    <datasources id="pgsrc"
class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources> <datasources id="pgapps"
class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources> <basic-auth> <relm> <datastore>pgsrc</datastore> <table>AUTH_TABLE</table> <users>USERS</users> <passwords>PASSWORDS</passwords> <roles>ROLES</roles> </relm> <zones> <zone> <area>/admin/</area> <roles>admin</roles> <!-- <error-page>/admin/error.html</error-page> --> <form-auth> <login>/admin/login.html</login> <confirm>/admin/confirm.html</confirm> </form-auth> </zone> </zones> </basic-auth>
</alinous-config>

<basic-auth>タグの部分がフォーム認証およびBASIC認証に関する記述をしている部分です。 BASIC認証は、ブラウザからユーザIDとパスワードを送り、レルムの内容と見比べて認証する単純なメカニズムとなっており、フォーム認証はログインフォームやログインのロジックを自分で書くという違いがあります。

<relm>タグは、BASIC認証を行う上で使います。レルムとは、「ユーザーのID」「パスワード」「ロール」を管理するためのデータベースのことです。Alinous-Coreでは、どのテーブルのどのカラムをどのように割り当てるかを設定ファイルで決めることができ、< relm>タグの中に設定します。

datastore どのデータベースを使うか
table どのテーブルを使うか
users ユーザーIDを格納するためのカラム
passwords パスワードを格納するためのカラム
roles ロールを格納するためのカラム

カスタムバリデータhttp:alinous-portal.com/alinous/contents/alinous_core/tutorial/custom_validator.html

カスタムバリデータ

カスタムバリデータを利用することで、バリデーションのロジックを自分で書くことが出来ます。 カスタムバリデータが利用されている例は、「/ALINOUS_HOME/boxtest/index.html」にあります。前回、標準バリデータを利用する際には、alns:validate属性を<input>タグにつけましたが、そこまではカスタムバリデータの場合も同じです。カスタムバリデータを付ける場合には、この属性の値をcustomという値にします。

<form name="testForm" action="show.html" method="POST">
(中略)
<input type="text" name="txt" value="Hello world" 
alns:validate="custom"><br> (中略) </form>

標準バリデータの場合は、これでバリデータの設置は終わりだったのですが、カスタムバリデータの場合はバリデーションのロジックを自力で書く必要がありま す。ロジックを書く場所は今回の場合はshow.htmlにたいしてフォームをPOSTするので、そのロジックを記述するshow.alnsに記述しま す。show.alnsのソースコードを示すと次のようになります。

// please put breakpoint at the next line
return 0;


function validate($formName, $inputName, $value, $IN, $SESSION)
{
if($value == ""){
return "custom";
}
return 0;
}

function validateArray($formName, $inputName, @value, $IN, $SESSION)
{
// Write validation logic for array parameters here
return 0;
}

ここで、2つの関数があることに注目してください。validate関数とvalidateArray関数です。validate関数は、フォーム入力の値が通常の文字列のものに対するバリデーションロジックを記述するもので、validateArray関数は、フォーム入力の値が配列の場合に呼び出されるものです。 今回は、通常のテキストの<input>にたいしてカスタムのバリデーションをかけているので、とりあえず、 validateArray関数は忘れていただいてかまいません。フォームの値が配列の場合に関しては、Alinous-Core徹底活用の節で説明いたします。 ところで、このvalidate関数関数ですが、5つの引数をもちます。それぞれの引数の説明をすると、次のようになります。

$formName 入力されたフォームの値が入っています。
$inputName inputのname属性の値が入っています。これから評価する値がどのinputタグの値かを識別するためのものです。
$value or @value $inputNameで指定されたinputタグの値が入っています。
$IN 入力パラメーターが入っています。
$SESSION セッションの値が入っています。このDOM変数にプロパティを足した場合は、セッションとして記憶されます。

ここで注目してもらいたいのが、$inputNameパラメータの存在です。このパラメータ が存在するということは、このvalidate関数は、フォームの中に存在するカスタムバリデータを設置したフォーム入力の数だけ呼ばれるということで す。このへんの動きは、validate関数にブレークポイントを設置してデバッガで動きを追ってみるとわかりやすいかと思います。

このvalidate関数でバリデーションの結果を返すには、return文を使います。バリデーションが正しく行われた場合には、0を 返します。一方、バリデーションに失敗した場合には、文字列を返すようにします。この文字列がバリデーションのエラーコードになります。このエラーコード は、標準バリデータで説明したエラーメッセージの表示を行う際に利用します。この例では、失敗したときにはcustomというエラーコードが帰りますので もし、このバリデータにエラー表示を付けると次のようになります。

<span alns:msg="txt" alns:form="testForm" alns:validate="custom">
   <font color="#FF0000">input your comment</font><br>
</span>
フォームとバリデータhttp:alinous-portal.com/alinous/contents/alinous_core/tutorial/validator.html

フォームとバリデータ

Alinous-Coreでは、バリデータは大きく分類してつぎの2種類を持っています。

  • 標準バリデータ
  • カスタムバリデータ

標準バリデータは、nullチェックや正規表現のチェックを行うためのものです。実際の開発では、単純に一つの値のフォーマッ トでバリデーションをかけるだけではなく、データベースの中の値を見てバリデーションをかけるケースなどが多々あります。例えば、会員制のサイトで新しい IDを登録するときに、もうすでに使われているIDはバリデーションではじきたい場合などがそのようなケースにあたります。

そのような場合のために用意されたのがカスタムバリデータです。カスタムバリデータでは、Alinousスクリプトでバリデーションのロジックを組むことが出来ます。

では、それぞれのバリデータに関してみていきましょう。

標準バリデータ

標準バリデータの例はサンプルの「/ALINOUS_HOME/insert/index.html」にあります。次に、バリデータの記述がされたフォームのソースを示します。

<form name="searchForm" action="confirm.html" 
method="POST" enctype="multipart/form-data"> <table> <tr> <td>NAME : </td> <td> <input type="text" name="name" value="" alns:validate="notnull"> <span alns:msg="name"
alns:form="searchForm" alns:validate="notnull"> <font color="#FF0000">input your NAME</font><br> </span> </td> </tr>

このソースでは各<input>タグにalns:validateという拡張属性が記述されています。そして、今回はnullチェックのバリデータですので、その属性の値にnotnullが指定されています。バリデータの機能を付けること自体はこれで終わりです。

さらに、バリデーションが失敗したときのエラーメッセージを表示させたいときには<span>タグを利用します。<span>タグのなかの拡張属性で次のように設定することで、バリデーションが失敗した際には<span>タグ内のメッセージが表示されます。

alns:msg どのインプットの失敗時に表示するか?インプットのname属性で指定
alns:form インプットのがあるフォーム名を指定
alns:validate エラーコードを指定。標準バリデータの場合は、バリデータ名

SQLとHTMLの連携http:alinous-portal.com/alinous/contents/alinous_core/tutorial/sql.html

SQLとHTMLの連携

SQLとHTMLの連携機能はAlinous-Coreのもっとも特徴的な部分になります。この機能を体験するのにもっとも良いのは、サンプルプロジェクトの「/ALINOUS_HOME/select/」の部分です。このフォルダにアクセスするには

http://localhost:8080/select/

にアクセスしてください。

このフォルダにある、「show.alns」はSELECT文を利用した例です。ソースは次のようになっています。

show.alns
// EXECUTE SELECT STATEMENT
if($IN.comment != null){
$LIKE_STMT = '%' + $IN.comment + '%';
}


SELECT * INTO RECORDS FROM SAMPLE_TABLE
WHERE
NAME = $IN.name AND
EMAIL = $IN.mail AND
COMMENT like $LIKE_STMT
ORDER BY NAME DESC
limit 10;

// Making colors for the back ground of TD tag for each record.
for($i = 0; $i < Array.size(@RECORDS); $i++){
if($i % 2 == 0){
$RECORDS[$i].BGCOL = "#EFEFEF";
}
else{
$RECORDS[$i].BGCOL = "#FFFFFF";
}
}

return 0;

このプログラムでは、まず最初にlike文で利用するための変数$LIKE_STMTをフォームから入力されたインプットの値に応じて作っています。$ IN.commentというのがフォームの「commnet」という名前の入力の値になります。ここで、このshow.alnsに入力しているフォームの ソースを見てみます。

index.html
<form name="searchForm" action="show.html" method="POST">
        
 <table>
       <tr>
               <td>NAME : </dt>
               <td><input type="text"
name="name" alns:ignoreBlank="true"></td> </tr> <tr> <td>E-MAIL : </td> <td><input type="text"
name="mail" alns:ignoreBlank="true"></td> </tr> <tr> <td>COMMENT : </td> <td><input type="text"
name="comment" alns:ignoreBlank="true"></td> </tr> </table> <input name="submit" type="submit" value="Search"/> </form>

このフォームには「name」、「mail」、「comment」3つの入力インプットがあります。これらの値がこのフォームがPOSTされた際にそれぞれ、$IN.name、$IN.mail、$IN.commnetという変数として自動的にわたります。

ここで、見てほしいのが「alns:ignoreBlank」という拡張属性です。

<input type="text" name="comment" alns:ignoreBlank="true">

通常、フォームのインプットに何も入力しない場合、そのインプットの値は空文字("")になりますが、この属性がついているとそのインプットの値が nullになります。最初の$LIKE_STMTを作る部分では、commentの値があるかどうかで判別してlike文に対する式を作っています。

次にSQLを実行する部分になります。その部分を抜き出すと次のようになります。

SELECT * INTO RECORDS FROM SAMPLE_TABLE 
WHERE
NAME = $IN.name AND
EMAIL = $IN.mail AND
COMMENT like $LIKE_STMT
ORDER BY NAME DESC
limit 10;

このSQL文には、Alinousスクリプトの変数を埋め込むことが出来ます。ここで、ふと、みなさんは疑問に思うと思います。もし、$IN.nameなどの入力している変数がnullもしくは存在しなかったらどうなるのでしょうか?

実は、Alinous-Coreは、WHERE句の条件式の自動調整機能を持っています。Alinous-Coreは、Alinousスク リプトに書かれたSQLをコンパイルしてツリー構造の中間コードを持っています。そして、次の図のように、ツリーの末端のほうから、不完全な条件式を取り 除く作業を自動的におこなってくれます。この自動調整機能は、SQL文の最後に「ADJUST_WHERE = FALSE」と記述することにより無効化することもできます。

SQLの条件自動調整

SQLの自動調整ケース2
そして、SELECT文が実行されるとINTO句で指定した@RECORDSという配列にレコードが返されます。この@RECORDという配列は、 Alinousスクリプトでもいじることが出来、最後の部分でそのレコードをテーブルに表示する際のバックグラウンドの色をそのレコードに付け足していま す。

// Making colors for the back ground of TD tag for each record.
for($i = 0; $i < Array.size(@RECORDS); $i++){
if($i % 2 == 0){
$RECORDS[$i].BGCOL = "#EFEFEF";
}
else{
$RECORDS[$i].BGCOL = "#FFFFFF";
}
}
HTMLの記述方法http:alinous-portal.com/alinous/contents/alinous_core/tutorial/portlet/portlet_description.html

HTMLの記述方法

では、次にどのようにTDタグの中に別のページを組み込むかを具体的にHTMLのコードを見ながら説明していきます。まずは、ALINOUS_HOME/index.htmlの中のTDタグの部分を実際に見てみましょう。

<TD alns:tagid="contents" alns:inner="/default.html"> </TD>

TDタグに、alns:tagidとalns:innerというAlinous-Core用の属性がついています。この2つの属性を利用することに よって、初期状態のindex.htmlのTDタグの部分に/default.htmlを埋め込むことが出来ます。属性の説明をしますと、alns: tagidはそのTDタグの領域に名前を付けるために利用します。そして、alns:innerは初期状態で埋め込まれるファイルを指定します。

では、初期画面の左側の「Select DB Form」というリンクをクリックしたときの動作はどのように実現されているのでしょうか?それでは、実際にそのリンクの部分のHTMLのコードを見てみます。

<A href="/select/" alns:target="contents">Select DB Form</A>

Aタグにalns:targetという属性がついています。この属性を付けることによって、ページ全体を遷移させるのではなく、名前を付けたTDタ グの領域のみ遷移させることが出来ます。また、このalns:targetに入れる特殊な値としてthisという値があります。この値は、自分がどこかの HTMLに埋め込まれている場合には埋め込まれているTDタグの中をhrefのURLに遷移させ、自分がトップの場合にはHTML全体が遷移します。

この様子を示すサンプルは、実は、「Select DB Form」のリンクをクリックした後に表示されるALINOUS_HOME/select/index.htmlにあります。フォームの下に「TEST」 というリンクがあると思います。ソースは次のようになっています。

<A href="/" alns:target="this">TEST</A>

このAタグは今の自分の領域にトップページをそのまま、まるごと入れ込むことを意味しています。実際に、このリンクをクリックすると入れ子のような状態に なりますが、これを複数回繰り返すと下図のような状態になります。このような状態でもそれぞれの領域が独立した状態を持って画面遷移します。このことは、 入れ子になったページのリンクをクリックしてみると、そのクリックされた部分のページが入れ子になっていないときと同じ動きをすることで確認することが出 来ます。

画像
今回は、tdタグのなかに他のページを埋め込みましたが、他には<div>タグの中に埋め込むことも可能です。

Alinous-Coreの基本http:alinous-portal.com/alinous/contents/alinous_core/basic/index.html

Alinous-Coreの基本

Alinous-Coreの基本概念は、HTMLとSQLベースで開発ができることです。

HTMLは、通常のHTMLにテキスト出力のマクロとAlinous-Core用の拡張属性(アトリビュート)を加えたもので記述します。

また、Alinousスクリプトは、SQLをそのままスクリプト内に入力できるほか、DOM形式の変数を利用したスクリプトを記述すること が出来ます。スクリプト部分では、DOM形式の変数が使えるほかに、if文、while文、for文や標準関数、カスタムの関数を利用することが出来ま す。

少しだけ例を示すと次のようになります。

AlinousーCoreでは、ひとつのページを表示するのに"*.html"ファイルと、"*.alns"ファイルを記述します。

sample.alns

// EXECUTE SELECT STATEMENT

// $IN.[フォーム変数名]でHTMLのフォームからの変数の値を取得
if($IN.comment != null){
$LIKE_STMT = '%' + $IN.comment + '%';
}

SELECT * INTO RECORDS FROM SAMPLE_TABLE
WHERE
NAME = $IN.name AND
EMAIL = $IN.mail AND
COMMENT like $LIKE_STMT
limit 10;

return 0;

スクリプトを実行することによって下の図のような変数を作ることが出来ます。

変数をデバッガで見る

sample.alnsを実行後、Alinous-Coreは、デザイン(HTML)とその実行結果を結合します。

sample.html
<HTML>
<HEAD>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>Input data into database</TITLE>
</HEAD>

<BODY>

  <H3>Select DB Form(/select/index.html)</H3><BR>

  <TABLE>
    <TR>
      <TD width="200" bgcolor="#AAAAAA">NAME</TD>
      <TD width="200" bgcolor="#AAAAAA">E-MAIL</TD>
      <TD width="300" bgcolor="#AAAAAA">COMMENT</TD>
    </TR>

    <TR alns:iterate="@RECORDS" alns:variable="oneRecord">
      <TD width="200">{$oneRecord.NAME}</TD>
      <TD width="200">{$oneRecord.EMAIL}</TD>
      <TD width="300">{$oneRecord.COMMENT}</TD>
    </TR>

  </TABLE>

  <BUTTON alns:back="true">Back</BUTTON>

  <H4>Comment</h4>

</BODY>

</HTML>

HTMLは、属性が拡張されていますが、Alinous-Core用のタグはありません。 その他の拡張要素としては、本文中にマクロでスクリプトで作成した変数の値を埋め込むことが出来ます。

これで、なんとなく、Alinous-Coreのイメージが分かりましたでしょうか?一番、Alinous-Coreを理解するのによい方法は実際に動かしてみることだと思いますので、これから、実際にAlinous-Coreのデバッグ環境で動かしてみましょう。

HTMLファイルの記述http:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/html.html

HTMLファイルの記述

HTMLファイルの役目は、Alinousスクリプトで作成した変数をHTMLで表現されたデザインの中に埋め込むことです。

Alinous-CoreのHTMLは、通常のHTMLを次の2つの点で拡張しています。

  • 変数を出力するテキストマクロが記述できる
  • Alinous-Core専用の属性が存在する

拡張部分はこれだけで、他に、Alinous-Core独自のタグなどは存在しません。そのため、DreamWeaverなどのオーサリングツールで作成したHTMLのデザインとの互換性に優れています。

Alinous-Core専用の属性について

Alinous-Core専用属性は、HTMLのタグの中に記述することによって様々な動作をさせることができるものです。出来ることの例を挙げると

  • 配列を使った繰り返し表示
  • フォームのバリデーション
  • 他HTMLの組込み(ポートレット機能)
  • 「戻る」ボタンの自動生成
  • 条件式が正しいときに中身を表示(if文の役目)

があります。

書き方を「配列を使った繰り返し表示」を例にするとつぎのtest.htmlのようになります。

test.alns
$record[0].name = "Yamada";
$record[1].name = "Tanaka";

return 0;
test.html
<html>
<body>

<div alns:iterate="@record" alns:variable="oneRecord">
{$oneRecord.name}さんこんにちは<br>
</div>

</body>
</html>

このとき、test.htmlは下のように展開されます。

<html>
<body>

<div>
Yamadaさんこんにちは<br>
</div>
<div>
Tanakaさんこんにちは<br>
</div>

</body>
</html>

Alinous-Core専用属性は、付けられるタグが決まっています。例えば、先ほど紹介したalns:iterate属性は<div><span><tr><td>タグに付けることが可能です。 これらの属性の詳細についてはリファレンスを参考にしてください。

urlのパスについて

HTML内で使われるパスは、次の3種類があります。

  • 「http://」から始まる完全なURL
  • 「/」から始まる絶対パス
  • 相対パス

この3種類のパスのうち、絶対パスに関してはAlinous-Coreの場合は、「/ALINOUS_HOME」を起点にした絶対パスになります。デバッグ用サーバでは「/ALINOUS_HOME」フォルダが

http://localhost:8080/

にあたります。

もし、「/ALINOUS_HOME/folder1/test.html」へのリンクを張りたい場合は次のように記述します。

<a href="/folder1/test.html">リンク</a>

関数についてhttp:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/alinousScript/function.html

関数について

Alinousスクリプト上で使える関数のタイプは次の3通りあります。

  • Alinousスクリプト上で定義した関数
  • 標準関数
  • JavaConnectorで作成したカスタム関数

Alinousスクリプト上で定義した関数は、Alinousスクリプトのメイン部分(return 0まで)の後に記述した関数です。

// 戻り値を省略
testFunc();
// 戻り値を変数に代入
$retValue = testFunc();

// 引数もとることが出来る
$ar[0] = "0000";
$ar[1] = "1111";

testFunc2("test", @ar);

return 0;

function testFunc()
{
return "test";
}

function testFunc2($domValue, @arrayValue)
{

}

関数は、戻り値を持つことが出来、関数内でreturnをした値が戻されます。今回の例では通常の値を返していますが、配列を返すことも出来ます。

また、引数には、通常のDOM変数と配列の両方をとることが出来ます。関数内で引数の値を変更した場合には、呼び出した元に処理が戻ったときに引数に指定した値も変更されます。

標準関数は、Alinous-Coreがデフォルトで持っている関数でこれらは何の定義も必要なく利用することが出来ます。

$ar[0] = "0000";
$ar[1] = "1111";

// 配列の大きさを取得(2が返される)
$num = Array.size(@ar);

return 0;

JavaConnectorで作成したカスタム関数は、Javaで書かれたメソッドをAlinous-Coreにインポートした関数です。標準関数のほと んどは、JavaConnectorで書かれていて、標準関数と同じ使い方で利用することが出来ます。JavaConnectorでの関数の作り方は後述 します。

制御構文についてhttp:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/alinousScript/structure.html

制御構文について

Alinousスクリプトでは、他のスクリプト言語のように次のような制御文が使えます。

  • if文
  • else文
  • else if文
  • for文
  • while文

それらの例を次に示します。

$test = 10;

// if文の例
if($test == 10){
$test = 1;
}
else if($test == 1){
$test = 2;
}
else{
$test = 3;
}

// while文の例
$cnt = 0;
while($cnt < 10){
$cnt = $cnt + 1;
}

// for文の例
for($i = 0; $i < 10; $i++){
$ar[$i] = $i;
}

return 0;

Alinousスクリプトの変数http:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/alinousScript/variable.html

Alinousスクリプトの変数

Alinousスクリプトで利用する変数はDOM形式の変数で「.」で区切って変数名を 書くことが出来ます。

$message.hello = "Hello world!!";
$message.gooby = "good by";

return 0;

このときに、変数のアロケーションに関しては意識する必要はありません。 自動的に存在しない変数に値を代入したときに変数のアロケーションは行われます。

また、変数が存在するかどうかは、値がnullかどうかをチェックすることによって 調べることが出来ます。つまり、存在しない変数の値を参照するとnullが返されます。 次にその例を示します。

$message.hello = "Hello world!!";

if($message.hello == null){
// $message.helloは存在するのでここにはきません
$exist = "存在しません";
}

if($message.goodby == null){
// $message.goodbyは存在しないのでここにきます
$exist = "存在しません";
}

return 0;

if文は最初の()の中の式が正しければ中の{}の部分を実行し、正しくなければ 実行しません。また、==演算子は演算子の左と右の変数(もしくは式)の値 が等しいことを意味します。

Alinousスクリプトの変数の型

Alinousスクリプトの変数には、次の3つの型があります。

  • 文字列型
  • 整数型
  • 浮動小数点型

これらの値は、直前に入力した値によって決まってきます。例を示すと次のようになります。

// 文字列型
$valStr = "文字列型";

// 整数型
$valInt = 100;

// 浮動小数点型
$valDouble = 10.0;

return 0;

これをデバッガで実行し、変数の様子を見ると次のようになっています。

Eclipseで見た変数

値の右側になにもついていないものが文字列型、[INT]とついているものが整数型、[DOUBLE]とついているものが浮動小数点型になります。

配列について

Alinous-Coreでは、配列を扱うことも出来ます。配列は、[]を変数の後につけることにより実現が可能です。次に、配列を使ったサンプルを示します。

// シンプルな配列
$valArray[0] = "test";
$valArray[1] = "test1";
$valArray[2] = "test2";
$valArray[3] = "test3";

// 配列の中にDOM変数を定義
$valDom[0].name = "iizuka";
$valDom[0].value = "tomohiro";
$valDom[1].name = "yamada";
$valDom[1].value = "tarou";

return 0;

これをデバッガで表示すると次のようになります。

Eclipseデバッガ上での配列表示
配列の中には通常の変数を代入することが出来ます。Alinousスクリプトの場合、すべての変数はDOM形式なので、ソースの中の2番目の例のようにさ らに入れ子構造をとることもでき、SELECT文を使ってデータベースからレコードを取ってきたときにはこの形式で配列が返されます。

特殊変数について

Alinous-Coreにはいくつかの特殊変数があります。その変数は最初から役割が決まっているもので、それぞれ次のような役割があります。

変数名 役割
$IN HTTPでGETおよびPostされた変数
$SESSION セッションに保存されている変数
$HTTP HTTPプロトコルのヘッダーなどの値が保存されている変数

Alinousスクリプトの構文http:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/alinousScript/index.html

Alinousスクリプトの構文

前節でも述べたとおり、Alinousスクリプトは、HTMLに埋め込むための変数を作成 するプログラムを記述する部分です。次に、簡単なAlinousスクリプトのプログラム を示します。

$test = "Hello world!!";

return 0;

このスクリプトでは最初に$testという変数を作り、その後で0を返しています。 この0を返す処理は決まりごとだと思って、毎回書くようにしてください。 0以外の値を返すときの役割は後述します。

基本構文http:alinous-portal.com/alinous/contents/alinous_core/basic/grammar/index.html

基本構文

Alinous-Coreの言語使用について語る前に、もう一度、Alinous-Coreの概念について おさらいをしておきます。Alinous-Coreは、Webデータベースアプリケーションむけの ドメイン特化型言語です。ですので、通常は、フレームワークがカバーする機能の表現 を言語レベルでサポートしている部分が多々あります。そのため、Alinous-Coreで プログラムを作る際には、自分が今作っているところの役割をきちんと理解することが 大切です。

ここで、ひとつのAlinous-Coreの最も簡単なプログラム例を示します。ファイルは 2つで「test.alns」と「test.html」です。その内容を次に示します。

test.alns
$test = "Hello world!!";

return 0;

test.html
<html>
<head>
        <title>最も簡単なサンプル</title>
</head>
<body>
<h>サンプルプログラムです</h>

{$test}

</body>
</html>

Alinous-Coreのひとつのページは次の順番で実行され、表示されます。

  1. Alinousスクリプト(test.alns)を実行し、変数を作る
  2. HTMLファイルにAlinousスクリプトで作成した変数を埋め込む

つまり、Alinousスクリプトは動的な変数を作成する役割を持ち、HTMLはデザイン 部分の表現をするやくわりを持ちます。これを考慮して、読み進めてみてください。

alinous-config.xmlhttp:alinous-portal.com/alinous/contents/alinous_core/basic/files/alinous_config.html

alinous-config.xml

alinousーconfig.xmlは、Alinous-Coreサーバの動作時の設定に関する項目を設定するためのファイルです。次の設定をこのファイルで行うことが出来ます。

  • システム全体の設定
  • データベース設定
  • 認証の設定
  • メールの設定

初期設定では、alinousーconfig.xmlは次のようになっています。

alinous-config.xml
<?xml version="1.0" encoding="utf-8"?>
<alinous-config>
        <system>
                <system-datastore id="pgsrc" />
                <default-datastore id="pgapps" />
        </system>

        <datasources id="pgsrc"
class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources> <datasources id="pgapps"
class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources> <basic-auth> <relm> <datastore>pgsrc</datastore> <table>AUTH_TABLE</table> <users>USERS</users> <passwords>PASSWORDS</passwords> <roles>ROLES</roles> </relm> <zones> <zone> <area>/admin/</area> <roles>admin</roles> error-page>/admin/error.html</error-page> --> <form-auth> <login>/admin/login.html</login> <confirm>/admin/confirm.html</confirm> </form-auth> </zone> </zones> </basic-auth> </alinous-config>

Alinous-Coreでは、2つのDBインスタンスを使います。ただし、1つのDBインスタンスで2つのインスタンスの役割をさせることも可能です。今回のalinous-config.xmlのDBの設定部分を抜き出すと下のようになります。

<system>
        <system-datastore id="pgsrc" />
        <default-datastore id="pgapps" />
</system> <datasources id="pgsrc" class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources> <datasources id="pgapps" class="org.alinous.plugin.derby.DerbyDataSource"> <connect>jdbc:derby://localhost/MyDB;create=true;</connect> <user></user> <pass></pass> </datasources>

ここでは、タグでデータベースのインスタンスを定義しています。実際には"pgsrc", "pgapps"という二つのインスタンスが定義されています。この場合は、どちらもタグで指定しているデータベースへの 接続URLが同じものなので、二つとも同じデータベースインスタンスを指しています。ちなみに、この接続URLはJDBCの接続URLになります。

タグでは、Alinous-Coreのサーバが内部的に使うデータベースのインスタンスを< system-datastore>、開発者がアプリケーション作成用に利用するデータベースをで指定しています。

データベースの詳細の設定方法や、MySQLやPostgreSQLを利用する際の設定などは、リファレンスに詳しく記述しますので、そちらをご覧ください。

デバッガを使うhttp:alinous-portal.com/alinous/contents/alinous_core/basic/try/normalDoc61.html

デバッガを使う

Alinous-Coreには、強力なデバッガも備えられています。デバッガを実行するのに都合が良いのが「/ALINOUS_HOME/select/」にある一連のファイルです。

まずは、プロジェクト内の「/ALINOUS_HOME/select/show.alns」というファイルをダブルクリックして開いてみ てください。すると、下図のようにテキストとして開かれます。ここで、最初は下図の青い丸い印がないと思うので、エディタの左の枠の部分をダブルクリック してみてください。そうすることで、青い印が表示されたと思います。また、このブレイクポイントを解除するには、青い印をダブルクリックすることで解除で きます。

Eclipseのデバッガ

この青い印はブレイクポイントを意味します。Alinous-Coreサーバがこの部分を実行するときに、一時処理を中断し、この場所で止まります。この部分を実行するためにはブラウザから

http://localhost:8080/select/

にまずはアクセスしてみてください。次のようなフォームが表示されます。

Web上のフォーム

次に、そのフォームの「Search」ボタンを押してみてください。すると、下図のような画面に切り替わり、変数の値などを見ることが出来ます。再び処理を続行する場合にはresumeボタンを押してください。

Eclipseのデバッガ

SEO対策も万全http:alinous-portal.com/contents/alinous_cms/functions/seo.html

静的なHTML書き出しとsitemap.xmlでSEOをサポート

Alinous-CMSには、作成したコンテンツを静的なHTMLとして出力する機能も備えています。SEO対策は、Webを持つ上で非常に重要です。動的で見やすいWebページも良いですが、それと平行して静的なHTMLを書き出しておくことでかなり有利にSEOを行うことが出来ます。
seo

SEO対策機能では

  • sitemap.xml
  • 静的HTML

を出力することが出来ます。

SEO担当者様の作業を自動化

また、静的なWebを出力する際に利用するテンプレートはHTMLで作成されており、このテンプレートを自由に加工することが出来ます。Alinous-CMSでは、DB連携が非常に簡単に出来ますので、記事のデータベースのテーブルの特定のカラムの内容をHTMLのテンプレートに自由に埋め込んだりして、通常、SEOの担当者が行うSEO作業を自動化することが出来ます

サポート&サービスhttp:alinous-portal.com/contents/alinous_cms/support/index.html

CMSカスタマイズサービス

Alinous-CMSのカスタマイズをお受けいたします。Alinous-CMSはデータベースとの連携が非常に得意なCMSですので、お客様の要望にたいして柔軟に対応することが可能です。また、Alinous-Coreを利用することによって、

  • 自社の業務に特化した簡易CMSをリーズナブルな価格で作成したい
  • ツリー表示や全文検索などの付いた高度なCMSを作りたい

といった幅広い要望にお答えすることが出来ます。

また、このサイトには自動見積機能があり、どのような機能がどれだけ必要かを入力するだけで、見積りの目安を計算することが出来ます。

→Web制作会社様向けWeb上システム自動見積

ショートセミナー

実際に、Alinous-Coreをダウンロードしてチュートリアル通りに利用することで、カスタマイズを自社で行いたいというニーズが出てくると思います。株式会社レブラではそのようなニーズに答えるために、1日〜2日間のショートトレーニングを行っています。詳しくは、お問い合わせください。

→コンタクト

開発請負サービス

本Alinous-portal.comを運営しております、株式会社レブラは、システム構築におけるスペシャリスト集団です。CMSに限らず、様々な業務系システムの開発も可能です。お気軽にお問い合わせください。

→コンタクト

自動Web上見積もりhttp:alinous-portal.com/contents/alinous_cms/support/normalDoc116.html

Web上で見積もり

Alinous-portal.comでは、Web上でAlinous-Coreを利用したシステムカスタマイズ費用見積が出来るようになっています。

Web上から

  • CMSの種類
  • 利用DBのテーブル数
  • フォームの数
  • WEB上の動的リストの数
  • RSS機能は必要か?
  • メルマガ発行機能は必要か?
  • カレンダー表示機能は必要か?
  • 顧客会員システムは必要か?
  • 全文検索は必要か?

などの項目を埋めていくことによってWeb上でシステム構築費用の概算をその場で出せるシステムになっています。Web上からの見積りは、Alinous-portal.comにユーザ登録(無料)をしていただくことによって可能になっています。

カスタマイズ費用概算見積もり

Web制作会社様に最適な価格帯にあわせた見積

Alinous-portal.comでは、Web製作会社様のお客様の規模感にあわせた2とおりの自動見積システムをご用意しています。この2とおりの基本見積りに対して、必要なものと必要でないものを足し引きすることによって、予算内で見積りが収まるように概算を出すことが出来ます。

Web-DBコース

Web-DBコースは、CMSを扱うほどのコンテンツのバリエーションはありませんが、同じ形式でたくさんのデータを扱う必要がある場合に最適な見積コースです。価格帯としては、システムの部分で50万〜150万円くらいを想定した見積になっています。

例としては

  • 不動産の物件表示サイト
  • 派遣の仕事表示サイト
  • 地域情報表示サイト

などがあげられます。
逆に、このタイプの見積では顧客のニーズを満たせないものとして、

  • DBのデータだけでなくページの更新が頻繁なもの
  • ひとつひとつのデータに対して、違ったバリエーションの見せかたをこりたい場合
  • コンテンツが日々増えていって、記事アーカイブなども利用したい場合
  • マニュアルなどの文書管理が必要な場合

などがあげられます。

CMS構築コース

最近は、何かものを探すときには電話帳ではなく、Webから探すことが当たり前の時代になってまいりました。インターネット上に溢れるたくさんの情報の中から自分の商品やサービスをお客様に選んでいただくためには、ただ単に訪問していただく以上に、整理されているたくさんの説明や情報が必要です。

特に、実際に商品やサービスの購入を考えられている方は、非常に詳しい情報まで求めます。その際に、きちんと整理されたわかりやすい情報が提供されていればより多くの購入に結びつけることが可能です。

CMS構築コースは、Webに徹底的にこだわりたいお客様向けの内容になっています。

価格帯としては、120万円〜となっております。

ツリー構造でコンテンツ管理http:alinous-portal.com/contents/alinous_cms/functions/contents_manage.html

管理画面の構造がそのままコンテンツに反映

Alinous-CMSでは、ツリー状のユーザインターフェースによってサイト上のコンテンツを管理することが出来ます。

また、CMS上で作ったツリー構造を自由なデザインに変換できることも大きな特徴です。このサイト自体もAlinous-CMSで作成されていま す。左側にあるメニューは、実はAlinous-CMSの管理画面にあるツリー上のマネジメントインターフェースのデータ構造をメニューに変換したもので す。

メニューのデザインは、完全に自由に行うことが出来、HTMLがわかる方ならば簡単にデザインを作成できるようになっています。

CMSとツリー構造

大量のコンテンツにも対応可能

Alinous-CMSはツリー構造を取っているため、1000ページを越えるような大量のコンテンツにも対応可能です。Alinous-Coreの技術資料のように、コンテンツの数が増えた際には、ツリーの表次段数を増やすことをおすすめします。また、コンテンツの記事の部分は、ツリー構造とは独立してデータベースに格納されているため、ジャンルやキーワードなどを利用してデータベースから検索しやすい仕組みを作ることで、大量のコンテンツの中から意図したコンテンツが探しやすくなります。

Alinous-CMSとはhttp:alinous-portal.com/contents/alinous_cms/what/index.html

データベースを中心にしたカスタマイズ特化型オープンソースCMSです

Alinous-CMSは、コンテンツマネジメントシステムに加えて、ショッピングカートやニュース・ブログ公開機能、さらには静的HTML出力によるSEO対策機能を搭載した高機能CMSです。
Alinous-Coreテクノロジーをベースにして作られているため、デザインのカスタマイズも非常に簡単です。

また、SEOに関しても、静的HTMLの出力ルールを自在にコントロールできるため、サーチエンジンのランキングのルールが変わった場合にも自在に対応することが出来ます。

HTMLが分かればデザインのカスタマイズ可能なCMS

Alinous-CMSは、Alinous-CoreというHTMLとSQLでWebを作成する言語で作られているため、ソースが非常に簡単です。特に、HTMLの部分は、ほとんどプログラムとHTMLが分離されているため、一部分のデザインを変更するのに結局はプログラムのソースを追わなければ出来ないというようなことはありません。

SQLとの連携で様々な機能がつけられる

Alinous-CMSのもっともな魅力は、「SQLを使った様々なDB連携の機能が付けられる」ということです。これは、Alinous-Coreテクノロジーを利用しているからであり、この部分が他のCMSとのもっともな違いになっています。

Webサイトのライフサイクルにあわせた運用が可能

Webサイトは、一度作ったら終わりではなく、運用し続けることが大事です。

まずは、最初にWebサイトを製作して立ち上げますが、この後の日々の運営が非常に大事です。Webサイトを見る顧客は、常に新しい情報がサイト上で配信されていないとなかなかリピーターにはなってくれません。そのような背景もあり、WebをWeb製作会社に発注する企業はいかに効率よくWebのコンテンツの更新が出来るかに非常にこだわります。

cms

通常はWebを更新する際には

  1. ユーザ企業がコンテンツを作成する
  2. Web製作企業がコンテンツを整理してアップする

という手順を踏みますが、ユーザ企業がある程度のWebコンテンツを自由に更新できる仕組みがコンテンツマネジメントシステムの大きな魅力です。

ユーザ登録機能http:alinous-portal.com/contents/alinous_cms/ec_shop/crm.html

ショッピングカートと顧客管理機能

Alinous-CMSのショッピングカート機能はユーザ登録の機能とも連動しています。初めてのお客様がショッピングカートで買いものをする際には

  1. 新規ユーザ登録し、ユーザ情報入力してログイン
  2. ショッピングカートに商品を入れる
  3. 決済方法を選択して注文を確定する

という手続きになります。

ですので、2回目に買い物に来た際にはまた、1からユーザ情報を入力する必要もなく、登録したユーザID(メールアドレス)でログインしてもらえば、1からまた住所などのユーザ情報を打ち込むことなくスムーズに買いものが出来ます。

また、お客様にユーザ登録をしてショッピングサイトの会員になっていただくことにより、ショッピングサイトの方でメールマガジンなどで新しい商品やキャンペーンなどの告知をすることも可能です。

CMSと顧客管理

より多くの顧客に対する継続的なアプローチが重要

Webサイトを運営することによって蓄積していく、自社にたいして興味を持っていただけた顧客のリストは一番の資産です。せっかく情報があっても何もしなくては意味がありません。Alinous-CMSでは、顧客を検索するための機能も付いていますので、特定の条件を満たした顧客に対してアプローチをかけることも出来ます。

Alinous-CORE徹底入門http:alinous-portal.com/alinous/contents/alinous_core/index.html

Alinous-Coreを徹底的に入門するためのドキュメントです。

Alinous-CMSのWebhttp:alinous-portal.com/contents/alinous_cms/index.html

最初のコンテンツです。
Coolエディターの使い方は重要で素は。

普通に改行は「Shift+Ctrl」でするところが一番のネックです。

Alinous-CMS技術ドキュメントhttp:alinous-portal.com/alinous_cms/contents/doc/index.html

Alinous-CMSの技術的な内容に関するドキュメントです。

フォルダ構成http:alinous-portal.com/alinous_cms/contents/doc/sample/folders.html API一覧http:alinous-portal.com/alinous_cms/contents/doc/treenode/api.html

API一覧

NodeTreeエンジンを操作するためのAPIの一覧です。

NodeTree.closeNode($treeName, $nodeId)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードを閉じます。

NodeTree.getCategory($treeName, $nodeId)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードのカテゴリ名を返します。

NodeTree.getChildrenById($treeName, $nodeId)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードの子どものノードを配列として返します。

NodeTree.getModels($treeName, $title)

$treeNameで指定したツリーオブジェクトの中のノードで、タイトルが$titleのもののすべてを配列として返します。

NodeTree.getNodeById($treeName, $nodeId)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードを返します。

NodeTree.getNodeByTitle($treeName, $title)

$treeNameで指定したツリーオブジェクトの中のノードで、タイトルが$titleのものの1つのノードをオブジェクトとして返します。このAPIを使う際は、指定するタイトルのノードが唯一になるように気をつけてください。

NodeTree.getNodesUnderTitle($treeName, $title)

$treeNameで指定したツリーオブジェクトの中のノードで、タイトルが$titleのものの1つのノードを内部的に選択して、その子ノードを配列として返します。このAPIを使う際は、指定するタイトルのノードが唯一になるように気をつけてください。

NodeTree.getStaticName($treeName, $nodeId, $outPath)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードを静的HTMLに出力した際のALINOUS_HOMEをルートとしたファイル名を返します。

NodeTree.makeSitemap($treeName, $originNodeId, $defaultFreq, $priority, $httpHostPath, $contentsOutDir, $outFile)

Googleの指定するsitemap.xmlの記述にのっとった形式のXMLを出力します。

NodeTree.openNode($treeName, $nodeId)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードをオープンします。ノードがオープンされると、ツリー上で子ノードを展開して表示します。

NodeTree.setCategory($treeName, $nodeId, $category)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードのカテゴリ名を設定します。

NodeTree.setChildrenCategory($treeName, $nodeId, $category)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードの子孫のノードのカテゴリ名を設定します。この関数では、子ノードの子ノードに対しても設定が再帰的に子ノードを持たないノードにたどり着くまで行われます。

NodeTree.setCurrent($treeName, $nodeId)

カレントのノードを設定します。カレントのノードは、一時的にオープンされて子ノードが展開され、さらに、ノードの背景色が変わってハイライトされます。

NodeTree.setDocRef($treeName, $nodeId, $docRef)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードに関連付けられたドキュメントのIDを設定します。

NodeTree.setTitle($treeName, $nodeId, $title)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードのタイトルを設定します。

NodeTree.setVisible($treeName, $nodeId, $visible)

$treeNameで指定したツリーオブジェクトの中のノードで、nodeIdが$nodeIdのノードがVisibleかどうかを設定します。$visibleには、"true"か"false"を設定します。

NodeTree.writeStaticHtml($treeName, $templeteHtml, $filePath, $rootNode)

静的HTMLをテンプレートを使って出力します。テンプレートは$templeteHtmlで指定し、そのHTMLに対してリクエストを出し、その出力結果を静的HTMLとして出力します。

TreeNode.clearCurrent($treeName)

現在設定されているカレントノードの指定を解除し、どこにもカレントノードが設定されていない状態にします。

NodeTreeエンジンについてhttp:alinous-portal.com/alinous_cms/contents/doc/treenode/index.html

TreeNodeエンジンについて

TreeNodeエンジンは、Alinous-CMSがサイト内のコンテンツをツリー形式で表示および管理する際に利用しているエンジンです。下図のように、Alinous-CMSでは、サイト全体のコンテンツをツリー形式のノードに関連付けて管理することができますが、このときに、TreeNodeエンジンが利用されています。

この、NodeTreeエンジンでは、ツリー情報をAlinousのデータベースの中で自動的に管理を行うことで表現しており、

  • 親ノードと子ノードの関係を保持する
  • セッションを利用して開いているノードを管理
  • セッションを利用して現在のカレントノードを管理
  • ノードのタイトル名を保持
  • ノードに関連付けられたドキュメントのID(int型)を保持

という動作を自動的に行うことが出来ます。また、NodeTreeエンジンは、Alinous-CMSに搭載されているSEO機能機能とも連携し、このツリー構造をSEOにも反映させることが出来ます。

NodeTreeエンジンの設定について

NodeTreeエンジンの設定は、「alinous-config.xml」で行います。ここで設定することにより、Alinous-Coreは自動的にそのツリーオブジェクト用のテーブルをデータベース内に作成し、自動で管理を行います。

静的HTMLの自動生成http:alinous-portal.com/alinous_cms/contents/doc/seo/static_html.html

静的HTMLの自動生成機能について

Alinous-CMSでは、静的なHTMLを出力する機能を備えています。静的なHTMLは、APIに対して指定したページに対してテンプレートとなるパラメータを与えることで生成されたHTMLを指定されたフォルダに対して決まったルールで出力します。

また、静的HTML出力機能はTreeNodeエンジンと連携して動作します。

出力APIについて

出力APIの利用例は次のようになります。

NodeTree.writeStaticHtml("contents", $IN.templetePage, $IN.outPath, $node.DOC_REF);

このとき、writeStaticHtmlの引数の意味は次のようになります。

第1引数 TreeNodeの名前になります
第2引数 出力するページのテンプレートへのパスを指定します。
例:) "/alinous/index.html"
第3引数 静的HTMLを出力先するフォルダのルートを指定します。
例:)"/alinous/contents/"
第4引数 TreeNode上のノードで、どのノードから下を出力するかを指定します。(ルートとなるノードを指定)

静的HTML生成時入力パラメータについて

静的HTMLをテンプレートから生成する際には、テンプレートのHTMLに対して下表のようなパラメータが入力されます。このパラメータを参考にしてHTMLテンプレートではCMSのコンテンツとテンプレートを合成するようにAlinousスクリプトとHTMLファイルを作成します。

request 必ず"current"という値が入ります。TreeNodeエンジンに対して、現在表示するコンテンツの内容はnodeIdのノードのものだということを教える役目をします。
alnstreename NodeTreeオブジェクトのIDを指定します。
DOC_REF Nodeに割り当てられたドキュメントのIDになります
TREE_NODE_ID NodeのIDになります
TITLE Nodeにタイトルがある場合にはタイトルの値になります
WRITE_STATIC 静的HTMLを作成する際には"true"が入ります
WRITE_STATIC_PATH 静的HTMLを出力する先のPATHの値になります

API一覧http:alinous-portal.com/alinous_cms/contents/doc/seo/api.html データベースhttp:alinous-portal.com/alinous_cms/contents/doc/treenode/database.html

ツリーオブジェクトとデータベース

ツリーオブジェクトは、alinous-config.xml内で定義されることによってで作成され、それに対応するテーブルが自動的に作成されます。そして、そのテーブルに対してツリーオブジェクトを格納します。

テーブル構造

ツリーオブジェクトひとつに対して2つのテーブルが作られます。テーブルの役目としては、

  • ツリーオブジェクトのノード格納用テーブル
  • シリアル用テーブル

の2つになります。また、これらのテーブルの名前はそれぞれ、

  • TREE_NODE_[ツリーオブジェクトID]
  • TREE_NODE_[ツリーオブジェクトID]_SERIAL

という名前になります。

テーブルのカラム

各テーブルのカラムは、次のようになります。

TREE_NODE_[ツリーオブジェクトID]

NODE_ID ノードオブジェクトのIDです
LEVEL ツリーの何階層目にあるか
PARENT_ID 親となるノードのID
NUM_CHILDREN 子ノードの数
POS_IN_LEVEL 同じ親ノードを持つノードの並び方で、その階層で何個目の場所にあるか
TITLE ノードのタイトル
DOC_TYPE 関連付けるドキュメントのタイプ
DOC_REF 関連付けたドキュメントのID
VISIBLE ノードが可視状態にあるかどうか
CATEGORY ノードのカテゴリー

TREE_NODE_[ツリーオブジェクトID]_SERIAL

MAX_NODE_ID ツリーオブジェクトのオブジェクトの中の現在の最大ID

CMSサンプルについてhttp:alinous-portal.com/alinous_cms/contents/doc/sample/index.html

サンプルの機能について

Alinous-CMSの「new project」ウィザードで作成されるサンプルは、Alinous-CMSの基本機能の利用方法を実現したサンプルになっています。Alinous-CMSの機能を理解して利用するうえで非常に役に立ちます。

このサンプル上に存在する機能として次のものがあります。

Eclipseのインストールhttp:alinous-portal.com/contents/alinous_cms/startup/eclisep.html

Eclipseのインストールについて

Alinous-CMSの開発環境と、開発環境上から立ち上げられるサーバを利用するためにはEclipseが必要です。

Alinous-CMSの開発環境は、Eclipseプラグインとして提供されていて、ローカル環境で起動できるサーバもその中に組み込まれています。

Eclipseのダウンロード

Eclipseのダウンロードは、Eclipseの公式ページから行います。

http://www.eclipse.org/

まずは、トップページからダウンロードのページに移動するために、ダウンロードのリンクをクリックします。

download page link

次に、ダウンロードのページでさまざまなパッケージのダウンロードをすることが出来ますが、「Eclipse Classic」を選択します。

download classic

Windows上で環境を整える場合には、「Windows」のリンクをクリックし、ダウンロードを行います。Eclipseは、ZIPファイルで提供されていて、ダウンロードしたZIPファイルを解凍後、任意のフォルダに解凍したものを移動してインストールの終了です。

Eclipseの起動

Eclipseを起動するには、解凍したフォルダの中の「eclipse.exe」をダブルクリックしてください。

eclipse folder

ダブルクリックして起動後、プログラムを保存するフォルダを聞かれますので、任意のフォルダを選んでください。

workspace of eclipse

JDKのインストールhttp:alinous-portal.com/contents/alinous_cms/startup/jdk.html

JDKのインストールについて

Alinous-CMSは、開発の際にJavaが使える必要はありませんが、Javaをベースに実装されているソフトウェアであり、Javaのインストールが必要です。Sun MicrosystemsのサイトからダウンロードできるJavaの環境には

  • Javaのランタイム動作環境(JRE)
  • JavaのDevelopment Kit(JDK)
  • JDKとNetBeansをバンドルしたもの

の3種類のものをダウンロードすることが出来ますが、今回必要なものは「JavaのDevelopment Kit(JDK)」になります。

JDKのダウンロード

JDKは、Sun MicrosystemsのWebページからダウンロードすることが出来ます。

http://java.sun.com/javase/ja/6/download.html

このページには、

  • jdk6 update X(Xは数字)
  • JDK 6 Update 4 with Java EE
  • JDK 6 Update 5 with NetBeans 6.0.1
  • Java Runtime Environment (JRE) 6 Update 5

などのダウンロードの項目がありますが、「jdk6 update X」をダウンロードします。

ダウンロードするものの選択

ダウンロードボタンをクリック後、次の画面に移りますが、このとき、利用許諾を受け入れるかどうかをラジオボタンで入力しないとダウンロードできませんので、ラジオボタンをチェック後、各プラットフォーム(OS)のパッケージのダウンロードを行ってください。

Download

ダウンロード後、Windowsプラットフォームの場合には、ダウンロードしたexeファイルを実行することにより、インストーラーにより自動的にインストールが行われます。

チュートリアルhttp:alinous-portal.com/contents/alinous_cms/startup/index.html

Alinous-CMSを動かすまでのチュートリアル

このチュートリアルでは、Alinous-CMSとして用意されている、CMSのカスタマイズ環境を用意し、デザインを変更するまでの流れを説明します。説明の流れとしては次のようになっています。

  1. Javaの開発キットであるJDKのインストール
  2. Eclipseのインストール
  3. Alinous-Coreのインストール
  4. Alinous-CMSのプロジェクトの作成・起動
  5. WebからAlinous-Coreサーバの設定
  6. コンテンツを新しく加える
  7. トップページのデザイン変更

この流れを一度踏むことによって、どのようにAlinous-CMSをカスタマイズするかの感覚がつかめるようになります。

Alinous-Coreの技術的詳細について

今回のチュートリアルでは、Alinous-CMSのセットアップを大まかに説明し、HTML部分のデザインの変更方法について説明しています。しかし、このCMSに対して機能を追加しようとする際には、Alinous-Coreの知識が必要です。Alinous-Coreを学習するには「Alinous-CORE徹底入門」をご覧ください。

このドキュメントを読む際には

  • SQLの基本的な知識
  • HTMLの知識
  • 若干のスクリプトの知識(if, while, for文など他の言語にもある基礎的な知識)

が必要です。

スクリプトの知識に関しては、さわりの部分のみで大丈夫で、フレームワークなど高度な知識は必要ありません。

人間が行うSEOhttp:alinous-portal.com/alinous_cms/contents/doc/seo/huristic.html

SEOの外部要因

SEOを実際にかけるときには、内部的な要因以外に外部要因でプロモーション活動を行うことが非常に重要です。SEOにおける内部要因とは、今ままで記述したもので次のものがあります。

  • ページ内に出現するキーワードおよびその類義語
  • タイトル
  • サイトのフォルダ構成と類義語、キーワードの配置

また、外部要因としては次のものがあります。

  • 外部からのリンク
  • サーチエンジンが提供するアクセス解析
  • 検索ページ上でのクリック率

外部からのリンクは非常に重要で、違うドメインのサイトから数多く張られているほうが、サーチエンジンはより価値の高いサイトだと判断されます。また、サーチエンジンが提供するアクセス解析ツールもSEOをかける上で重要になっています。

最近のサーチエンジンは、サイト運営者単独で品質を上げられる部分のほかに、他のサイトの判断も重視しており、サーチエンジンスパム的なSEOのみで効果的なSEOをかけるのは難しくなってきています。

重複ドキュメントに対する対策http:alinous-portal.com/alinous_cms/contents/doc/seo/same_docment.html

ドキュメントの重複に対する対策

まったく同じ内容のドキュメントがサイト内に存在する場合には、サーチエンジンスパム扱いにはなりませんが、どちらか片方のドキュメントのみが登録されることになります。Alinous-CMSでは、静的HTMLを出力してサーチエンジンに対して「人間にもサーチエンジンにもわかり易いサイト」として出力しているため、静的HTMLのほうが確実にインデックスされなければいけません。

重複に対する対策

この対策のためには、次の2つの方法があります。

  • robots.txtで動的ページのほうはインデックスを行わないようにする
  • メタタグを利用し、noindex,nofollow属性で動的ページをインデックスしないようにする

これらの方法をとることで、確実に静的HTMLのほうをインデックスに登録させ、サイトのフォルダ構成も含めた品質の際とコンテンツをインデックスすることが出来ます。

フォルダ構成とSEOhttp:alinous-portal.com/alinous_cms/contents/doc/seo/folder.html

フォルダ構造も考慮した高度なSEOをサポート

Alinous-CMSでは、フォルダ構造も考慮した高度なSEOを行うことが出来ます。近年の大手サーチエンジンは、単にページ単体を意識するだけではなく、コンテンツのフォルダ構造を考慮し、きちんと整理されたフォルダ構成をされているかもチェックしています。

SEOをサイトにかける際に次のことが考慮されている必要があります。

  • フォルダ構成で同じディレクトリ内で類義語が出現し、人間にわかりやすいサイト構成になっているか
  • ページにアクセスする際のURLにSEOをかけたいキーワードもしくはその類義語が現れるか

Alinous-CMSは下図のように、ツリーエンジンで設定したカテゴリーわけした内容をきちんと静的HTMLを出力する際にフォルダ構成も考えて出力するため、非常に高い品質の内部構成によるSEOが可能です。

SEOとフォルダ構成

HTML上での表示方法http:alinous-portal.com/alinous_cms/contents/doc/treenode/html.html

ツリーオブジェクトの配置

ツリーオブジェクトをHTML上に配置するには、次のようなコードを記述します。

	ツリーオブジェクト表示
<div alns:cmp="nodeTree" alns:cmpid="contents"
alns:cmpwidth="250" alns:cmpedit="false" alns:cmpvew="view"
alns:cmproot="7"> </div> (中略) ツリーオブジェクトのドキュメント表示領域 <div align="left" valign="top" alns:tagid="view"
alns:inner="default.html?doc_id={$IN.doc_id}"></div>

このコードでは、2つのdivタグを利用しています。最初のdivタグはツリーオブジェクトを表示するためのもので、このdivタグの中にツリー用のHTMLが自動で生成されます。その次のdivタグは、ツリーオブジェクトがクリックされたときに、その内容をAlinous-Coreのポートレット機能を利用して表示するための領域として用意されています。

alinous-config.xmlの設定の際に記述した、showpage, editpageの内容がこの領域に展開されます。

ツリーオブジェクトを表示する部分の設定項目は、タグの属性で行い、次のような内容を設定します。

alns:cmp NodeTreeオブジェクトを表示する場合には、必ず"nodeTree"と設定します
alns:cmpid

NodeTreeオブジェクトのIDを指定します。alinous-config.xmlでnodeタグのid属性を指定しましたがその値が入ります。

alns:cmpwidth NodeTreeオブジェクトの横幅を指定します
alns:cmpedit NodeTreeオブジェクトの編集用コマンドを許可するかどうかを指定します
alns:cmpvew

ノードがクリックされた場合に、ここで指定されたAlinousのポートレット用のidを持つdivタグの中にeditpageやshowpageで指定したページが出力されます。
※くわしくは、Alinous-Coreのポートレット機能もご覧ください。

alns:cmproot NodeTreeオブジェクト内の、どのノードの子供のノードを表示するかを選択します。オブジェクト内のすべてのノードを表示するためには"-1"を指定してください。

ポートレット機能について

Alinous-Coreには、ポートレット機能といって外部のHTMLの出力をあたかもHTMLのフレームタグのようにHTMLに埋め込むことが出来る機能があります。ツリーノードエンジンは、このポートレット機能と連携するように作られていて、showpageおよびeditpageの内容をHTML出力する際にはこの機能が使われています。

portlet

showpageが利用されるとき

showpageは、ツリーエンジンのリンクからクリックしたページを表示する際に、その内容を表示する際に利用されます。この際に、ポートレット内のHTMLページに渡されるパラメータは、次のものになります。

alnstreename ツリーオブジェクトのID
nodeId クリックされたノードのID
DOC_REF クリックされたノードに関連付けられたドキュメントのID
EDIT_MODE ツリーオブジェクトが編集可能なものとして開かれているかどうか(trueかfalse)

editpageが利用されるとき

editpageが開かれるときにも同様のパラメータが渡されます。

alnstreename ツリーオブジェクトのID
nodeId クリックされたノードのID
DOC_REF クリックされたノードに関連付けられたドキュメントのID
EDIT_MODE ツリーオブジェクトが編集可能なものとして開かれているかどうか(trueかfalse)

SEO対策機能についてhttp:alinous-portal.com/alinous_cms/contents/doc/seo/index.html

SEO対策機能について

SEOに対する機能はAlinous-CMSの大きな特徴のひとつです。最近の検索エンジンは非常に高度化し、より、人間から見てよいものとロボットから見てよいものがかなり近づいてきたといえます。ですので、以前は、現在ではサーチエンジンスパムにあたるようなSEOを行って、検索結果の上位にあったようなサイトでも、現在では上位にならないような例も多々出てきています。

この節では、Alinous-CMSを使ってどのようなSEOが行われるのかを解説します。

サーチエンジン広告とSEO

今の時代は、SEO対策が施されているWebサイトとされていないものでは、評価に雲泥の差があります。SEO対策されていないページは、サーチエンジンでユーザから検索されない上に、サーチエンジン広告を出そうとしたときに、キーワードの入札単価が圧倒的に不利なのです。

たとえば、SEO対策されたページの最低入札単価が15円/クリックだとすると、SEO対策なしのページは100円~600円/クリックくらいだったりします。これは、サーチエンジンの方針で、「広告でさえもコンテンツとして価値を持たせて圧倒的なクリック率を目指す」というものに関係しています。

今の時代、Web広告は新たな時代に入り、単なる「広告」の領域を超え、「情報発信」という領域に入ってきています。それゆえに、広告はそれを見るユーザに対して最適な方向なものがマーケット上で生き抜く風潮にあります。

それは、逆に言ってしまうと、広告を出す方の広告主にとっては激しい競争時代の幕開けを意味しています。単にお金で情報発信の手段を買うのではなく、広告を見るユーザに対する利便性を考えることがお金と同じ意味を持つ時代に突入し、資金力のあまりない小さな事業体でも工夫次第で大手に匹敵するような広告戦略が出来る時代になっています。

ですので、今の時代、SEOはWebで情報発信をする上で非常に重要な、なくてはならない要素になっています。

人間しか出来ない部分と自動化できる部分

SEOには大きく分けて、つぎの2つの要因に対して対策をすることになります。

  • Webサイトの外部サイトからのリンクなどの外的要因
  • Webサイト内の内的要因

外的要因に関しては、他のどのとうなサイトからリンクを張られたかなどの情報なので、これは、Webサイトをプレスリリースなどでいかにプロモーションするかという、人的な要因がほとんどな要素です。

これに対して、内部的要因に関しては次のような要素があり、自動で出来る部分と人間が意図的に行わなければいけない部分があります。

  1. ページ上のキーワード
  2. ページ上のタイトルタグなどの構成
  3. サイトのフォルダ構成
  4. フォルダ構成で同じフォルダの中のコンテンツ同士で関連性のあるキーワードを利用する

この中で、コンテンツを考えることは、人間の作業です。しかし、作り出したコンテンツをサーチエンジンにとってわかり易いフォルダ構成で配置したり、TITLEタグの内容にきちんと分かりやすいタイトルを配置したりする作業は、自動化できます。

しかも、この自動化できる処理に関しては人間はかなり苦手で、IT業界の初心者の方ですと、どうしてもミスが出たり、漏れが出てしまいます。Alinous-CMSでは、このような作業の自動化も考慮に入れ、CMSで入力されたコンテンツをサーチエンジンにとってわかり易い形で静的HTMLに出力する機能があります。

パートナーhttp:alinous-portal.com/contents/alinous_cms/alinous_cms.html

弊社が求めるパートナー

株式会社レブラでは、Alinous-Coreに関して協業していただけるパートナー企業様を幅広く募集しています。募集しているパートナーとしては

  • Web制作会社パートナー
  • SIパートナー
  • 販売チャネルパートナー
  • ホスティングパートナー

を募集しています。
また、Alinous-CMSに利用されている機能をOEMで欲しいなどという要望にもお答えしています。もし、弊社とのビジネスに関してご興味がありましたら、お気軽にお問い合わせください。

はじめにhttp:alinous-portal.com/alinous_cms/contents/doc/first.html

Alinous-Coreを利用したアプリケーション

Alinous-CMSは、Alinous-Coreを利用したアプリケーション・テンプレートです。それにより、Alinous-Coreに用意されている開発環境や拡張機能に関してはすべて利用することができます。Alinous-Coreには、通常のStandard EditionとCMS Enterprise Editionがあり、Alinous-CMSを動作させるためには、後者のEditionが必要です。

Alinous-CORE CMS Enterprise Editionについて

Alinous-Coreの上位バージョンである「CMS Enterprise Edition」は、主に次の機能がStandard Editionに対して拡張されています。

  • CMS用ツリーエンジン
  • SEO用静的HTML出力
  • テーブルのCSVバックアップ
  • Lucene連携全文検索

詳しくは、下の表をご覧ください。


Alinous-Core Professional Edition Alinous-Core CMS Enterprise Edition
SELECT文
INSERT文
DELETE文
UPDATE文
サブクエリー
ポートレット機能
標準バリデータ
カスタムバリデータ
RSS機能
画面遷移コントロール
BASIC認証機能
FORM認証機能
メール送信機能
Javaとの連携
コンパイル結果の最適化
CMS用ツリーエンジン ×
SEO用静的HTML出力 ×

テーブルのCSVバックアップ

×
Lucene連携全文検索 ×

Alinous-Coreとはhttp:alinous-portal.com/contents/alinous_cms/what/alinous.html

Alinous-Coreとは

Alinous-Coreは、Webとデータベースが連携するソフトウェアを作るためのツールです。通常、Webとデータベースが連携するアプリケーションを作成する場合には、

  • 言語(PHPやJAVA)
  • SQLの知識
  • 各言語で用意されたフレームワークの知識

が必要です。

中でも、フレームワークの部分は非常に習得するのに敷居が高く、多くのWebクリエイターにとって高い壁になっています。Alinous-Coreはこの問題を解決し、複雑なフレームワークを理解しなくても、Alinous-Core内で用意した、Web上の機能部品コンポーネントを組み合わせてWebを簡単に作っていく仕組みになっています。

用意されているWebDB開発用部品

用意されている機能部品としては

  • SELECT文
  • INSERT文
  • DEL