WEB

21件の投稿

Joomla!

昨年9月以来、やらなければいけない仕事が割り込んできて、途中まで手をつけて完了していない仕事が4つはあります。

その一つがJoomlaの練習を兼ねて我がHPをJoomlaで書き換えることです。慣れない仕事にとりかかるには、入門書が一番大切ですが、今回「はじめてでもできる Joomla!」という本を購入。

これなら問題なくできそうです。
メニューとかモジュールの高度な使い方については簡単な説明で済ませていますが、当面これで十分かと思います。

HPの中身を変更するほどの時間はとれませんので、仕組みだけでもJoomla!で書き換えて、デザインも気の利いたものを探して全面更新したいと思います。
無料のテンプレートがたくさんあるのでどれにするか楽しみです(ただし「無料のなかにはウィルスが入っているものがある」という話がありますので、ウィルス検査をする必要があります)。

「must」の仕事が入らない限り、大した内容でもありませんのでこの際完了したいと思います。

因みにこのブログそのものはWordPressで書いています。ついでにこの際このテーマも変更しました。

話は変わりますが、facebookとはどんなものかと思って、登録だけしておいたのですが、どのように使ったらいいのか分からなくてホッテいました。

どういうわけか最近3人の知人と連絡がとれ、交信しました。実は「どういうわけか」ではなく、facebookはコンピュータ内のOutlookアドレス帳から勝手に友人を探し出すようです。いいような悪いような。

ついでに。
Joomla!のテンプレート作成ツールにArtisteerというものがあって、これでテンプレートを作ってみましたが、メニューリストのアイコンがうまく表示されません。メーカーに問い合わせたら「そのURLを提示しろ」ということなので、不具合のあるHPをやむを得ず表示しています。

もう一つ、Wordpressは時々「バージョンアップしろ」と言ってきます。バージョンアップしなくてもいいのにと思うのですが、あまりうるさいのでバージョンアップしたら、HTMLタグの扱いに不具合があって、新たにタグを使って保存するとタグが認識されません。アマゾンのリンクをHTML画面でなくビジュアル画面で保存すると、結局リンクは表示されないので、その都度HTML画面編集に入ってから保存し終了しなければいけません。早くデバッグしてほしいです。

CMS – XOOPS, Drupal, Joomla

「インターネットを使って、完全非公開のシステムを『簡単に、安価に』つくりたいのです」
と3月に書きました。
その後ボチボチと調べていたのですが、すこし見えてきました。

私はホームページを簡単に作りたかったので、CMS(Contents Management System)として、
以前から少し調べていたXOOPSを使うことを念頭においていました。
理由はもともとこれは日本製で日本語情報もかなりあったからです。

この度、他にどんなものがあるか調べていたら、
DrupalとJoomlaが評判がいいとことが分かり、両方を試しています。

何度も書きましたが、私はWEBは素人でよく知らないのですが、
今回無料の三つのCMSに触ってみて、先ず「すばらしい」というのが感想です。

XOOPSは発祥の地日本グループと現在の管理本部とが対立しているようで
(事実は知りませんが、そのようににみえます)、
パッケージも何通りもあり、話がゴチャゴチャしていて、仕組みまでもがゴチャゴチャしています。
「見た目」もよくありません。
ゴチャゴチャしている分、機能豊富なのかもしれませんが、内容はともかく親近感をもてません。
損をしていると思います。今回はパス。

Drupalは参考書([Drupal Pro Book])もすぐ届き、問題なくインストールできましたので、
コチョコチョと会員制のページを作りました。
入口はDrupalのログインページで間に合いますが、
従来のhtmlページを援用しますので、
この部分を保護するためにセッション管理のコードを追加すれば、「これで十分か」と思っています。

Joomlaはレンタルサーバーへのインストールに少し怪しいところがあり、
参考書もなかなか届かなかったので、後回しでしたが今はこちらを調べています。
(どういうわけか、日本語の[Joomla! Pro Book]は届くのに2、3週間かかるようですが、
Prentice Hallの[Joomla! 1.5: A User’s Guide]はすぐ届きました)。

DrupalとJoomlaはとてもハイセンスな雰囲気があります。
三つのCMSはいずれも各コンテンツに対するユーザのアクセス権を設定できますので、
会員制のホームページは問題なくできると思います。

これらのCMSはどれも色々な機能追加モジュールがそろっていて(多くは無料)、
たとえばフォーラムも多少貧弱ですが使えるかなと思います。

また、外観はテンプレート(あるいはテーマ)を差し替えることで、様々なデザインに変更できます。
これも非常に沢山の無料テンプレート(あるいはテーマ)がありますので、
好みに合ったものに取り替えることができます。
また、JoomlaとDruplaには強力なテンプレート作成ツール(Artisteer-有償。WordPressにも対応しています)がありますので、
本格的なデザイナーでなくても、大変美しい画面を作成することができます。

どちらにしても、デザイナーというよりプログラマがコチョコチョと気の効いたHPを作成するには、
最高の仕組みだなと思っています。

さて、理由はよく分かりませんが、私はJoomlaが気に入っています(最近はJoomlaの評判が一番いいようです)。
レンタルサーバへのインストールは一部問題があって、サンプルデータのインストールができなかったのですが、
手持ちのWindows XPにXAMPPをインストールし、
ここにJoomlaをインストールしました。
サンプルデータも問題なく表示されたようですので、調査がやりやすくなりました。

Joomlaの調査はPrentice Hallの[Joomla! 1.5: A User’s Guide]を読みながら進めています。
今半分近くまで拾い読みをしてきました。
Joomlaでは[メニュー]の考え方が少し混みいっていて理解しにくいのですが、
後半に[学校サイト]と[レストランサイト]の構築サンプルがありますので、ここまで読めば分かってくると思います。

この本にはコードはあまりありません。
色々な機能を「使いこなす」ためには、説明は平易ですし、入門書としては良書だと思います。
なお、これらのCMSはいずれもPHPを使って開発されています。

イントラネットのようなインターネット

インターネットを使って、完全非公開のシステムを「簡単に、安価に」つくりたいのです。
WEBサーバーは確保しています。
ユーザはコンピュータの知識がなく、ユーザにクライアントソフトをインストールしてもらうことはできません。
サイボーズがこの用件を満たしているのでしょうが、サイボーズを買う金はありません。

何度も書きましたが私はこの分野は素人ですので、手探り状態でいろいろ調べています。

まず、サーバーにユーザ名とパスワードが無ければログインできないようにすることは考えられます。
最悪この原始的な方法を採用するかも知れませんが、この方法では管理人がユーザをいちいち管理しなければいけませんので、管理人の負担が大きいと思われます。

次に考えたのは、XOOPS等のCMSを使ってログイン管理をすることです。
これも有力かもしれません。
ただし、完全非公開にしたいので、最初の画面も一般には見えなくしたいのですが、その辺り思惑通りになるのでしょうか。
無料のグループウェア用モジュールがあるので一度試してみたいと思います。

外国製の無料のPHPグループウェアがありますが、意外に設定に手間取ります。
これも一つの候補ですが、ユーザが英語では使ってくれないかもしれません。

ログインだけ、Golgleグループを使いその中から秘密のURLに導く手があるかもしれません。

無料のSaas型のグループウェアがあるようです。
サイボーズも時々無料キャンペーンを実施しているようなので、それを引き当てればいいのですが…
(Saas型グループウェアもクライアントインストールはいけません)

余り時間をかけたくありません。
どれがいいのか数日で決着したいと思います。

XSLT 3

XSLTの話は終わり。と思っていたのですが…

本日Amazonから、注文しておいたO’Reillyの[XSLT Cookbook]第二版が届きました。
700ページを越す大著で、勿論全部目を通してはいませんが、第一章にXPATHの説明があります。
著者の言では、XSLTにおけるXPATHは英語におけるアルファベットのようなもので、
第一版での解説が少なかったと第二版では最初の章で丁寧に説明しています。

どうやら私はXSLT(およびXPATH)1.0でプログラミングに手こずっていたようです。
XPATH1.0と2.0では別物かと思わせるほどの変更があります。
「以下のように[号棟 = ‘2’ And (外壁 = ‘True’ Or 屋上= ‘True’ Or 修理 = ‘True’ Or 塗装 =’ True’)]と式の論理結合ができません」と書きましたが、
2.0では少し異なる部分がありますが、OKのようです。

<xsl:template match=”/画像[号棟 = ‘2’ And (外壁 = ‘True’ Or 屋上= ‘True’ Or 修理 = ‘True’ Or 塗装 =’ True’)]”>
  <xsl:call-templates name=”Display”/>
 </xsl:template>

私は、昔XMLエディタとしてALTOVAの[XML Spy]を購入し、
XMLの専門家ではないので、これで充分ともう10年近くもバージョンアップせずに愛用してきました。
とてもコンパクトで、XMLのデータ構造を視覚的に表現してくれ、編集がとても楽にできます。

[XML Spy]のXPATHプロセッサが古いということが今回分かりましたが、
私はそれを知らないままに、プログラムの苦心をしていたのです。
手元の参考書も皆古いものなので、バージョンアップによる変更を考えてもいませんでした。

もっと調査をしなければいけませんが、前回ご紹介しましたリカーシブコールのプログラムはまったく必要なく、
実に簡単なプログラムで済むようです。

Visual Studioの処理系はXPATH2.0を採用しているようなので、以後VS2008を使おうと思います。
このエディタは[XML Spy]ほどには気がきいていませんが。

余談ですが、私は英語の技術書を読むのは余り苦になりません。
が、時々辞書の力を借りなければいけません。
辞書を引くのはカッタルイので、近年インターネットの辞書を使ってましたが、
これも何とかならないかと思って電子辞書を購入しました。
名詞入れを少し大きくした程度で、沢山の辞書が入っていて、これが一番いいかといつも持ち歩いています。

XSLT 2

XSLTのプログラムに手こずっています。

話を簡単にしますと、団地の不具合箇所の写真があります。
各写真に対応して、[号棟]、[部位]、[工事区分]、[写真URL]および[コメント]タグをもったXMLデータを作成します。

たとえば、ある写真に[2号棟]、部位:[外壁]、[修理]要、[pic101.jpg]、[外壁タイルにひびが入っています]という具合です。
WEBのページでは、例えば次のようなコントロールがあって、ユーザがコンボから号棟、チェックボックスで部位、工事区分を選択し、サブミットすると該当する画像をコメント付きで表示したいのです。

xsltInVals2

やるべき仕事は、「XMLデータファイルから、[2号棟]の写真で(かつ)、外壁か屋上か修理か塗装]に関する写真を表示せよ」というものです。

これを仮にDBのSQLで書くと次のようなものです。

Select * From 画像テーブル Where 号棟 = 2 And (外壁 = True Or 屋上= True Or 修理 = True Or 塗装 = True)

このデータの抽出と画面の作成をXSLTでやりたいのです。
データの抽出でいえば、SQLのWhere区を作成したいのですが、これがうまくいきません。
XLSTをよく知る人は簡単な話なのかもしれませんが、素人の私にはよく分かりません。
XPathで次のように書ければ話は簡単ですが、そうはいきません。

<xsl:template match="/画像[号棟 = '2' And (外壁 = 'True' Or 屋上= 'True' Or 修理 = 'True' Or 塗装 =' True')]">
  <xsl:call-templates name="Display"/>
 </xsl:template>

ここには二つの問題があります。
まず、[号棟 = ‘2’ … ]のようにXPATHに二つ以上の条件を書くことができないこと。
つぎにこのような条件をダイナミックに書くことができないことです(多分)。

SQLは文字列ですので、データベースに送信するまでにダイナミックにSQLを作成することができますが、
XSLTではそのような方法はないと思います。

私が苦心の末たどり着いた方法は次のようなものです。

メインテンプレート
すべての画像データに次の処理をする。
1. 検索条件に号棟が記入されているかどうかしらべる。
1.1 号棟の指定がある。
1.1.1. もし画像の号棟が指定の号棟に符合すれば、[外壁][屋上][修理]等の検索条件の値をパラメータとして[工事テンプレート]をコールする。
1.1.2. 符合しなければ、終わり。
1.2 号棟の指定がなければ、[外壁][屋上][修理]等の検索条件の値をパラメータとして[工事テンプレート]をコールする。

工事テンプレート
1. [外壁]パラメータがtrueなら、次の処理をする。falseなら2.の処理をする。
1.1 画像データで[外壁]タグがtrueなら、[表示テンプレート]をコールして終わり。
1.2. falseなら、[外壁]パラメータをfalseにし、[屋上][修理]パラメータをそのままにして、[工事テンプレート]をコールする。
注。この画像は他の条件に符号するかもしれないので、再度[工事テンプレート]をコールするが、[外壁]パラメータは検査済みにしなければいけない。
2. [屋上]パラメータがtrueなら、次の処理をする。falseなら3.の処理をする。
2.1 画像データで[屋上]タグがtrueなら、[表示テンプレート]をコールして終わり。
2.2. falseなら、[屋上]パラメータをfalseにし、[修理]パラメータをそのままにして、[工事テンプレート]をコールする。
3. 以下は同様の処理をします。

注。このテンプレートの主旨は、ある画像を表示するかどうかは、
最初の検索条件を調べ、条件に符合すればこの画像を表示し他の条件をチェックしない。
当該条件に符合しなければ次の条件をチェックし、条件に符合すればこの画像を表示し他の条件をチェックしない。
すべての条件に符合しなければ、この画像は表示しない。ということです。
XSLTでは、ループから抜けるための[exit for]のような仕組みがないので、リカーシブコール(再帰呼び出し)を使うしかないと思います。

表示テンプレート
表示テンプレートはHTMLのTableタグの該当する列に、画像の号棟名や画像そのものやコメントを転記するものです。

XMLおよびXSLTファイルができれば、条件入力用のHTMLファイルを作成し、上のコントロールを配置、表示すべき列等にID(例えば[targetID])を付けて、JavascriptでXSLT変換をし、その結果をターゲットの[innerHTML]に出力すれば望みの画像を表示することができます。

var HTMLtarget = document.all[targetID];
HTMLtarget.innerHTML = XSLProcessor.output;

ところで、なぜ簡単に処理できるデータベースではなく、XSLTにこだわるのかといえば、JavascriptとXML、XSLTにしておけば、サーバーが不要で、どこでも必要な画像をみることができるからです。