UWAGA: Strona zawiera materiały archiwalne. Większość artykułów dotyczy Joomla! 1.0
Start arrow Szablony arrow Szablon arrow Ukrywanie kodu modułów
Ukrywanie kodu modułów Drukuj Email
Użyteczna możliwość określania we właściwościach modułów, na których stronach mają być wyświetlane wymaga takiej elastyczności szablonu, by zapobiec pojawianiu się na nieplanowanych pustych przestrzeni czy też generowaniu w kodzie strony pustych elementów <div>. Służą temu celowi omówione już techniki ukrywania kolumn oraz techniki ukrywania modułów.

Czy są tu moduły?

W obu technikach korzystamy z instrukcji warunkowej PHP oraz funkcji Joomla mosCountModules() sprawdzającej, jaką ilość modułów modułów należy włączyć do określonego obszaru. Oto konstrukcja kodu krywającego moduły:

<?php if (mosCountModules('pozycja')) { ?>
     Tutaj instrukcja wczytująca moduły
     i ewentualnie znaczniki obejmujących ją elementów div 
<?php } ?>

Tłumacząc na prosty język, napisaliśmy: Jeśli są moduły opublikowane w obszarze ’pozycja’ wykonaj instrukcję wczytującą moduły i ewentualnie umieść znaczniki HTML.

Ukrycie kodu wczytującego moduły

W najprostszym przypadku używamy następującej instrukcji:

<?php if (mosCountModules('pozycja')) { ?>
 <?php mosLoadModules( 'pozycja');?>
<?php } ?>

Oznacza ona: Jeśli w obszarze ’pozycja’ są opublikowane moduły, umieść obszar ’pozycja’ i zawartość modułów. Gdybyśmy tego nie uczynili, w kodzie źródłowym strony mógłby się znaleźć taki np. fragment:

<div class="moduletable">
 
</div>

Zupełnie niepotrzebnie. A jeśli na dodatek w arkuszu stylów ustawimy we własnościach klasy .moduletable minimalną wysokość, to niektóe przeglądarki wyświetlą w tym miejscu pusty obszar.

Ukrycie kodu HTML i modułów

Instrukcję wczytującą moduły umieszczamy niekiedy między znacznikami elementu <div>. Te dodatkowe znaczniki HTML ukrywamy w taki sam sposób:

<?php if (mosCountModules('user1')) { ?>
 <div id="naskroty">
   <?php mosLoadModules( 'user1,-1');?>
 </div>
<?php } ?>

Ukrycie modułów w kilku pozycjach

Jeśli chcemy ukryć moduły, dla których planujemy miejsce w zagnieżdżanych elementach, korzystamy z operatora logicznego or (lub), np.:

<?php if (mosCountModules('left') || mosCountModules('user1')) { ?> 
   <div id="lewakol"> 
     <div class="ramka_wewn">  
       <div id="navmod">  
         <?php mosLoadModules('user1',-2);?>  
       </div> 
       <?php mosLoadModules('left',-2);?> 
     </div>
   </div> 
<?php } ?>

W wyniku dzialania tego kodu najpierw następuje sprawdzenie, czy w pozycji ’left’ lub w pozycji ’user1’ zostały umieszczone i opublikowane jakieś moduły. Możliwe są cztery sytuacje:

  • moduł lub moduły zostały opublikowane tylko w pozycji ’left’,
  • moduł lub moduły zostały opublikowane tylko w pozycji ’user1’,
  • moduł lub moduły zostały opublikowane w obu pozycjach,
  • w żadnej z tych pozycji nie ma modułów.

Taki kod wynikowy (w pliku HTML) uzyskamy w pierwszym przypadku:

 
   <div id="lewakol"> 
     <div class="ramka_wewn">  
       <div id="navmod">  
 
       </div> 
       ZAWARTOŚĆ MODUŁÓW UMIESZCZONYCH w left
     </div>
   </div>

W drugim przypadku otrzymamy następujący kod wynikowy:

 
   <div id="lewakol"> 
     <div class="ramka_wewn">  
       <div id="navmod">  
       ZAWARTOŚĆ MODUŁÓW UMIESZCZONYCH w user1
       </div> 
 
     </div>
   </div>

W trzecim przypadku:

 
   <div id="lewakol"> 
     <div class="ramka_wewn">  
       <div id="navmod">  
       ZAWARTOŚĆ MODUŁÓW UMIESZCZONYCH w user1
       </div> 
       ZAWARTOŚĆ MODUŁÓW UMIESZCZONYCH w left
     </div>
   </div>

W czwartym przypadku nie otrzymamy żadnego kodu wynikowego.

Zastosowane rozwiązanie ma pewną usterkę. W pierwszym przypadku otrzymamy w kodzie jeden pusty element. Wystarczy nieco rozbudować instrukcję, by takiego zdarzenia uniknąć:

<?php if (mosCountModules('left') || mosCountModules('user1')) { ?> 
   <div id="lewakol"> 
     <div class="ramka_wewn">
       <?php if (mosCountModules('user1')) { ?> <!-- dodana linia -->
           <div id="navmod">
             <?php mosLoadModules( 'user1,-1');?>
           </div>
       <?php } ?> <!-- dodana linia -->
       <?php mosLoadModules('left',-2);?> 
     </div>
   </div> 
<?php } ?>

W szablonie opartym na tabelach

Nie polecamy wprawdzie stosowania zagnieżdżonych tabel w projektowaniu szablonów, ale zdarza się przecież, że trzeba zmodyfikować zakupiony lub pobrany z Sieci szablon, oparty na tabelach. Zobaczmy, jak w takim szablonie ukryć moduły. Przykład ma dodatkowy walor: zwróć uwagę, ile kodu zaciemniającego czytelność szablonu trzeba umieścić:

 
</td><!-- KONIEC KOLUMNY CENTRALNEJ -->
<?php if ((mosCountModules('right')) || (mosCountModules('user5') ) 
    || (mosCountModules('user6') )) {?>
<td width="180" valign="top"><!-- PRAWA KOLUMNA --> 
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
      <tr> 
        <td width="100%" valign="top">
           <?php loadModules( 'right' ); ?>
        </td>
      </tr>
      <?php if (mosCountModules( 'user5' )); { ?>
      <tr>
        <td width="100%" valign="top">
           <?php loadModules( 'user5' ); ?>
        </td>
      </tr>
      <?php } ?>
      <?php if (mosCountModules( 'user6' )); { ?>
      <tr>
        <td width="100%" valign="top">
           <?php loadModules( 'user6',-2 ); ?>
        </td>
      </tr>
      <?php } ?>
   </table>
</td><?php }?>
</tr>

Uwagi, źródła

Jeżeli masz sugestie odnośnie treści lub chcesz zgłosić poprawki do tego rozdziału, skomentuj go albo umieść wiadomość na forum: Dokumentacja - Propozycje, zmiany, poprawki

Dziękujemy!

Stefan Wajda, Zespół Dokumentacji PCJ

 
« poprzedni artykuł   następny artykuł »