динамический список php с циклом foreach - PullRequest
0 голосов
/ 03 марта 2012

Попытка создать динамическую галерею, загружаемую через AJAX.

Я пытаюсь заставить его построить ul с таким количеством list items, сколько имеется изображений, потому что каждая галерея имеет различное количество изображений ... что-то вроде этого:

<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>

Я недостаточно знаком с PHP, чтобы встроить foreach к функции, которую я построил. Любая помощь? Вот что у меня есть (обратите внимание, что массив, который у меня есть, является временным решением ... он не работает, если в проекте меньше / больше 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.');
?>

1 Ответ

2 голосов
/ 03 марта 2012

Прежде всего, опасно брать путь $proj прямо из $_GET. Вы должны проверить его по массиву допустимых значений или регулярному выражению, прежде чем помещать его в URL-адреса. В этом случае, если корень документа веб-сервера настроен правильно, не будет большого ущерба. Но это хорошая привычка защищать свои пути.

$proj = $_GET['proj'];

// Method 1:  regex
// Test that proj is only lowercase letters...
if (!preg_match("/^[a-z]+$/", $proj)) {
   // Oops, invalid $proj
}

// Or as ctype_alpha()
if (!ctype_alpha($proj)) {
   // invalid $proj
}

// Method 2:  whitelist array
// Array holds the valid possible values for $proj
$valid_proj = array("project1", "barmitzvah", "wedding");
if (!in_array($proj, $valid_proj)) {
  // Oops, invalid project
}

Чтобы получить все изображения из файловой системы, вы можете использовать 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>';
}
...