このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

FMP カスタムWEB 画像一覧フォーマット

発言者:ハンダ
( Date Tuesday, December 26, 2000 14:50:39 )


はじめまして。半田ともうします。
ファイルメーカーver4.1でWEBで公開の画像データベースを作成しています。

画像はファイルメーカーのフィールドに相対パス情報のみを記録させて、
<IMG SRC="[FMP-Field:画像FilePass]">
としています。

表示方法は、
[FMP-RECORD][/FMP-RECORD]内に
<IMG SRC="[FMP-Field:画像FilePass]">を置いて
画像をタテ3画像、ヨコ3画像の計9画像で表示ししました。

その際、画像の下にテキストフィールドを置いて画像の名前を表示したいのですが<BR>を置くと画像がタテ1列の表示になってしまいます。
また、[FMP-RECORD][/FMP-RECORD]内に<TABLE>を置き、その中に
<IMG SRC="[FMP-Field:画像FilePass]">を置いてもタテ一列になってしまいます。

見た目の問題ですが、画像の一覧でタテ一列表示は致命的です。

どなたか解決策を御存知の方、教えて下さい。

ショージ さんからのコメント
( Wednesday, December 27, 2000 10:24:27 )

ファイルメーカーに限らず、ウェブアプリケーションを構築する際には、
あらかじめ画面デザインを決め、そのHTMLがどのように記述されている
のかを知らなければいけません。

画像が横に並ばないのは、画像が横に並ぶためのスペースがブラウザ側
で用意されていない(もしくはテーブルの幅が狭い)ためです。

テーブルを使って画像を横に3つ並べたいのであれば、以下の様に記述し
ます。

 <TABLE>
  <TR>
   <TD><IMG SRC="gazou1.jpg"></TD>
   <TD><IMG SRC="gazou2.jpg"></TD>
   <TD><IMG SRC="gazou3.jpg"></TD>
  </TR>
 </TABLE>

縦にいくつか並べたければ、<TR></TR>の部分を増やせばよいでしょう。

ではこのようにするにはどのようなプログラムにすれば良いのか、それ
はご自分で考えてみてください。それでおわかりにならなければ、もう
一度質問されると良いと思います。

ヒント:
 [FMP-IF]を利用して、現在の画像が何番目なのかを判断し、その番号
に見合ったタグを書き出す。3の倍数+1の時は次の<TR>になるように。

はんだ さんからのコメント
( Thursday, December 28, 2000 10:35:27 )

アドバイスありがとうございます。

説明不足みたいでしたので補足いたします。

-----------------------------------------------------

現在までに出来上がっているWEB画像データベースの概要です。

データベース内に100000件のレコードがあり、画像の相対ファイルパスと画像名称、コメントが1レコード内に登録されています。

WEB閲覧者がコメント内を検索して、件該当件が200件ヒットしたとします。

検索結果が3x3=9のマトリックス表示で一覧されます。

----------------------------------------------------

以上が現在まで出来上がっています。

今、問題にしてる事は検索結果の画像の下に画像名を表示する時、[FMP-RECORD][/FMP-RECORD]内に<TABLE>を入れると3*3マトリックスではなくなってしまい、タテ1列になってしまうことです。

その問題のCDML&HTMLの抜粋です。
--------------------------------------------------
<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<P><TABLE BORDER=0 BGCOLOR="#000000" CELLSPACING=0 CELLPADDING=3 WIDTH=420 HEIGHT=340>
   <TR>
      <TD VALIGN=top>
         <P>[FMP-RECORD]
            <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=130>
               <TR>
                  <TD HEIGHT=96>
                     <P><A HREF="[FMP-LinkRecID:format=detail.htm, layout=cgi]"><IMG SRC="[FMP-Field:TFilePass]" ALT="Thumbnail" WIDTH=128 HEIGHT=96 BORDER=0 ALIGN=bottom hspace=3 vspace=3></A>
                  </TD>
               </TR>
               <TR>
                  <TD>
                     <CENTER>[FMP-FIELD: IMAGENAME]</CENTER>
                  </TD>
               </TR>
            </TABLE>
         
         [/FMP-RECORD]
      </TD>
   </TR>
</TABLE>
 
</BODY>
</HTML>
--------------------------------------------------
このままですとタテ1列の表示になってしまいます。
[FMP-RECORD]〜[/FMP-RECORD]の<TABLE>を外すと3*3マトリックス表示になります。

[FMP-Field:TFilePass]はサムネイルの相対ファイルパスのテキスト情報のみが登録されていて、WEBのFORMATファイルにサムネイルを<IMG SRC>で表示させます。

コメントしていただいたジョージさんには感謝いたしますが、論点が違います。HTMLの書き方は知っていますので。

画像関係に詳しい方のアドバイスおまちしています。

稲垣 さんからのコメント
( Thursday, December 28, 2000 11:25:36 )

 具体的なアドバイスとは少し異なりますが・・。

 はずしているかも知れませんが、画像フォーマットの問題ではなくて、HTMLと
CDMLの記述の問題に見えます。

 HTMLが分かるとのことですので、実際にFMで処理をした1列のページのHTML
ソースを見ればどうしてそうなっているのかの結果は分かるかと思います。
 その辺から何処が悪いのか分かるかと思いますが、確認してみてはどうでしょ
うか?

 で、FMP-RECORDは、レコードの数を単純に繰り返すだけですので、画像
表示用の1行2列のテーブルを並べるので、上記のソースでは縦一列に並んで
しまうかと思います。



kozka さんからのコメント
( Thursday, December 28, 2000 11:44:18 )

TABLEの幅と画像の幅の組み合わせで 3列のマトリックス表示になっている
のかも知れませんね。
(3枚目の画像でTABLEの幅に達するとブラウザが次の画像を次の行に配置していく)

はんだ さんからのコメント
( Thursday, December 28, 2000 12:02:58 )

あたりです!

みうら さんからのコメント
( Thursday, December 28, 2000 16:26:53 )

基本的にショージさんの書かれた方法で解決できるわけです。が....
> 論点が違います。
と言われては、せっかくのアドバイスが勿体ないですよね。>ショージさん

で、私なりに考えてみたのが以下の方法です。(もっとスマートな方法があるかも)
--------------------------------------------
計算フィールドを1つ追加 (例:フィールド名を「tmp」とします)
計算式を「Mod(Status(レコード番号), 3)」にします
--------------------------------------------
HTMLは下記の通り書き換えます

<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<TABLE BORDER=0 BGCOLOR="#aaaaaa" CELLSPACING=0 CELLPADDING=3>
   <TR>
[FMP-RECORD]
 [FMP-If: Field:tmp .eq. 1]
  [FMP-If: CurrentRecordNumber .neq. 1]
   </TR>
   <TR>
  [/FMP-If]
      <TD VALIGN=top>
            <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=130>
               <TR>
                  <TD HEIGHT=96>
                     <P><A HREF="[FMP-LinkRecID:format=detail.htm, layout=cgi]"><IMG SRC="[FMP-Field:TFilePass]" ALT="Thumbnail" WIDTH=128 HEIGHT=96 BORDER=0 ALIGN=bottom hspace=3 vspace=3></A>
                  </TD>
               </TR>
               <TR>
                  <TD>
                     <CENTER>[FMP-FIELD: IMAGENAME]</CENTER>
                  </TD>
               </TR>
            </TABLE>
      </TD>
 [FMP-Else]
      <TD VALIGN=top>
            <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=130>
               <TR>
                  <TD HEIGHT=96>
                     <P><A HREF="[FMP-LinkRecID:format=detail.htm, layout=cgi]"><IMG SRC="[FMP-Field:TFilePass]" ALT="Thumbnail" WIDTH=128 HEIGHT=96 BORDER=0 ALIGN=bottom hspace=3 vspace=3></A>
                  </TD>
               </TR>
               <TR>
                  <TD>
                     <CENTER>[FMP-FIELD: IMAGENAME]</CENTER>
                  </TD>
               </TR>
            </TABLE>
      </TD>
 [/FMP-If]
[/FMP-RECORD]
   </TR>
</TABLE>
 
</BODY>
</HTML>
--------------------------------------------
あとは「-Max=9」で検索すればご希望の通りに表示されると思います。

ショージ さんからのコメント
( Thursday, January 04, 2001 12:50:43 )

>基本的にショージさんの書かれた方法で解決できるわけです。が....
>> 論点が違います。
>と言われては、せっかくのアドバイスが勿体ないですよね。>ショージさん

みうらさん、お気遣いありがとうございます。

問題としての論点が違うのかどうかが分かるようになると、基本的には自分
だけで解決できるようになるのだと思います。今はいろいろと方法を迷われ
ている時期なんだと思います。

ファイルメーカーに限らず、CGI作成のほとんどはHTMLの作成です。どういう
結果にするのかをはじめに作っておかなければ、良いCGI処理は書けません。

新年早々、愚痴になってしまいますが、そういうことをお客さんにはなかなか分かってもらえずに、「まずは画面だけで良いから作ってきてよ」なんて
言われちゃうと、ちょっとがっかりだったりして・・・。

というわけで、本年もいろいろとご迷惑をおかけすると思いますが、よろし
くお願いいたします。