Felülírások: Felugró bejelentkező box

A JoomlaWiki wikiből

A bejelentkező boxok értékes helyet foglalhatnak el a honlapokon, vagy csak egyszerűen rontják az kinézetet. A probléma megoldásának egy népszerű módja a bejelentkezés modal ablakban történő megjelenítése. Az ötlet, hogy lecseréljük a felhasználónév és jelszó mezőket egy "bejelentkezés" linkkel, amire kattintva egy modal ablak nyílik meg. Mindez megvalósítható az alaprendszerrel, a MooTools keretrendszert és a Joomla! elrendezés felülírásokat használva.

Ebben a leírásban két egyszerű felülírást fogunk használni, egyet a bejelentkezés modulhoz és egyet a felhasználókezelő komponens bejelentkező oldalához. Az első lépés, hogy átmásoljuk az alapértelmezett elrendezéseket az aktív sablon html könyvtárába.

Másoljuk át a

/modules/mod_login/tmpl/default.php

fájlt a

/templates/sablon/html/mod_login/default.php

fájlba, és a

/components/com_user/views/login/tmpl/default_login.php

fájlt a következőbe

/templates/sablon/html/com_user/login/default_login.php

ahol a "sablon" a használt sablon könyvtárának a neve. Ha egynél több sablont használunk menüelemekhez rendelve, akkor a felülírást el kell végezni minden ilyen sablonnál.

Nyissuk meg a modul elrendezését felülíró fájlt (/templates/sablon/html/mod_login/default.php). Cseréljük le a kódját a következőre:

  1. <?php // no direct access
  2. defined('_JEXEC') or die('Restricted access'); ?>
  3.  
  4. <?php if ($type == 'logout') : ?>
  5. <form action="index.php" method="post" name="login" id="form-login">
  6. <?php if ($params->get('greeting')) : ?>
  7.     <div>
  8.     <?php if ($params->get('name')) : {
  9.         echo JText::sprintf( 'HINAME', $user->get('name') );
  10.     } else : {
  11.         echo JText::sprintf( 'HINAME', $user->get('username') );
  12.     } endif; ?>
  13.     </div>
  14. <?php endif; ?>
  15.     <div align="center">
  16.         <input type="submit" name="Submit" class="button" 
  17. value="<?php echo JText::_( 'BUTTON_LOGOUT'); ?>" />
  18.     </div>
  19.     <input type="hidden" name="option" value="com_user" />
  20.     <input type="hidden" name="task" value="logout" />
  21.     <input type="hidden" name="return" value="<?php echo $return; ?>" />
  22. </form>
  23. <?php else :
  24.     JHtml::_('behavior.modal', 'a.login');
  25. ?>
  26. <script type="text/javascript">
  27. window.addEvent('domready', function() {
  28.     // Decorate the login windows to use a modal.
  29.     $ES('a.login').each(function(a){
  30.         a.setProperty('rel', '{size: {x: 175, y: 225}, ajaxOptions: {method: "get"}}');
  31.         if (a.getProperty('href').contains('?')) {
  32.             a.setProperty('href', a.getProperty('href')+'&tmpl=component');
  33.         } else {
  34.             a.setProperty('href', a.getProperty('href')+'?tmpl=component');
  35.         }
  36.     });
  37. });
  38. </script>
  39.     <p>
  40.         <a href="/<?php echo JRoute::_('index.php?option=com_user&view=login'); ?>"
  41. class="login" title="<?php echo JText::_('LOGIN') ?>">
  42.             <?php echo JText::_('LOGIN') ?></a>
  43.  
  44.         <a href="/<?php echo JRoute::_( 'index.php?option=com_user&task=register' ); ?>">
  45.                 <?php echo JText::_('REGISTER'); ?></a>.
  46.     </p>
  47. <?php endif; ?>

A modul elrendezése változatlan bejelentkezett felhasználó esetén. Amikor azonban a felhasználó nincs bejelentkezve, két hivatkozás jelenik meg: bejelentkezés és regisztrálás. A bejelentkezés hivatkozásához hozzárendeltük a "login" stílusosztályt. Egy kis JavaScript került beillesztésre, amely modal ablakban jelenít meg minden "login" stílusosztállyal rendelkező hivatkozást. Ezzel a technikával akkor is működni fog a bejelentkezés, ha a JavaScript le van tiltva, ugyanis a hivatkozásra kattintva a normál bejelentkező ablakhoz irányul át az oldal.

Amikor a bejelentkezés hivatkozásra kattintunk, akkor egy modal ablak jelenik meg benne a bejelentkezés boxszal. A leírás továbbra is megjelenik a felugró ablakban, tehát ezt ki kell vennünk (meghagyva a teljes méretű bejelentkezés oldalon).

Nyissuk meg a felhasználókezelő komponens felülíró fájlját (/html/com_user/login/default_login.php). Helyezzük a leírást tartalmazó részt egy feltétel közé, csak akkor jelenjen meg, ha teljes nézetű bejelentkezésről van szó.

  1. <?php if (JRequest::getVar('tmpl') != 'component') :?>
  2. <div>
  3.     <?php echo $this->image; ?>
  4.     <?php if ( $this->params->get( 'description_login' ) ) : ?>
  5.         <?php echo $this->params->get( 'description_login_text' ); ?>
  6.         <br /><br />
  7.     <?php endif; ?>
  8. </div>
  9. <?php endif; ?>

A tmpl változó le van foglalva a Joomla! által. Ha ennek a változónak az értéke "component", akkor a sablon komponenst körülvevő része nem kerül megjelenítésre (ez történik a Joomla! számos területén, mint például a nyomtatás nézetnél).

A felülírásokat a joomlacode.org-ról lehet letölteni: popup_login_box_layout_overrides.zip. Letöltés után tömörítsük ki a fájlt a sablon /html/ könyvtárába. Ne felejtsünk el előtte a létező fájlokról biztonsági másolatot készíteni!

A cikk forrása: The Art of Joomla!