Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Menu widoczne tylko po zalogowaniu
Forum PHP.pl > Forum > Przedszkole
mikcuki
Witam chciałbym zapytać jak uprościć ukrywanie podmenu przed niezalogowanym użytkownikiem. Dodam, że zrobiłem to i działa świetnie. Mam jednak wrażenie, że da się to uprościć, przynajmniej mam taką nadzieję smile.gif

mam funkcję:
  1. function logged_in() {
  2. return (isset($_SESSION['user_id'])) ? true : false;
  3. }


w ten sposób zrobiłem rozwijane menu tak żeby tylko zalogowani mogli zobaczyć podmenu po najechaniu na odpowiednią kategorię kursorem:

  1. <div id="nav">
  2. <ul>
  3. <li><a href="#">Menu 1</a>
  4. <?php if (logged_in() === true) { echo '
  5. <ul>
  6. <li><a href="#">Menu 1.1</li>
  7. <li><a href="#">Menu 1.2</li>
  8. <li><a href="#">Menu 1.3</li>
  9. </ul>'; } ?>
  10. </li>
  11. <li><a href="#">Menu 2</a>
  12. <?php if (logged_in() === true) { echo '
  13. <ul>
  14. <li><a href="#">Menu 2.1</li>
  15. <li><a href="#">Menu 2.2</li>
  16. <li><a href="#">Menu 2.3</li>
  17. </ul>'; } ?>
  18. </li>
  19. <li><a href="#">Menu 3</a>
  20. <?php if (logged_in() === true) { echo '
  21. <ul>
  22. <li><a href="#">Menu 3.1</li>
  23. <li><a href="#">Menu 3.2</li>
  24. <li><a href="#">Menu 3.3</li>
  25. </ul>'; } ?>
  26. </li>
  27. </ul>
  28. </div>


Teraz pytanie czy da się ustawić klasę dla niewidocznego <ul> np: <ul class="loggedin">, i zdefiniować ją w funkcji php tak żeby nie dodawać za każdym razem instrukcji "if". Mam nadzieję, że w miarę wyjaśniłem o co mi chodzi. Mile widziane inne rozwiązania smile.gif Pozdrawiam
_krc_
mozesz zrobic tak jak piszesz pod warunkiem ze sprawdzasz rowniez po stronie serwera (wchodzac na strone w ukrytym linku), czy user jest zalogowany..
bo jesli tego nie zrobisz to bedzia tylko atrapa zabezpieczenia.. wink.gif
gr56
Niestety jedynym sensownym sposobem są ify jednak możesz troche poprawić swój kod:
- aby poprawić kolorowanie składni html, zamiast
  1. <?php if (logged_in() === true) { echo '
  2. <ul>
  3. <li><a href="#">Menu 1.1</li>
  4. <li><a href="#">Menu 1.2</li>
  5. <li><a href="#">Menu 1.3</li>
  6. </ul>'; } ?>

użyj
  1. <?php if (logged_in() === true) { ?>
  2. <ul>
  3. <li><a href="#">Menu 1.1</li>
  4. <li><a href="#">Menu 1.2</li>
  5. <li><a href="#">Menu 1.3</li>
  6. </ul> <? } ?>

- zamień if (logged_in() === true) na if (logged_in())
oraz return (isset($_SESSION['user_id'])) ? true : false; na return isset($_SESSION['user_id']);
mikcuki
Cytat(_krc_ @ 19.12.2012, 20:05:34 ) *
mozesz zrobic tak jak piszesz pod warunkiem ze sprawdzasz rowniez po stronie serwera (wchodzac na strone w ukrytym linku), czy user jest zalogowany..
bo jesli tego nie zrobisz to bedzia tylko atrapa zabezpieczenia.. wink.gif


Strony, do których prowadzą ukryte linki też sprawdzają czy user jest zalogowany i nie chodzi tu o same zabezpieczenie tylko o to żeby niepotrzebnie nie wyświetlać przypadkowym gościom linków do stron, na które i tak nie mogą wejść. Już jak się ktoś uprze i będzie chciał na skróty przez url wejść to wyświetli się info, że musi być zalogowany.

Cytat(gr56 @ 19.12.2012, 20:37:23 ) *
Niestety jedynym sensownym sposobem są ify jednak możesz troche poprawić swój kod:
- aby poprawić kolorowanie składni html, zamiast
  1. <?php if (logged_in() === true) { echo '
  2. <ul>
  3. <li><a href="#">Menu 1.1</li>
  4. <li><a href="#">Menu 1.2</li>
  5. <li><a href="#">Menu 1.3</li>
  6. </ul>'; } ?>

użyj
  1. <?php if (logged_in() === true) { ?>
  2. <ul>
  3. <li><a href="#">Menu 1.1</li>
  4. <li><a href="#">Menu 1.2</li>
  5. <li><a href="#">Menu 1.3</li>
  6. </ul> <? } ?>

- zamień if (logged_in() === true) na if (logged_in())
oraz return (isset($_SESSION['user_id'])) ? true : false; na return isset($_SESSION['user_id']);


Dzięki za odpowiedź. Szkoda, że nie da się tego jakoś "zautomatyzować" bo jeszcze sporo przede mną i miałem nadzieję, że sobie trochę ułatwię tongue.gif

Pozdrawiam.

_krc_
Kod
<?php $class_name = (logged_in() !== true) ? 'ul-hidden' else ''; ?>

<div id="nav">
    <ul>
    <li><a href="#">Menu 1</a>
        <ul class="<?php echo $class_name; ?>">
            <li><a href="#">Menu 1.1</li>
            <li><a href="#">Menu 1.2</li>
            <li><a href="#">Menu 1.3</li>
        </ul>  
    </li>
    <li><a href="#">Menu 2</a>
        <ul class="<?php echo $class_name; ?>">
            <li><a href="#">Menu 2.1</li>
            <li><a href="#">Menu 2.2</li>
            <li><a href="#">Menu 2.3</li>
        </ul>
    </li>
    <li><a href="#">Menu 3</a>  
        <ul class="<?php echo $class_name; ?>">
            <li><a href="#">Menu 3.1</li>
            <li><a href="#">Menu 3.2</li>
            <li><a href="#">Menu 3.3</li>
        </ul>
    </li>
    </ul>
</div>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.