2012-03-03 24 views
0

AJAX経由でロードされる動的なギャラリーを構築しようとしています。foreachループを使った動的PHPリスト

各ギャラリーは、画像の異なる量を持っているので、私は...、絵があるとして、それはできるだけ多くlist itemsulを構築するために取得するには、このような何かしようとしている:私は

<ul id="foo"> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/foo/001.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/foo/002.jpg></a></li> 
</ul> 
<div class="description">FOO TITLE/DESCRIPTION</div> 

<ul id="bar"> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/001.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/002.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/003.jpg></a></li> 
</ul> 
<div class="description">BAR TITLE/DESCRIPTION</div> 

を私が構築した関数にforeachで組み込むためにPHPに慣れていません。どんな助け?ここに私がこれまで持っていたものがあります(私が持っている配列は一時的な解決策であることに注意してください...プロジェクトには配列にリストされている4個より少ない/多い数があれば動作しません):

<?php function generateProject($projTitle,$projDesc) { 

$proj = $_GET['proj']; 

echo '<ul id="'.$proj.'">'; 

$array = array('001','002','003','004'); 

    foreach($array as $picture) 
    { 
     echo '<li><a href="javascript:void(0);"><img src="../images/portfolio/'.$proj.'/'.$picture.'.jpg"'; 
     echo '</li>'; 
    } 

echo '</ul>'; 

echo '<div class="description">'.$projTitle.' <span class="slash">&nbsp;/&nbsp;</span>'.$projDesc.'</div>'; 

} ?> 


<?php 
    generateProject(
    'deadAWESOME', 
    'Gargoyles. Dusty leather tomes. Hidden rooms. Coffee.'); 
?> 
+0

いくつの画像があるか知っていますか?それとも、ファイルシステム内でのみ変更されますか? – Ryan

+0

minitechに似た質問 - どうやってリストを入手していますか?あなたの$配列行は、イメージの数を決定する方法に置き換えればよい。あなたの質問のポイントが分からない限り? – Morgon

+0

イメージの量はプロジェクトによって異なり、 'generateProject'で呼び出されます。私はどのようにリストを取得しているのか分かりません。もし私がちょうど "6"を置くことができ、それが自動的に001,002、... 006を引っ張るなら、それはうまくいくでしょう。彼らが再発してそれを見つけたら、それも働く。 – steve

答えて

2

まず、$projのパスを$_GETから直接取得するのは安全ではありません。 URLに配置する前に、受け入れ可能な値の配列または正規表現に照らしてチェックする必要があります。この場合、Webサーバーのドキュメントルートが正しく設定されている限り、あまり大きなダメージはありません。しかし、あなたの道を守ることは良い習慣です。

ファイルシステムからすべてのイメージを取得するには、readdir()を使用できます。

// Use a glob to get all the images *.jpg 
$imgs = glob("/filesystem/path/to/images/portfolio/$proj/*.jpg"); 

foreach ($imgs as $picture) { 
    // Get only the base filename 
    $picture = basename($picture); 

    // Then build the <li> 
    echo '<li><a href="javascript:void(0);"><img src="../images/portfolio/'.$proj.'/'.$picture; 
    echo '</li>'; 
} 
+0

'preg_match'は動作しません。それをアンカーする必要があります。それは単に 'ctype_alpha'を使うだけです。 – Ryan

+0

はい、それはエラーを返しました...どうすれば彼が与えたコンテキストでctype_alphaを使用しますか? – steve

+0

@minitechうん、固定。とにかく正規表現のホワイトリストを好むでしょう... –