トップページ⇒php
930コメント657KB

コンテンツとデザインの分離

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/27(日) 17:59ID:6pK8snWA
ASPでもPHPでもPerlでもJavaでも形こそ違えど結局は可変部を吐き出すための
<%〜%>やらprint文の嵐になってしまう。

「HTMLはHTML、プログラムはプログラムと完全に分離する方法はないものか。」
を話し合うスレッドです。
0002名無しさん@お腹いっぱい。2001/05/27(日) 18:46ID:PLEgfcrY
外部htmlファイル読み込みで片付くものと思われ。
0003名無しさん@お腹いっぱい。2001/05/27(日) 19:07ID:rsikQ/Ns
<%〜〜%>でいいじゃん
0004名無しさん@お腹いっぱい。2001/05/28(月) 06:25ID:QyrSaBKA
テンプレートをつくって、置換するのはどうよ。

<html>
<head>
<title>%%%%TITLE%%%%</title>
</head>

こんな感じのやつで。あとで%%%%TITLE%%%%を変数と置換。
>>2がいうとおり、このテンプレートを外部から読むか、内部に入れるかは自由。
0005名無しさん@お腹いっぱい。2001/05/28(月) 11:45ID:/loPusng
XML と XSL で分ければ?
0006名無しさん@お腹いっぱい。2001/05/28(月) 13:11ID:yQtftbTo
おいらは内部派だからprintの嵐大好きだよ
0007名無しさん@お腹いっぱい。2001/05/28(月) 13:19ID:XZfJcTNc
PerlのHTML::Templateは?
あれ好きなんだけど。
0008名無しさん@お腹いっぱい。2001/05/28(月) 14:39ID:9UeTzpnc
PerlのText::Templateでやってた...
HTML::Templateの方が便利かな?
試してみよっと
000912001/05/28(月) 18:15ID:ucUrq.A6
なるほど、PerlにはHTML::Templateなるものがあるんですね。
これは便利そうです。
#でも、最近はPerl使ってないんだよねぇ。

Javaあたりだとどんな方法があるでしょうか?
JSP + Beanでゴニョゴニョ。なんてまどろっこしい方法なんて誰も使いませんよね(^^;

自分はXMLCに注目しているのですが、HTMLの操作をすべてDOMで行わなければ
ならなかったりで、今ひとつ食指が動きません。
001012001/05/28(月) 19:17ID:ucUrq.A6
あ。PHPだとこんなのあるらしいですよ。

PHP4テンプレートクラスライブラリ
ttp://zato.nu/tmpl/

これもタグ置換型ですね。
0011名無しさん@お腹いっぱい。2001/05/29(火) 03:46ID:???
HTML::Templateって、それ自体がなんか言語っぽくなってて、
なんか新しい言語を覚えなきゃいけない風でやなんだけど、実際どう?
友人が使ってるのをちょっと見ただけだからよくわからんが。
0012名無しさん@お腹いっぱい。2001/05/29(火) 16:32ID:pjNjykSQ
JSP でコードと HTML がごちゃごちゃしてきたら拡張タグライブラリ
を作る。

<oresama:valueOf name="foo" />

みたいなの。JSP だと結構うまいこと分離できるよ。多少の知識は
いるけどね。
0013名無しさん@お腹いっぱい。2001/05/29(火) 18:53ID:oi4kyUtI
>>11
テンプレートのタグ?それともメソッドの使い方?
どっちにしてもそれほど難しくないよ。
0014名無しさん@お腹いっぱい。2001/05/29(火) 19:01ID:99dLOuS2
HTML::Template
http://search.cpan.org/doc/SAMTREGAR/HTML-Template-2.2/Template.pm
0015名無しさん@お腹いっぱい。2001/05/30(水) 02:43ID:n7P1SKLk
PerlのHTML::Templateは、コメントタグ形式でも表記できるのが
面白いと思った。
<td>名前</td><td><TMPL_VAR NAME=name></td>は
<td>名前</td><td><!-- TMPL_VAR NAME=name --></td>でもオッケー
0016Pマン2001/05/30(水) 03:55ID:owRJ.xHA
class HTMLClass {

 var $htmldata ;

 function HTMLClass( $htmlfile ) {
  $htmldata = file( $htmlfile ) ;
  $this->htmldata = "" ;
  for( $ii=0; $ii<count( $htmldata ); $ii++ ) {
   $this->htmldata .= $htmldata[$ii] ;
  }
 }

 function output( &$data ) {
  $str = $this->htmldata ;
  reset( $data ) ;
  while( list( $key, $val ) = each( $data ) ) {
   $str = ereg_replace( "@" . $key . "@", $val, $str ) ;
  }
  echo $str ;
 }
}

サンプルクラス。

$tmp = new HTMLClass( "a.html" ) ;
$repdat["data"] = "hogehoge" ;
$tmp->output( $repdat ) ;

@data@ を hogehoge に置換。もっと短く出来ると思うけど
適当にこんな感じなのはいかがでしょう?
0017名無しさん@お腹いっぱい。2001/05/30(水) 22:36ID:aom7mYQI
Dreamweaverのテンプレートは?
編集可能領域だけをPerlから変更するようにして使っているよ。
0018152001/05/31(木) 09:31ID:DL2pokUM
>>17
それもいいね。
ファイルを1行ずつ読んで、Dreamweaverのコメントにマッチしたら
置換する、というやり方でしょ?

俺はPerLのHTML::TemplateでつかうHTMLファイルを
.tmplにして、それをDreamweaverで編集してた。
モジュールのインストールがいらないから、そっちの方が良いかも。

ただ、疑問なのは、例えばテンプレート内にあるフォームの中に
データを埋め込むとき。
<input type="text" name="sample" value="ここに埋め込む">

こんな時は、ソース編集でvalueにDreamweaver形式のコメントを
打つの?
0019ちょこら2001/05/31(木) 16:26ID:zuNYGVLg
>>17
お、俺もそれでやってる。
あと、>>18みたいなケースのときはコメントを置換するようにしてる。
<!-- hoge -->
を$hogeに置換すんの。
自分でライブラリ作ったから同じスクリプトを
テンプレートかえるだけで使いまわせていいよ。
0020172001/05/31(木) 17:10ID:iOzcc6dM
テンプレートのコメントは利用せず、編集領域内に
{$hogehoge;}と入れて、これを置換している。

あまりCGIが得意じゃないんで、恥ずかしいけど
↓こんな感じ。(藁

$postdata{ "hoge" } = $line[ 1 ];
$postdata{ "hoge2" } = $line[ 2 ];

print insertTemplate( './main2.htm', %postdata );

sub insertTemplate
{
local( $filename, %form ) = @_;
local( @lines, $line );

open( FILE, "< $filename" );
@lines = <FILE>;
close( FILE );

$line = join( '', @lines );

$line =~ s/\{\$(.*?)\}/$form{ $1 }/gs;
$line;
}
0021名無しさん@お腹いっぱい。2001/06/15(金) 12:53ID:erdVYa/Y
とりあえず、これ読んどけ
http://jakarta.apache.org/velocity/ymtd/ymtd.html
0022名無しさん@お腹いっぱい。2001/06/15(金) 15:11ID:6nOh67xE
Perl信者はこうじゃなくちゃ!

sub template_expand{
    my($filename) = @_;
    my($text, $trans);
    local $/;
    local *IN;
    local *echo = sub { $trans .= join "", @_; };

    open IN, "< $filename" or return;
    $text = <IN>;

    $text =~ s{<\?perl\s+(.*?)\s*\?>}{ eval($1);$trans }egsm;
    close IN;
    return $text;
}
0023名無しさん2001/06/21(木) 18:42ID:fZd90uYU
本命はCocoonでしょ、やっぱり。
0024名無しさん@お腹いっぱい。2001/06/21(木) 18:51ID:???
0025sage2001/06/22(金) 16:25ID:FGxLT2Ws
FastTemplate使え。Perl用とPHP用がある。
0026252001/06/22(金) 17:03ID:???
sage失敗ごめんなさい。↓PHP版の配布サイト
http://www.thewebmasters.net/php/
0027名無しさん@お腹いっぱい。2001/06/22(金) 19:22ID:???
XSLTでマルチクライアントなんてほんとにできるんですか?
0028名無しさん@お腹いっぱい。2001/06/22(金) 22:06ID:QfivNl3k
このスレッド名、妙な感じがするのは私だけかな〜。
デザインとロジックの分離じゃなくて?
0029名無しさん@お腹いっぱい。2001/06/22(金) 22:36ID:???
>このスレッド名、妙な感じがする

ホントだ(w
0030名無しさん@お腹いっぱい。2001/06/22(金) 22:51ID:NESmv9PY
>>4の

<html>
<head>
<title>%%%%TITLE%%%%</title>
</head>

の形のだと、HTMLしかわかんない俺とかでもデザインのカスタマイズがしやすい。
0031名無しさん@お腹いっぱい。2001/06/29(金) 15:03ID:???
「プロフェッショナルPHPプログラミング」にうまい使い方が載っていたのでFastTemplate使ってみた。
php4だと配布サイトに載っているパッチをあてないと上手く動かなかったけど。

テンプレートを入れ子にできるので部品化・使い回しできるのがイイ。
003212001/06/29(金) 15:51ID:8ZDmK9dU
>>31
Smartyもいいですよ。
>>10であげたテンプレートクラスが霞んでしまうほどの出来です。
(作者さん失礼…)

http://www.phpinsider.com/php/code/Smarty/
0033名無しさん@お腹いっぱい。2001/07/02(月) 01:54ID:X8cwHu0A
http://www.linkclub.or.jp/~sawamur/perl/Perltag.html
http://www.linkclub.or.jp/~sawamur/perl/Perltag.pm

この「Perltag」はhtmlファイルにサブルーチンや
変数を直接書くことができます。
「Perltag.pm」。これこそがデザインとロジックの完璧な分離だと
思いますが皆さんはどう思いますか?
※ちなみに作者ではないです。
0034名無しさん@お腹いっぱい。2001/07/02(月) 02:08ID:7NP//cxc
> htmlファイルにサブルーチンやhtmlファイルにサブルーチンや

分離?逆じゃない?
0035名無しさん@お腹いっぱい。2001/07/02(月) 02:17ID:???
eperlの方がマシ。
eperl使うならPHPとかJSPで略。
0036名無しさん@お腹いっぱい。2001/07/02(月) 02:22ID:GjfjvDNA
>>35
むしろeRubyの方が(以下略
0037名無しさん@お腹いっぱい。2001/07/02(月) 22:55ID:1TJMjc3E
>>32
Smarty って仕様でかすぎない? ってあんまり見てないんだけど。
最初、自分で作ろうと思って、いろいろ他のを見たけど
よくよく考えたら、PHP でこれをすると、HTML 内に処理を書けるって
いう言語自体の優位性が無くなってしまうね。
003812001/07/03(火) 17:00ID:0lIoca6w
>>37
Smartyではドキュメントにも書いてある通り、絶対にHTML内には
<?PHPタグは書かないことを前提に設計されてますので、Smartyの
設計者たちにとってはHTML内に処理を書くことのメリットよりも
デメリットの方が大きいと考えたのでしょう。

Smartyでは、HTMLテンプレートの解釈にかかるオーバーヘッドを
減らす為に、HTMLテンプレートをPHPにコンパイル(?)してから実行
しているのですが、面白い仕様ですね。(EnhydraのXMLCと同じ)
003912001/07/03(火) 17:05ID:0lIoca6w
でもこのSmarty、なぜか日本語の情報が見事なまでに皆無です。
だーれも使ってないのかな。

それとも、テンプレートという考え方にはそれほど需要がない?
0040372001/07/04(水) 01:02ID:???
>>39
職場は Servlet のプロジェクト一色でフレームワークや EJB の
ことはみんなスキルがあるが、PHP や Perl のテンプレートの
ことを話したら、最初、JSP + タグライブラリと同じだという意見も
あったが、基本的にテンプレートはWYSWYG で編集できることを
目的としている点で方向性が違うということを言ったら
目から鱗という人間が多かった。

Java でも Jakarta のサブプロジェクトでテンプレートが
あるにはあるみたいだけど、あまり聞かないね。

需要はあると思うけどなぁ。
0041名無しさん@お腹いっぱい。2001/07/06(金) 18:03ID:???
>>37
Enhydra使えばまったく問題ナシ
004212001/07/06(金) 20:34ID:9bX.xTlk
>>41
Enhydraの目玉であるXMLCですが、DOMってすごく煩雑なんですよね。
思想は理解できるのですが、現実とのギャップが埋め切れて無いような
気がします。DODSも然り。

あと、Javaサーブレットの場合は静的コンテンツの扱いが煮え切らない
部分がありますね。(これは自分が慣れてないせいかも)
0043名無しさん@お腹いっぱい。2001/08/06(月) 01:12ID:of8Q373o
あげておこう。
0044ナナ萌え(゚д゚)ウマー2001/08/07(火) 00:13ID:???
<% 〜 %> にASPを書くんじゃなくて
%> 〜 <% にHTMLを書くと思ったほうが
ソースが綺麗になるよ☆
0045コメント無しさん2001/08/07(火) 15:45ID:???
>>41
@ITの記事に、「デザインとプログラムの分離を果たした開発の例」みたいな
のがあって、実際にそのサイト見てみたら
「凝ったデザイン+ほぼプログラムレス」
「しょぼいデザイン+プログラムたくさん」
っていう感じで、ほんとに分離できてるのか謎だった。
0046名無しさん@お腹いっぱい。2001/08/07(火) 15:47ID:???
ページ中のコードの量にもよると思うが。
っていうか分離してないじゃん。
0047う。2001/08/07(火) 16:01ID:???
46>>44ね。
0048ナナ萌え(゚д゚)ウマー2001/08/08(水) 01:10ID:???
うん。分離は諦めた(藁
DWの吐くASPのコードはえぐい。
特にDB操作関連、逝ってよし。
0049名無しさん@お腹いっぱい。2001/08/08(水) 23:50ID:svrEP0oc
デザインとプログラムの完全分離、実現したよ。

CGIをCで書いて、ちょっとしたテクで出来た。
うちはデザインハウスだから、ASPとか嫌われるんだよね。
デザイナーが全部創りたがるから(w
0050名無しさん@お腹いっぱい。2001/08/09(木) 00:15ID:???
>>49
素人さんいらっしゃーい
■ このスレッドは過去ログ倉庫に格納されています