プロジェクトの情報を複数のオーバーレイで表示するために、Jquery ツールのオーバーレイをサイトに配置しました。これはかなり問題なく動作しますが、コードを「自動化」して新しいプロジェクトを読み取り、オーバーレイにロードしようとしています。何が起こるかは問題ないように見えますが、どのプロジェクトをクリックしても、オーバーレイは常に最初のプロジェクトのコンテンツをロードします...
ここまで来るのに、たくさんのグーグル検索とコピペをしました。私は (まだ) あまりプログラマーではありません。コードが皆さんを怖がらせないことを願っています.. ;-)
とにかく、ここにリンクがあります: http://www.wgwd.nl/test
[プロジェクト] をクリックすると、通常の div が開き、見つかったすべてのプロジェクト (今のところ 2 つ) が読み込まれます。いずれかをクリックすると、そのコンテンツが 3 つのオーバーレイで開きます。前述のように、残念ながら、クリックしたプロジェクトに関係なく、常に同じコンテンツが読み込まれます。
JScript に一意の関数名 (プロジェクトのファイル名から php で生成) を割り当てようとしましたが、うまくいかないようです。
何か案は?ここに私のコードがあります:
<?
//reads projectfolder and distills
//a basename out of the project description.txt
$textfiles = glob('content/projects/*.txt', GLOB_BRACE);
foreach ($textfiles as $textfile) { ?>
<div id="details"> <?
$pad = pathinfo ($textfile);
$base_name = basename($textfile,'.'.$pad['extension']);
// the link that opens the overlays. Don't think the "id" tag is nescessary
echo '<a id="'.$base_name.'" href="#" onclick="'.$base_name.'()"><img src="'.$base_name.'/main.jpg"/></a>' ?>
<!-- defines overlay, hidden by default -->
<div id="dragwindow1" class="overlay ol1">
<a class="close"></a>
<?
include ('content/projects/'.$base_name.'/content.txt');
?>
</div>
</div>
<?
// the description of each project
include ($textfile);
?>
<script>
// within the foreach open all overlays with function name $base_name
var <?=$base_name?> = function () {
$("a[rel]").each(function() {
$(this).overlay().load();
});
}
</script>
<hr />
<? } //end foreach ?>
</div>
<!-- somehow, without defining these links, the whole 'open all overlay' thing doesn't work -->
<a rel="div.overlay:eq(0)" type="button" style="display: none">first</an>
<a rel="div.overlay:eq(1)" type="button" style="display: none">second</a>
<a rel="div.overlay:eq(2)" type="button" style="display: none">third</a>
<script type="text/javascript">
$(function projects() {
// positions for each overlay
var positions = [
[120, '15%'], //uppper left, #1
[70, '60%'], // lower left, #2
['60%', '40%'], // lower right, #3
];
// setup triggers
$("a[rel]").each(function(i) {
$(this).overlay({
// common configuration for each overlay
oneInstance: false,
// setup custom finish position
top: positions[i][0],
left: positions[i][1],
});
});
});
</script>
事前にthx!
編集:コードを編集して、無関係なものをすべて省略しました。問題は残っています: Javascript は foreach ループの最初の呼び出しの内容のみを返します。PHPのループごとにjavascriptの複数のインスタンスを生成する方法はありますか?