Amigoデータベース、スクリプト集

『With you あなたもHPを持とう』AmigoデータベースのQ&Aがあります
全般・基本スクリプト 管理認証・環境設定 ユーザ登録・認証(編集) データ登録・認証(編集) データ一件分のデザイン
(db-html.cgi)
検索、ショートカット
検索結果(一覧) データ詳細(data-part) フォームメール db-fm.cgi メール文章設定法 db-mail.cgi トップ画面など表紙 注意事項、その他

データ一件分のデザイン
(db-html.cgi)
  ◎設置手順7(任意) 審査関連の設定
db-html.cgiをテキストエディタで開き
ユーザー(データ)審査一覧部分を設定します。
これは審査待ちデータ一覧ページでの1件分のデザインとなります。
ユーザー審査は$VU[$REC{UJudge}{データ種類}]
データ審査は$VD[$REC{DJudge}{データ種類}]
で任意のデータを表示できます。
審査に必要なデータを設定して下さい。

次にuser(data)-judge.htmlを編集します。
こちらの設定法はuser-edit.html等と同様となります。

またプレビューを使用する場合は
user(data)-judge-preview.htmlを編集します。
こちらの設定法はuser-regist-preview.html等と同様となります。


  ◎設置手順9 データ1件分のデザインの作成
設定はdb-html.cgiを編集して行います。

print <<EOM;〜EOMの間の部分に設定します。

このデザインは何種類でも用意できます。
デザインを増やす場合は
sub Html_1{ print <<EOM; 行から
} 行までをコピーして増やします。
次にsub Html_1の1を次の数値(ここでは2)に変更します。

登録データ(data.cgi)を表示するには
$VD[$REC{Data}{Comment}] のように
$VD[$REC{Data}{データ種類}] の形式で設定します。

URLエンコードされたデータ(data.cgi)を表示するには
$RD[$REC{Data}{データ種類}] の形式で設定します。

ユーザーデータ(user.cgi)を表示するには
$VU[$REC{User}{Address}] のように
$VU[$REC{User}{データ種類}] の形式で設定します。

URLエンコードされたユーザーデータ(user.cgi)を表示するには
$RU[$REC{User}{データ種類}] の形式で設定します。

登録日時を表示するには$RDate
更新日時を表示するには$NDateとします。

テーブル色を交互に違う色にする設定をしている場合
$TrColorという記述で色を呼び出します。
(例) <TR bgcolor="$TrColor">

マーク画像を表示する為には
NEWマークは$NewMarkGif
UPマークは$UpMarkGif
マーク1は$Mark1Gif (データファイルベース検索時のみ)
マーク2は$Mark2Gif (データファイルベース検索時のみ) とします。

データ詳細へのリンクを表示する為には
<A href="$BaseDir/$MainCGI?cmd=dp&
Tfile=$FORM{Tfile}&UserNum=$FORM{UserNum}&
Pass=$FORM{Pass}&AdminPass=$FORM{AdminPass}&
num=*****">とします。
*****部分は
ユーザーファイルベースの場合 $VU[$REC{User}{UserNum}]
データファイルベースの場合 $VD[$REC{Data}{DataNum}] と記述します。

フォームメールへのリンクを表示するには
<A href="$BaseDir/$MainCGI?cmd=
fm&To=*****">とします。
*****部分は
ユーザーファイルベースの場合 $VU[$REC{User}{UserNum}]
データファイルベースの場合 $VD[$REC{Data}{UserNum}] と記述します。

■データファイルベース検索時のみ

データファイルベース検索時に
ユーザー登録日時を表示する場合は$URDate
更新日時を表示する場合は$UNDateとします。

カウント数を上げるリンクを表示する為には
<A href="$BaseDir/$MainCGI?cmd=j&DataNum=$VD[$REC{Data}{DataNum}]&UserNum=$FORM{UserNum}&Pass=$FORM{Pass}&AdminPass=$FORM{AdminPass}">とします。

データ編集へのリンクを表示する為には
<A href="$BaseDir/$MainCGI?cmd=de&DataNum=$VD[$REC{Data}{DataNum}]">とします。

投票用のリンクを表示するには
<A href="$BaseDir/$MainCGI?cmd=v&DataNum=$VD[$REC{Data}{DataNum}]">とします。
※Cookieにパスが保存されていると自動的に投票となり
無ければパス入力画面へ飛びます。


  ヘッダ(上部)の共通表示部 の複数化
db-html.cgiの「各ページ上部」という部分を編集すればヘッダ(上部)の共通表示部を変更出来ます。
これとは別にヘッダ等をdb-html.cgiに設定する事も出来ます(いくつでも)

例えば「各ページ上部」部分をまるごとコピーして
sub_Html_Head{ を sub _Html_Head2{ のように
sub_Html_*****の*****部分を適当な値に変更します。

そして各テンプレートファイルに
<!---HTML--->
&_Html_Head2;
print <<"<!---HTML--->";
のように記述する事で設定されたHTMLが記述した部分に表示されます。
(Head2の部分は*****の値に合わせる)


  上部の編集・リンク
$CNF{Url}{Home} ホーム
$CNF{Url}{index} 会員検索
$CNF{Url}{Search} 会員検索(会員専用)
$BaseDir/$MainCGI?cmd=ur 会員登録
$BaseDir/$MainCGI?cmd=uc 会員情報・編集
$BaseDir/$MainCGI?cmd=dr データ登録
$BaseDir/$MainCGI?cmd=de データ編集
$BaseDir/$MainCGI?cmd=ac 管理


  画像のサイズを一定にしたい new!
<IMG src="*****" width="100" height="100">
のようにwidthとheightの部分を任意の値に固定すれば
サイズを一定に出来るかと思います。


検索、ショートカット

  ◎設置手順8 検索フォームの作成
検索フォームだけは他のページと違い通常のHTMLファイルとなります。
つまり自由なページにフォームをいくつでも設置できます。
(同梱のsample.htmlを参考にして下さい)

<FORM action="database.cgi" method="POST">
のdatabase.cgiへのパスを設置場所に応じて変更します。

<INPUT type="hidden" name="Tfile" value="">
これはユーザー,データどちらのファイルをベースとした検索かを指定します。
データファイルベースの場合は上記のまま
ユーザーファイルベースの場合はvalue="User"とします。

<INPUT type="hidden" name="HTML" value="">
これはAmigoDatabaseでは検索結果ページを何パターンでも用意できる為
この設定でテンプレートファイルを指定します。
※***.htmlのようにファイル名のみ設定します。
※この検索結果用テンプレートファイルは
template/resultディレクトリ内にある必要があります。
※これによりカウント数の多い順(人気ランキング)のページや
登録順(新着情報)のページや最近更新されたデータのページ等
様々なページを表示できます。
※value=""の場合はdefault.htmlが使用されます。

<INPUT type="hidden" name="DataHtml" value="">
これはデータ1件分のデザインに
どのタイプを使用するかを指定するものです。
デザインの編集は(◎データ1件分デザイン設定法)を参照
※value=Html_1のように設定します。
※value=""の場合はHtml_Defaultが使用されます。

<INPUT type="hidden" name="TrColor" value="#ffffff,#e8ffe8">
これは検索結果一覧ページの各データのテーブル色を
交互に違う色を利用したい場合に設定します。
2種類の色を,で区切って設定します。

検索用のフォーム部品を設定します。
<INPUT type="***" name="S_1_Num_Count">のように
<INPUT type="***" name="S_検索条件番号_データタイプ_検索対照データ種類">
の形式で設定します。
※検索条件番号は任意の数字で構いませんが同じ数字を使用しないよう注意して下さい。
※ユーザーファイルを対象とする検索条件の場合は
<INPUT type="***" name="S_検索条件番号_データタイプ_検索対照データ種類_U">とします。
※データタイプは「Num」か「Key」でNumは数値でKeyは文字列となります。

また検索対照データ種類には「Multi」と指定する事もできます。
Multiとすると<SELECT multiple name="Target_検索条件番号">のようにして
他の部品から検索対照データ種類を複数選択させる事ができます。
HIDDENで固定する場合は
<INPUT type="hidden" name="Target_検索条件番号" value="検索対照データ種類(,で区切る)">
と記述します。

データタイプがNumの場合のみ1つの検索条件で数値範囲検索が可能です。
<INPUT type="*****" name="S_検索条件番号_Num_検索対照データ種類" value="1〜100">
のように指定します。
以下のみの場合は value="*〜100" のように指定します。
以上のみの場合は value="100〜*" のように指定します。

各検索条件毎に検索タイプを指定します。
<INPUT type="hidden" name="Type_1" value="Normal-or">のように
<INPUT type="hidden" name="Type_検索条件番号" value="[一致タイプ]-[and,or指定]">
の形式で設定します。

一致タイプはデータタイプがNumの場合は
More,Equal,Lessの3種類が指定できます。
More=以上(入力された数値以上の時に一致)
Equal=完全一致(入力された数値と完全一致の時に一致)
Less=以下(入力された数値以下の時に一致)

データタイプがKeyの場合はNormal,Equal,Head,Footが指定できます。
Normal=キーワードを含む時に一致
Equal=キーワードと完全一致の時に一致
Head=キーワードを頭文字に含む時に一致
Foot=キーワードを文末に含む時に一致

and,or指定は
and=全てを含む(全てに一致する)
or=いずれかを含む(いずれかに一致する)
となります。

検索条件毎に一致か不一致(NOT)かを指定します。
その検索条件を含まない時にHITさせたい場合は
<INPUT type="*****" name="Not_1" value="1"> のように
<INPUT type="*****" name="Not_検索条件番号" value="1"> とします。
※通常の一致検索の場合はこの設定自体必要ありません。

例外的なものとしてデータタイプDateというものがあります。
このDateの場合は検索対照データ種類にはRtimeかUpTimeしか指定できません。
※Rtimeは登録日時,UpTimeは更新日時です。
※検索タイプは指定できません。
※Dateの場合自動的に(入力された数値)時間前のデータを検索します。
つまり検索対照データ種類がRtimeの場合
5と入力されると5時間以内に登録されたデータに一致します。

オプションとしてチェックボックス複数選択によるキーワード検索が出来ます。
その場合<INPUT type="hidden" name="Option_検索条件番号" value="checkbox"> と記述します。
※各チェックボックス側には
<INPUT type="checkbox" name="S_検索条件番号_Key_検索対照データ" value="キーワード">
という形式で必要なキーワード分記述します。
※チェックボックス全体で1つの検索条件になるので
全て同じ検索条件番号と検索対象データを指定します。

検索結果を任意のデータの数値順,文字列順にソートできます(降順,昇順)
ソート条件を指定するには
<SELECT name="Sort"><OPTION value="Num_Count">のように
<OPTION value="ソートタイプ_ソート対象データ種類">の形式で設定します。
ソートタイプにはNum,Wordが指定できます。
※Numは数値順,Wordは文字列順です。
※登録日時でソートする場合はNum_Rtime
更新日時の場合はNum_UpTimeとなります。
※ユーザーファイルのデータでソートする場合は
<OPTION value="ソートタイプ_ソート対象データ種類_U">とします。
※<OPTION value="Point">とすると通常ソートを行います。
通常ソートはマークデータとカウント数によるソートです。


  ◎ショートカット検索について
ショートカット検索はテキストリンクから
1クリックで検索が出来る機能です。

まず検索フォームで通常通り検索条件を指定して
管理用パスワードとショートカット名(半角英数)を入力して
検索ボタンをクリックしショートカットを登録します。

既に登録済みのショートカットを編集したい場合は
上書きのチェックボックスをチェックして下さい。

ショートカットを削除したい場合は
削除のチェックボックスをチェックして下さい。

後はdatabase.cgi?cmd=s&sc=ショートカット名
という形式のリンクを好きなページに記述すれば完成です。

[関連検索]
検索結果画面で「ショートカット+特定のデータ項目を利用した検索条件」
で関連検索を行う事が出来ます。
database.cgi?cmd=s&sc=ショートカット名&加える検索条件
という形式で記述します。(db-html.cgiや詳細テンプレートに)

加える検索条件のところには
S_*_Key_*****=特定のデータ項目の値&Type_*=Normal-or のように
検索条件(name)=キーワード(value)&検索タイプ指定 という形式で記述します。
※通常の検索フォームの各部品のnameとvalue(入力される値)と考えてください。
※特定のデータ項目の値の所はURLエンコードされた方のデータ($RU,$RD)を使用して下さい。

例:<A href="database.cgi?cmd=s&sc=sample&
S_78_Num_UserNum=$RU[$REC{User}{UserNum}]&Type_78=Equal-or">$VU[$REC{User}{Name}]</A>

上記の例は登録ユーザーの名前に
そのユーザーが登録した全データを検索するリンクを貼ったものです。
この他にもアイディア次第で様々な利用法があります。



  ◎高精度検索について
検索時に高精度検索をチェックすると
文字コードの誤認による誤ったHITが無くなり
より精度の高い検索が可能となります。
※高精度検索でなくてもほぼ正確に検索されますし
HITすべきデータにHITしないという事はありませんので
速度を重視する場合は高精度の必要は無いと思います。


  何円以上〜何円以下の検索をするには
<INPUT type="text" name="S_1_Num_*****">円〜<INPUT type="text" name="S_2_Num_*****">円まで
<INPUT type="hidden" name="Type_1" value="More-or">
<INPUT type="hidden" name="Type_2" value="Less-or">


  複数SELECTメニューでの検索
複数個SELECTメニュー1メニューだけ選んで、それにあった情報だけピックアップしたい

<option selected>検索項目</option>
<OPTION value="指定しない" %2{Select_tn_1}>指定しない</OPTION>となっていますが、これだと検索項目を指定しない(検索項目のまま動かさない又は指定しないを選択)場合
データベース側には"検索項目"又は"指定しない"というキーワードを検索しなさいと命令する事になります。

検索条件として認識させない場合は未入力(空文字)にする必要があります。
※SELECTメニューのOPTIONにvalueを指定しないと
<OPTION>*****</OPTION>の*****部分がデータベースに送られます。
※"検索項目"又は"指定しない"という文字列をデータに記録しているなら別
つまり<option value="" selected>検索項目</option>
<OPTION value="" %2{Select_tn_1}>指定しない</OPTION>とする必要があります。
こうすれば検索項目から動かさない又は指定しないを選択すると
データベースには空文字が送られる為データベースはこれを検索条件として認識しません。


  検索結果を名前順に表示するに...
<SELECT name="Sort">
<OPTION value="" selected>ソートしない</OPTION>
<OPTION value="Point">通常ソート</OPTION>
<OPTION value="Num_Count">カウント数</OPTION>
<OPTION value="Word_Name_U">ユーザー名順</OPTION>
<OPTION value="Num_Rtime">登録日時順</OPTION>
<OPTION value="Num_UpTime">更新日時順</OPTION>
<OPTION value="Word_Name">名前順</OPTION>
</SELECT>
のようにすればよいかと思います。
※Word_NameのName部分は「名前」のデータ種類となります。


  季節によって変動する料金を検索するには?
季節によって変動する料金を登録するため、1つのデータに有効期間を設定し
(データA)開始日-例:2002/10/01
(データB)終了日-例:2002/10/30
のように設定しました。

この様に設定したデータに検索をかけて
(検索条件A)開始日-例:2002/10/15
(検索条件B)終了日-例:2002/10/18
のような条件で検索を掛けることは可能なのでしょうか。

2002/10/30等の文字列を期間として認識させる事は出来ませんので期間の範囲検索等をしたい場合は、例えば表示用とは別に、
20021015等のように、数値として日付を登録しておく必要があります。後はこれを数値検索で検索させれば日付の範囲検索等が可能となります。


  検索する物ごとに違う詳細ページを出すには?
検索フォームに&dp=$VU[$REC{USER}{rank}].html
のようにすれば登録データが"A"ならば"A.html"にジャンプします。

db-html.cgiの記述は、
<A href="$BaseDir/$MainCGI?cmd=dp&num=$VD[$REC{Data}{Rank}].html&Tfile=$FORM{Tfile}&UserNum=$FORM{UserNum}&Pass=$FORM{Pass}&AdminPass=$FORM{AdminPass}">$VD[$REC{Data}{BookName}]</A>


  セレクトメニュー・都道府県
登録時に都道府県をセレクトメニューで登録したとして
検索フォームの検索条件に都道府県を加えたいという事でしょうか?
その場合
<SELECT name="S_1_Key_Address">
<OPTION value="北海道">北海道</OPTION>...</SELECT>
<INPUT type="hidden" name="Type_1" value="and">
のようにすればOKです。
※検索条件番号(1)は自由に変えてください。
※Addressというのは都道府県のデータ種類です。


  SELECTメニューに関して
<SELECT name="S_1_Key_Address_U">
<OPTION value="青森県,岩手県,宮城県,秋田県,山形県,福島県">東北</OPTION>
</SELECT>
----------------------------------------
Type指定の記述が必要です。
この場合条件としてはor検索になります。


  ショートカットキーについて
検索画面で
管理者パスワード****を記載し、ショートカットには例えば『all』と記載して、検索をすると、ショートカットキーが作成されます。
あとは、database.cgi?cmd=s&sc=ショートカット名、すなわち、database.cgi?cmd=s&sc=all
というリンクを貼って頂く。


  リンク(<A>)を使って、検索をするには?
フォーム(<INPUT等>)を使わずに、リンク(<A>)、例えば、通常キーワード検索で『占い』と入力して検索する結果を、リンクで同じ結果を得ようとすると、「〜/database.cgi」の後ろに何か追加するとできるのでしょうか?

「ショートカット検索機能」を利用する事で可能です。


  複数のデータ種類(項目)を対象とした検索 new!
1つの検索条件に対しMulti指定機能を使用します。

例えば検索条件1のテキストボックスで
BangoとBango2にから検索をしたい場合は以下のようにします。

また下記ではHIDDENで対象を固定していますが
もちろんセレクトメニューやチェックボックスで
検索者自身に対象を選ばせる事も可能です。

<INPUT size="17" type="text" name="S_1_Key_Multi">
<INPUT type="hidden" name="Target_1" value="Bango,Bango2">
<INPUT type="hidden" name="Type_1" value="Normal-or">


  Multiを使用した検索例 new!
検索方法がキーワード検索ではなく、項目1項目2項目3項目4とあって、項目1項目2がプルダウン項目3項目4がチェックボックスとあった場合

まずMulti指定はキーワード検索に限ったものではありません。
Num検索時にも利用可能です。

その場合は
<SELECT name=S_1_Num_Multi>(略)</SELECT>
<SELECT name="Target_1">
<OPTION value="Price">Priceを対象に検索
<OPTION value="Price2">Price2を対象に検索
</SELECT>

<SELECT name=S_2_Num_Multi>(略)</SELECT>
<SELECT name="Target_2">
<OPTION value="Price">Priceを対象に検索
<OPTION value="Price2">Price2を対象に検索
</SELECT>

※上記はセレクトメニューで対象項目を選択させていますが
チェックボックス等でも可能です。


  登録してある全ユーザーのリストを表示させたい new!
どのような場合使うかと言いますと、
1.全ユーザーを一覧の画面で見られる
2.全ユーザーのリストから、直接クリックしてそのユーザー登録情報の変更
3.複数のユーザーを一挙に削除
と言うのを想定しています。
検索ホームのところで、
<INPUT type="hidden" name="Tfile" value="User">
とする



- Link Collection -