ugrás a tartalomhoz

Kis help, menühivatkozás active attrib, includeal :))

Creative · 2010. Ápr. 4. (V), 23.15
Üdv

Nos, egy honlapszerkesztésnél belefutottam egy problémába. A menüt megoldottam include hívással. Példa:

<div id="nav">
  <ul>
  <li id="main-tab"><a href="index.php?include=main">Főoldal</a></li>
  <li id="product-tab"><a href="index.php?include=products">Termékeink</a></li>
  <li id="inform-tab"><a href="index.php?include=infos">Információk</a></li>
  <li id="contact-tab"><a href="index.php?include=contact">Elérhetőségek</a></li>
  <li id="forum-tab"><a href="index.php?include=forum">Vendégkönyv</a></li>
  </ul>
 </div>
 <div id="active">
 <?php  
  if(##kukac##is_file($_GET['include'].'.php'))
  include_once($_GET['include'].'.php');  
  else
  include_once('main.php');
 ?>  
 </div>


Szerintem ebből kivehető, mit is csináltam :) Nos, megtudtam oldani még a régi hivatkozásos megoldásommal, hogy mindig az a listaelem mutatkozott eltérően, amelyik oldala épp be volt hívva. Igaz, elég kisiskolás módszerrel oldottam meg, a hivatkozásnak megadtam a class="active" osztályt.

Lehet, hogy teljesen triviális hibába futottam, de nem jövök rá, hogy lehetne ezt a megoldást átültetni dinamikussá a fent mellékelt kódba. Szóval a lényeg az lenne, hogy az oldalt böngésző user vizuális megerősítést kapva, eltérő kinézettel lássa az épp behívott oldal menüpontját. Remélem, nem kérdezek túl nagy hülyeséget így "kora" este.

C.
 
1

Security

janoszen · 2010. Ápr. 5. (H), 02.50
Elsőként egy kis security tipp: tegyél be a $_GET['include'] változóra minimum egy preg_match-et, különben ../../.. módszerrel frankó directory traversal áldozata leszel.

Másrészt egyszerű a feladat:

  <li id="main-tab"><a href="index.php?include=main"<?php if (!isset($_GET['include']) || $_GET['include'] == 'main') :?> class="active"<?php endif; ?>>Főoldal</a></li>
<li id="product-tab"><a href="index.php?include=products"<?php if (!isset($_GET['include']) && $_GET['include'] == 'products') :?> class="active"<?php endif; ?>>Termékeink</a></li>
2

gettelenül

Creative · 2010. Ápr. 5. (H), 10.39
Köszönöm a gyors választ :)

Bevallom, a preg_match() függvényt még nem használtam. A problémám jelenleg annyi, hogy az általad javasolt -s belegondolva, tényleg logikus, kézenfekvő, csak nem éjjel fél 12kor xD- megoldással előugrik ama probléma, hogy mi van, ha nincs include érték? Értsd a sima index.php behívásakor, amikor semmitse kap GET-el még. Ilyenkor gondol egyet, úgy veszi, hogy minden értéket megkapott mégis, s minden megkapja a class="active" tulajdonságokat. Jelenleg ezen probléma orvoslásán dolgozom, de ha van ötleted :)

C.
3

Apró javítás

N0r3i · 2010. Ápr. 5. (H), 12.37
Szia!

Proclub megoldása némileg javítva megoldja a nincs GET problémát is (szerintem ő is ezt akarta írni, csak "félrenyúlt" :-) ):

<li id="main-tab"><a href="index.php?include=main"<?php if (isset($_GET['include']) && $_GET['include'] == 'main') :?> class="active"<?php endif; ?>>Főoldal</a></li>  
<li id="product-tab"><a href="index.php?include=products"<?php if (isset($_GET['include']) && $_GET['include'] == 'products') :?> class="active"<?php endif; ?>>Termékeink</a></li>  
Magyarul: a menüpontba akkor teszünk "active" class-t, ha a megfelelő GET paraméter létezik (isset) ÉS az a megfelelő értéket tartalmazza. Ez egyébkent nem is olyan fapados módszer, teljesen szemantikus, CSS-sel szépen formázható.

A preg_match() függvénnyel ismerkedés valóban rendkívül hasznos, más okból is, de a probléma megoldásához elég lehet néhány if vagy switch szerkezet, melyben ellenőrzöd, hogy az include paraméter kizárólag a megfelelő értékeket tartalmazza-e. Ilyesmire gondolok:

switch ($_GET['include']) {
  'products':
  'infos':
  'contact':
  'forum':
      if(##kukac##is_file($_GET['include'].'.php'))
         include_once($_GET['include'].'.php'); 
      else
         include_once('main.php'); 
  default:
      include_once('main.php'); 
}
Üdv: Norbi
4

Köszi :)

Creative · 2010. Ápr. 6. (K), 09.59
Köszönöm mindkettőtök segítségét :) tökéletesen működik a menürendszer. A preg_match() -el viszont most nem foglakoznék annyira, ugyanis pl vendégkönyv oldalhoz tartozik még két másik oldal s azokat nem lehet menüből elérni, de kéne h megjelenjenek rendesen, ha kapja az include-ot a lap, viszont attól félek, ha az indexbe közzé teszem azokat a függvénnyel, akkor kijátszhatóvá válik. Meg most a captcha-ra kéne ráfeküdnöm nagyon:S :)