2013-09-19 4 views
1

Я пытаюсь изучить PHP для сайта, который я создаю. В CSS у меня есть класс, nav a.thispage, настройка, чтобы «кнопка» в навигации была того же цвета, что и выделение. Он работает красиво. Но, добавив страницы, я обнаружил, что мне нужно постоянно обновлять все HTML-файлы сайта, снова и снова. Я узнал, что PHP может помочь мне автоматизировать это. Я использую следующий PHP, в моем HTML, чтобы сделать это:PHP - Как изменить класс ссылки

<?php include 'content/header.php';?> 

файл header.php имеет следующее содержание:

<header> 
    <h1><img id="headerimage" src="Images/GrandLodge.png"/>Lodge</h1> 
    <nav> 
    <ul> 
     <li><a href="index.php">Home</a></li> 
     <li><a href="events.php">Events</a></li> 
     <li><a href="social.php">Social</a></li> 
     <li><a href="about.php">About</a></li> 
     <li><a href="contact.php">Contact</a></li> 
     <li><a href="gamestores.php">Area Game Stores</a></li> 
     <li><a href="http://someaddress" target="_blank">PFS</a></li> 
    </ul> 
    </nav> 
</header> 

Теперь, так как я использую этот метод, я не могу просто установите class="thispage" на тег. Есть ли способ установить класс динамически с помощью PHP? Если да, то как мне сказать, действительно ли страница, загружающая html, на страницу, которая ему нужна? Является ли использование PHP даже правильным способом справиться с этим, или я должен использовать JavaScript?

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

Благодарим за помощь, которую вы можете предоставить.

+0

Что делает 'header.php' отношение к' content.php'? – h2ooooooo

+0

Динамический HTML-код - это цель oho PHP ... – Virus721

+0

К сожалению, это должно было сказаться header.php, я исправил его. Благодаря! –

ответ

1

Вы можете использовать немного PHP и JavaScript, чтобы справиться с этим

<header> 
    <h1><img id="headerimage" src="Images/GrandLodge.png"/>Lodge</h1> 
    <nav> 
    <ul> 
     <li><a id="aHome" href="index.php">Home</a></li> 
     <li><a id="aEvents" href="events.php">Events</a></li> 
     <li><a id="aSocial" href="social.php">Social</a></li> 
     <li><a id="aAbout" href="about.php">About</a></li> 
     <li><a id="aContact" href="contact.php">Contact</a></li> 
     <li><a id="aGame" href="gamestores.php">Area Game Stores</a></li> 
     <li><a id="aPFS" href="http://someaddress" target="_blank">PFS</a></li> 
    </ul> 
    </nav> 
</header> 

Теперь предположим, что посетитель приземлился на странице О. Код для проверки этого и установки имени класса в теге будет

<?php 
    if ($_SERVER['SCRIPT_NAME'] == '/about.php') { 
?> 
<script type="text/javascript"> 
    document.getElementById("aAbout").className = 'thispage'; 
</script> 
<?php 
    } 
?> 

Попробуйте и дайте мне знать.

+0

Это работает отлично, спасибо! Теперь, единственный вопрос, который у меня есть об этом, заключается в том, что если JavaScript не включен на клиенте, он все равно должен захватить заголовок (поскольку PHP является серверной), но он просто не добавит класс к элементу, не так ли? Опять же, спасибо. –

3

Использование basename($_SERVER['REQUEST_URI'])

<header> 
     <h1><img id="headerimage" src="Images/GrandLodge.png"/>Lodge</h1> 
     <nav> 
     <ul> 
     <?php $basename = basename($_SERVER['REQUEST_URI']);?> 
$class = $basename === 'index.php' || empty($basename) ? ' class="thispage"' : ''; 
      <li <?php if($basename=="index.php" || $basename==""){?> class="thispage" <?php } ?>><a href="index.php">Home</a></li> 
      <li <?php if($basename=="events.php"){?> class="thispage" <?php } ?>><a href="events.php">Events</a></li> 
      <li <?php if($basename=="social.php"){?> class="thispage" <?php } ?>><a href="social.php">Social</a></li> 
      <li <?php if($basename=="about.php"){?> class="thispage" <?php } ?>><a href="about.php">About</a></li> 
      <li <?php if($basename=="contact.php"){?> class="thispage" <?php } ?>><a href="contact.php">Contact</a></li> 
      <li <?php if($basename=="gamestores.php"){?> class="thispage" <?php } ?>><a href="gamestores.php">Area Game Stores</a></li> 
      <li><a href="http://someaddress" target="_blank">PFS</a></li> 
     </ul> 
     </nav> 
    </header> 

Обновленный другой простой способ

<header> 
     <h1><img id="headerimage" src="Images/GrandLodge.png"/>Lodge</h1> 
     <nav> 
     <ul> 
     <?php $basename = basename($_SERVER['REQUEST_URI']);?> 
     $class = $basename === 'index.php' || empty($basename) ? ' class="thispage"' : ''; 
      <li <?= $class ?>><a href="index.php">Home</a></li> 
      <li <?= $class ?>><a href="events.php">Events</a></li> 
      <li <?= $class ?>><a href="social.php">Social</a></li> 
      <li <?= $class ?>><a href="about.php">About</a></li> 
      <li <?= $class ?>><a href="contact.php">Contact</a></li> 
      <li <<?= $class ?>><a href="gamestores.php">Area Game Stores</a></li> 
      <li><a href="http://someaddress" target="_blank">PFS</a></li> 
     </ul> 
     </nav> 
    </header 
+1

Да или просто '$ class = $ basename === 'index.php' || empty ($ basename)? 'class = "thispage"': ''; 'И' 'в каждом ли. – Virus721

+0

его лучше использовать тернарные условия, а не длинные, если условия – Naeem

+0

Вы должны больше думать о людях, которые будут читать вас, чем вы. Во-первых, потому что время, которое вы сэкономите, - это время, которое они потеряют, а во-вторых, потому что когда-нибудь вам придется когда-нибудь смотреть на чей-то код, и если он такой, как вы, вы его ненавидите. – Virus721

0

Для того, чтобы PHP, чтобы помочь вам, вы должны сгенерировать навигацию внутри цикла. Что-то вдоль линий:

<?php 
    $menu = array(
     'Home' => 'index.php', 
     'Events' => 'events.php', 
     'Social' => 'social.php', 
     'About' => 'about.php' 
    ); 
?> 

<?php foreach ($menu as $name => $href) : ?> 
    <?php $class_name = basename(__FILE__) === $href ? 'thispage' : ''; ?> 
    <li><a href="<?php echo $href; ?>" class="<?php echo $class_name; ?>"><?php echo $name; ?></a></li> 
<?php endforeach; ?> 
+0

Это необязательная обфускация кода, если его ссылки статичны. – Virus721

+0

OP запросил решение с использованием PHP, и я думаю, что это намного чище (и более программно), чем другое решение.Это также жизнеспособное решение, которое может заинтересовать OP, или кого-то еще по линии. – Mark

Смежные вопросы