プロが教える店舗&オフィスのセキュリティ対策術

検索したのですが、うまく当てはまりそうなものが見つからなかったので、質問させてください。
ページAのhtmlソースの一部(tableタグで囲まれた10行程度のソースです)をページBのトップに表示・連動させたいのです。
iframeで引っ張ってこようと思ったのですが、それでは一部だけ表示させることができず、困っています。
なにか、プログラムなど使えば出来るのでしょうか。
素人で説明が分かりづらいと思いますが、助けていただければと思います。
よろしくお願いいたします。

A 回答 (7件)

javascriptですが


私が以前、質問して回答いただいたものです。

sprinkle.jsを使えば良いと思います

参考URL:http://oshiete1.goo.ne.jp/qa3977331.html
    • good
    • 0
    • good
    • 0

#1です。


抜き出すスクリプトをperlで用意して、ページBにそのperlをJavaScriptで呼び出して表示させるのが簡単かと思います。
<script type="text/javascript" src="http://hogehoge.com/nukidasi.cgi">

これならファイルの保存はいりませんし
常に最新のページAの欲しい箇所が抜き出せるかと思います。

最近JavaScriptが人気なのでちょっとした動的なコンテンツに関してはこちらの質問板と平行してJavaScript質問板で質問してもスマートな意見が帰ってくるかもしれませんね。
    • good
    • 0
この回答へのお礼

丁寧にありがとうございます。説明ベタで申し訳ないです;
ちょっと土日で格闘してみようと思っております。
「JavaScript質問板へ~」というアドバイスも感謝です。
また、不明点が出た場合はお助けいただければ嬉しいですが、なんとか自力でがんばってみようと思います。ありがとうございました。

お礼日時:2008/08/09 02:23

> やっぱりそうですよね…。

最終的には「おすすめを別ページにして
> それを更新させる」という方法しかないと思っているのですが、
> 結局担当の方の更新方法を変えるのではなくあくまで今の形態のまま
> タグの挿入程度でなんとかならないかと言われて困っているのです;

なんか、仰っている意味が分からないのですがHTMLのままAを更新すると
Bも自動で更新されるようにしたいということなのでしょうか。
HTMLはただのプレーンテキストなので動的な処理はできません。
共通部分だけ別のファイルとしておいてそれをCGIなどを使用して
読み込み出力させるしかないです。

その部分だけ分割するわけでその部分は今までとまったく同じ方法で
更新できますし今までより容量が減る分、逆に更新も簡単になると
思いますよ。

最終的にはWikiを導入してそのWikiのテンプレート機能とかを使用する
という手もありますけど。
(MediaWikiならそういうことができます)

少なくてもAのファイルを更新したらBのファイルも自動で更新される
なんてことはできません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ちょっと土日で格闘してみようと思っております。
ありがとうございました。

お礼日時:2008/08/09 02:20

> htmlでないとだめと言うか、担当の方がhtmlしか分からない方で、


> その方がページAの「おすすめ」を更新した場合、ページBのTOPにも
> それが反映されるようにしたい…という感じなのです;

その部分だけ、別ファイルにしてopen関数で読み込み、出力させれば
いいだけでは。

sub table {
if(open(FILE, 'ファイル名')) {
print <FILE>;
close FILE;
}
return;
}

問題なのはサーバ側がCGIなどの実行を許可しているかの方ですが。
CGIたって大抵はPerlCGIなのでHTML程度が分かるならそんなに
難しくないと思いますけど。サンプルもネット上調べればたくさん
ありますし。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やっぱりそうですよね…。最終的には「おすすめを別ページにして
それを更新させる」という方法しかないと思っているのですが、
結局担当の方の更新方法を変えるのではなくあくまで今の形態のまま
タグの挿入程度でなんとかならないかと言われて困っているのです;

お礼日時:2008/08/08 15:09

その表示させたい部分というのはHTMLファイルでないといけないの


でしょうか。
全部CGIでいいなら

use strict;

&main();

# メイン
sub main {
my $cgi = &getreq();
print "Content-type: text/html; charset=shift_jis\n\n";
print <<'HTML';
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>テスト</title>
</head>
<body>
HTML
if($cgi->{'mode'} eq 'a') {
print "ページ A<br>";
} elsif($cgi->{'mode'} eq 'b') {
print "ページ B<br>";
} else {
print "その他のページ<br>\n";
}
&table();
print "</body>\n</html>\n";
exit;
}

sub table {
print "<table>\n";
print <<'TABLE' x 10;
<tr>
<td>テーブル</td>
</tr>
TABLE
print "</table>\n";
}

# CGI リクエストの取得
sub getreq {
my $cgi = {};
my $query = '';
$query = $ENV{'QUERY_STRING'};

my @args = split(/&/, $query);
foreach my $i (@args) {
my ($name, $val) = split(/=/, $i);
$val =~ tr/+/ /;
$val =~ s/%([0-9a-f]{2})/pack('C', hex($1))/eig;
$name =~ tr/+/ /;
$name =~ s/%([0-9a-f]{2})/pack('C', hex($1))/eig;
$cgi->{$name} = $val;
}
delete($cgi->{''});

return $cgi;
}

こんな感じで分岐できますけど。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
htmlでないとだめと言うか、担当の方がhtmlしか分からない方で、その方がページAの「おすすめ」を更新した場合、ページBのTOPにもそれが反映されるようにしたい…という感じなのです;
せっかく、書いていただいたのに申し訳ないです;;;

お礼日時:2008/08/08 13:20

perl質問板なのでperlでの回答になります。


やり方は様々ですがiframeなどで引っ張って来れる例を出してみます。

同じサーバーであればopenでAhtmlを開く事ができます。
my$ahtml;
open(INCLUDE,"A.html");
$ahtml=<INCLUDE>;
#正規表現でtableタグ部分のみを取り出す例
$ahtml=~s/.*(<table>.+<\/table>).*/$1/is;
close(INCLUDE);

あとは$ahtmlを適当な名前で保存すればiframeで表示できると思います。

別のサーバーにAのhtmlがある場合はLWP::UserAgentモジュールでhtmlソースを取得し、上記と同じく正規表現で切り出し、ファイル保存します。※ただしLWP::UserAgentモジュールが使えるサーバーに限ります。

もしSSIが使える環境でしたらiframeでなく、SSIでincludeすると楽です。

以上、結論では可能という事になります。
    • good
    • 0
この回答へのお礼

おおお!ありがとうございます!
なるほど、意外と短いソースで出来るものなのですね。すごい。

えぇと、ひとつ気になったのですが、いただいた回答の場合だと、$ahtmlをいちいち保存する形になるのでしょうか?
No.2さんの回答にも書かせていただいたのですが「担当の方がhtmlしか分からない方で、その方がページAの(テーブルタグで囲まれた)「おすすめ」(の部分)を更新した場合、ページBのTOPにもそれが反映されるようにしたい…」という感じなのです; なので、<div id=osusume>で囲まれた部分を抜き出す。というイメージでも良いと思うのです。

perl質問板にしたのは私が「ここかなぁ」と思っただけですので、cgiなどでも大丈夫です; 分かりづらくてすみません。

お礼日時:2008/08/08 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!