Скрыть / показать элементы из строки URL в php - PullRequest
0 голосов
/ 23 ноября 2010

Полный вопрос для начинающих. У меня есть большое количество div (> 80) на странице (page2.php), и я хотел бы открыть page1.php, щелкнуть ссылку, чтобы открыть page2.php и показать только один из этих div в зависимости от какая ссылка была нажата.

У меня есть базовая рабочая версия этого, добавив if if в div. До сих пор я делал это только на 5 из div, и это работает, но это также кажется довольно неэффективным способом выполнения действий.

Страница 1:

 <a href="page2.php?id=r0101">this is a link</a>

Страница 2:

<?php 
$divID = $_GET['id'];
?>

<div id="r0101" <? if($divID == r0101): ?>class="show"<? else: ?>class="hidden"<? endif; ?> >

Затем применяется класс css, чтобы скрыть или показать div. Возможно ли иметь функцию или что-то в верхней части страницы, которая берет идентификатор из URL, выясняет, что есть div с этим идентификатором, показывает его и скрывает все остальные? Это, вероятно, легко сделать, но это поставило меня в тупик.

Любая помощь с благодарностью. Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 ноября 2010

Не говоря уже о div и работе над css (когда вы передаете это, чтобы скрыть / показать div). Вы можете создавать не только разметку, но и таблицу стилей CSS. Используйте подобный (поместите это в конец вашей головной части). И пусть браузер сделает всю работу за вас;)

<style type="text/css">
    div {
        display: none;
    }

    div#<?php echo $_GET['id']; ?>:{
        display: block;
    }
</style>
1 голос
/ 23 ноября 2010
$divs = array('r0101', 'r0102', 'r0103');
$divID = $_GET['id'];
foreach($divs as $div)
{
    echo '<div id="'.$div.'" class="';
    if ($div == $divID)
    {
      echo 'show';
    }
    else
    {
        echo 'hidden';
    }
    echo '">';
}

Если я правильно прочитал вопрос, у вас есть набор div (r0101, r0102 и т. Д.), И вы хотите показать только один из них в зависимости от страницы, на которой вы находитесь.Приведенный выше код создает массив этих элементов div, перебирает их и создает элемент div.Класс div - это «show», если div соответствует div из URL страницы, и «hidden» в противном случае.

0 голосов
/ 23 ноября 2010

Если вы хотите ускорить загрузку, выведите только тот div, который хотите показать. Вы могли бы сделать что-то вроде этого:

 $divs = array('r0101', 'r0102', 'r0103');
$divID = $_GET['id'];
foreach($divs as $div)
{
    if($div == $divID){ echo '<div> /* CONTENT HERE */ </div> };
}

Надеюсь, это поможет.

0 голосов
/ 23 ноября 2010

Прежде всего, вы должны подумать о том, как сделать так, чтобы ваши div печатались динамически. Что-то вроде:

<?php
for($i = 1; $i <= 80; $i++):
?>
<div id="r<?php print $i; ?>">div contents</div>
<?php
endfor;
?>

Кроме того, если вы найдете способ сделать то, что сказано выше, вы также можете сделать что-то вроде:

<?php
for($i = 1; $i <= 80; $i++):
    if($i == $_GET['id']){
        $class = 'show';
    } else {
        $class = 'hidden';
    }
?>
<div id="r<?php print $i; ?>" class="<?php print $class; ?>">div contents</div>
<?php
endfor;
?>

или

<?php
for($i = 1; $i <= 80; $i++):
    $class = ($i == $_GET['id']) ? 'show' : 'hidden';
?>
<div id="r<?php print $i; ?>" class="<?php print $class; ?>">div contents</div>
<?php
endfor;
?>

, который точно такой же, но (с использованием троичного оператора ) экономит несколько строк и (некоторые люди думают) это уменьшает читабельность.

...