Pannello di Login in stile Google

Tutorial Pannello di Login in stile Google

Messaggio Da Niko Dom 17 Gen 2021 - 1:37

Pannello di Login in stile Google


Con questo script puoi scegliere con quale account entrare nel tuo forum con un pannello di login simile a quello utilizzato da Google.

google - Pannello di Login in stile Google YM70B4q google - Pannello di Login in stile Google MVJXa0a

Creazione di una pagina HTML

Per iniziare dobbiamo creare una nuova pagina HTML. Per fare questo andiamo verso Pannello di amministrazione ► e creiamo la pagina con queste impostazioni:
  • Titolo: a tua scelta
  • Vuoi usare l'inizio e la fine della tua pagina del forum?: SI
  • Utilizzare questa pagina come home page? NO
  • Codice:
    Codice:
    <style type="text/css">/* CONTÊINERES E CONFIGURAÇÃO GERAL */
    body { overflow:hidden; }
    #fa_form_container { color:#666; font-size:12px; font-family:Arial, sans-serif; background:#FFF; position:fixed; top:0; left:0; right:0; bottom:0; z-index:999999; overflow:auto; }
    #fa_form_container a { color:#69C !important; }
    #fa_form_container a:hover { color:#369 !important; }
    .fa_login_maintitle { font-size:24px; font-weight:bold; text-align:center; text-transform:uppercase; margin:20px 0; }
    .fa_login_maintitle img { vertical-align:-5px; height:30px; margin-right:6px; }
    .fa_login_title { text-align:center; margin:30px 0; color:#666; font-size:28px; font-weight:bold; font-family:Arial, sans-serif; }
    .fa_login_desc { font-size:16px; text-align:center; margin:10px 0; }
    .fa_form_wrap { text-align:center; background:#EEE; border:1px solid #DDD; box-shadow:0 6px 12px rgba(0, 0, 0, 0.1); border-radius:3px; padding:30px 6px; width:300px; margin:30px auto; overflow:hidden; position:relative; transition:250ms; }
    .fa_login_row { margin:10px 0; }
    .fa_form_links { text-align:center; }
    .fa_login_origin { font-size:12px; position:fixed; bottom:10px; right:10px; z-index:-1; }
    .fa_login_origin a { font-weight:bold; }
     
    /* NOME DE USUÁRIO E AVATAR */
    .fa_login_avatar { background:#FFF; border:1px solid #DDD; border-radius:100px; padding:2px; display:inline-block; width:100px; height:100px; overflow:hidden; position:relative; }
    .fa_login_avatar img { height:100px; width:100px; border-radius:100px; }
    #fa_avatar_real { background:#FFF; position:absolute; top:50px; left:50px; right:2px; bottom:2px; height:0; width:0; transition:linear 150ms; }
    #fa_avatar_real.avatar_visible { top:2px; left:2px; height:100px; width:100px; }
    .fa_login_username { font-size:16px; font-weight:bold; }
     
    /* BOTÕES E CAIXAS DE TEXTO */
    .fa_login_button { color:#69C; background:none; border:1px solid #69C; border-radius:3px; font-size:16px; font-weight:bold; font-family:Arial, sans-serif; display:block; height:30px; line-height:30px; width:240px; margin:10px auto; transition:250ms; outline:none; cursor:pointer; }
    .fa_login_button:hover { color:#FFF; background:#69C; }
    .fa_login_input { color:#666; background:#FFF; border:1px solid #CCC; border-radius:3px; padding: 0 3px; height:30px; width: 232px; outline:none; }
    .fa_login_input:focus { border-color:#69C; }
     
    /* SLIDES DE FORMULÁRIO E BOTÃO VOLTAR */
    .fa_form_slide { position:absolute; width:100%; transition:300ms; }
    #fa_login_back { position:absolute; top:30px; left:40px; opacity:0; visibility:hidden; transition:250ms; }
    #fa_login_back.fa_login_visible { opacity:1; visibility:visible; }
     
     
    /* LISTA DE CONTAS */
    #account_list { background:#EEE; position:absolute; top:0; left:0; width:100%; height:100%; overflow:auto; }
    .account_list_row { font-size:16px; text-align:left; width:80%; margin:10px auto; position:relative; }
    .account_list_inner { background:#FFF; border:1px solid #DDD; border-radius:3px; padding:3px; width:80%; cursor:pointer; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .account_list_inner:hover { background:#FFD }
    .account_list_avatar { height:40px; width:40px; vertical-align:middle; margin-right:3px; }
    #fa_form_container a.account_list_delete { font-size:30px; color:#F33 !important; background:#FFF; border:1px solid #F33; border-radius:100px; width:20px; height:20px; line-height:22px; text-align:center; position:absolute; margin-top:-10px; top:50%; right:0; display:block; overflow:hidden; }
    #fa_form_container a.account_list_delete:hover { color:#333 !important; border-color:#333; }
     
    /* CAMPOS OCULTOS */
    .logged_out #fa_form_logout, .logged_in #fa_form_login, .noscript #fa_form_login, .noscript #fa_form_logout, #account_list.accounts_hidden { display:none }</style>
    <div class="logged_out noscript" id="fa_form_container">
     
      <h1 class="fa_login_maintitle">
          <a target="_blank" href="https://www.forumeiros.com"><img src="https://im0.all-up.com/static/images/sigle.png" /><span style="color:#39C;">Forum</span><span style="color:#333;">eiros.com</span></a>
      </h1>
     
      <!--  START_NOSCRIPT_LOGIN_FORM  -->  <noscript>    <form action="/login" method="post">      <h2 class="fa_login_title">Log in</h2>      <p class="fa_login_desc">Per favore, connettiti per accedere al forum</p>      <div class="fa_form_wrap">        <div class="fa_login_row">          <input id="fa_login_username" class="fa_login_input" type="text" name="username" placeholder="Il tuo nome utente"/>        </div>                  <div class="fa_login_row">          <input id="fa_login_password" class="fa_login_input" type="password" name="password" placeholder="Password"/>        </div>                  <div class="fa_login_row">          <input class="fa_login_button" type="submit" name="login" value="Entra"/>                        <div style="width:240px;margin:auto;">            <div style="float:left;">              <label for="fa_autologin"><input id="fa_autologin" type="checkbox" name="autologin"/> Permanecer conectado</label>            </div>                            <div style="float:right;">              <a href="/profile?mode=sendpassword">Esqueci minha senha</a>            </div>                            <div class="clear"></div>          </div>        </div>      </div>              <div class="fa_form_links">        <div class="fa_login_row">          <a href="/register">Crea un account</a>        </div>        <div class="fa_login_row">          <a href="/login#login_classic">Log-in classico</a> | <a href="/login?logout=true#login_classic">Logout</a>        </div>      </div>    </form>  </noscript>
      <!--  END_NOSCRIPT_LOGIN_FORM  -->
      <!--  START_LOGIN_FORM  -->
      <form method="post" action="/login" id="fa_form_login">
           
          <h2 class="fa_login_title">
            Log in
          </h2>
           
          <p class="fa_login_desc">
            Per favore, connettiti per accedere al forum <script type="text/javascript">document.write('<a href="http://' + window.location.host + '">' + window.location.host + '</a>');</script>
          </p>
             
          <div style="height:210px;" class="fa_form_wrap" id="fa_form_wrap">
                 
            <div class="fa_login_row">
                          <a href="#" id="fa_login_back">Torna indietro</a>          <span class="fa_login_avatar">            <img src="https://2img.net/i/fa/invision/pp-blank-thumb.png" />            <img src="https://2img.net/i/fa/invision/pp-blank-thumb.png" id="fa_avatar_real" />          </span>     
            </div>
                         
            <!--  START_STEP_1  -->     
            <div style="left:0px;" class="fa_form_slide" id="login_step_1">
                       
                <div class="fa_login_row">
                              <input placeholder="Inserisci il tuo nome utente" name="username" type="text" class="fa_login_input" id="fa_login_username" />         
                  <p style="color:#F00;display:none;" class="fa_login_row" id="fa_error_username">
                      Prego, Inserisci il tuo nome utente
                  </p>
                         
                </div>
                               
                <div class="fa_login_row">
                              <input value="Prossimo" type="button" class="fa_login_button" id="fa_button_next" />       
                </div>
                     
            </div>
                 
            <!--  END_STEP_1  -->             
            <!--  START_STEP_2  -->     
            <div style="left:400px;" class="fa_form_slide" id="login_step_2">
                       
                <div class="fa_login_row">
                              <span class="fa_login_username"></span>       
                </div>
                               
                <div class="fa_login_row">
                              <input placeholder="Password" name="password" type="password" class="fa_login_input" id="fa_login_password" />         
                  <p style="color:#F00;width:240px;margin:10px auto;display:none;" class="fa_login_row" id="fa_error_password">
                      Nome utente o password non valida
                  </p>
                         
                </div>
                               
                <div class="fa_login_row">
                              <input value="Login" name="login" type="submit" class="fa_login_button" />                     
                  <div style="width:240px;margin:auto;">
                                 
                      <div style="float:left;">
                                        <label for="fa_autologin"><input name="autologin" type="checkbox" id="fa_autologin" /> Resta connesso</label>           
                      </div>
                                               
                      <div style="float:right;">
                                        <a href="/profile?mode=sendpassword">Ho dimenticato la mia password</a>           
                      </div>
                                               
                      <div class="clear">
                      </div>
                               
                  </div>
                         
                </div>
                     
            </div>
                 
            <!--  END_STEP_2  -->   
          </div>
                   
          <div class="fa_form_links">
                 
            <div class="fa_login_row" id="account_list_holder">
            </div>
                 
            <div class="fa_login_row">
                          <a href="/register">Crea un account</a>     
            </div>
                 
            <div class="fa_login_row">
                          <a href="/login#login_classic">Login classico</a>     
            </div>
               
          </div>
         
      </form>
     
      <!--  END_LOGIN_FORM  -->
      <!--  START_LOGOUT_FORM  -->
      <form method="post" action="/login?logout=true" id="fa_form_logout">
           
          <h2 class="fa_login_title">
            Sair
          </h2>
           
          <p class="fa_login_desc">
            Stai per lasciare <script type="text/javascript">document.write('<a href="http://' + window.location.host + '">' + window.location.host + '</a>');</script>
          </p>
             
          <div class="fa_form_wrap">
                 
            <div class="fa_login_row">
                          <span class="fa_login_avatar"><script type="text/javascript">document.write(_userdata.avatar);</script></span>     
            </div>
                         
            <div class="fa_login_row">
                          <span class="fa_login_username"><script type="text/javascript">document.write('<a href="/u' + _userdata.user_id + '" target="_blank">' + _userdata.username + '</a>');</script></span>     
            </div>
                         
            <div class="fa_login_row">
                Sei sicuro di volerti disconnettere?
            </div>
                 
            <div class="fa_login_row">
                          <input value="Si" name="confirm" type="submit" class="fa_login_button" />          <input value="No" name="cancel" type="submit" class="fa_login_button" />          <script type="text/javascript">//<![CDATA[
              _userdata.session_logged_in && (function() {
                var logout = document.getElementById('logout'),
                    container = document.getElementById('fa_form_container'),
                    form_logout = document.getElementById('fa_form_logout');
                   
                document.title = 'Log out';
                container.className = 'logged_in';
             
                /* if the default login link is present we can get the data from the href attribute. ( FASTER )
                ** otherwise we'll need to send an AJAX request to the login page for the data ( SLOWER ) */
                if (logout) {
                  var tid = logout.href.replace(/.*?tid=(.*?)&.*/, '$1'),
                      key = logout.href.replace(/.*?key=(.*?)$/, '$1');
                     
                  form_logout.action += '&tid=' + tid;
                  document.write('<input type="hidden" name="tid" value="' + tid + '"><input type="hidden" name="key" value="' + key + '">');
                } else {
                  $.get('/login?logout=true&change_version=prosilver', function(d) {
                    var info = $('.submit-buttons', d)[0];
                    if (info) {
                      info.style.display = 'none';
                      form_logout.appendChild(info);
                      form_logout.action += '&tid=' + form_logout.tid.value;
                    }
                  });
                }
              }());
              //]]></script>     
            </div>
               
          </div>
           
      </form>
       
      <!--  END_LOGOUT_FORM  -->       
    </div>
     <script type="text/javascript">//<![CDATA[
    !_userdata.session_logged_in && (function() {
      document.title = 'Entrar';
     
      window.fa_form_login = {
        redirect : my_getcookie('fa_login_form_redirect') || '/forum', /* change redirection page after login */
        submitting : false, /* true if posting login info */
     
        accountList : document.createElement('DIV'), /* stores logged accounts */
     
        /* move onto the password step
          pass along the user id to get the user avatar faster */
        next : function(id) {
          var username = document.getElementById('fa_login_username');
       
          if (username.value) {
            var avatar = document.getElementById('fa_avatar_real'),
                row, accounts, i;
         
         
            fa_form_login.clearError('username');
            username.value = username.value.replace(/^\s+|\s+$/g, ''); // trim extra white space
         
            // check if the username is already stored
            if (!id && storage && storage.fa_accounts && window.JSON) {
              accounts = JSON.parse(storage.fa_accounts);
              for (i in accounts) {
                if (username.value.toLowerCase() == accounts[i].username.toLowerCase()) {
                  id = i;
                  break;
                }
              }
            }
         
            row = id ? null : document.getElementById('account_user_' + id);
         
            // check if account row is created to get an avatar that's already loaded
            if (row) avatar.src = row.getElementsByTagName('IMG')[0].src;
            else {
              $.get(id ? '/ajax/index.php?f=m&user_id=' + id : '/profile?mode=viewprofile&u=' + username.value, function(d) {
                var ava = id ? $('.tooltip-content img', d)[0] : $('#profile-advanced-right .module:first div img:first,.forumline td.row1.gensmall:first > img:first, .frm-set.profile-view.left dd img,dl.left-box.details:first dd img, .row1 b .gen:first img, .real_avatar img', d)[0];
                avatar.src = ava ? ava.src : 'https://2img.net/i/fa/invision/pp-blank-thumb.png';
                avatar.className = 'avatar_visible';
              });
            }
       
            $('.fa_login_username').html('<a href="/profile?mode=viewprofile&u=' + username.value + '" target="_blank">' + username.value + '</a>');
         
            document.getElementById('fa_form_wrap').style.height = '260px';
            document.getElementById('login_step_1').style.left = '-400px';
            document.getElementById('login_step_2').style.left = '0px';
            document.getElementById('fa_login_back').className = 'fa_login_visible';
         
            window.setTimeout(function() {
              document.getElementById('fa_login_password').focus();
            }, 300);
          } else {
            fa_form_login.error('username');
          }
        },
     
        /* move back to the username step */
        back : function() {
          fa_form_login.clearError('password');
       
          document.getElementById('fa_login_username').focus();
          document.getElementById('fa_avatar_real').className = '';
       
          document.getElementById('fa_form_wrap').style.height = '210px';
          document.getElementById('login_step_1').style.left = '0px';
          document.getElementById('login_step_2').style.left = '400px';
          document.getElementById('fa_login_back').className = '';
          return false;
        },
     
        /* submit the login form */
        submit : function() {
          if (!fa_form_login.submitting) {
            fa_form_login.submitting = true;
         
            document.getElementById('fa_form_wrap').style.height = '260px';
            fa_form_login.clearError('password');
         
            $.post('/login', $('#fa_form_login').serialize() + '&login=true', function(d) {
              fa_form_login.submitting = false;
              if (/_userdata\["session_logged_in"\] = 1/.test(d)) {
                var storage = window.localStorage,
                    id = d.match(/_userdata\["user_id"\] = (\d+)/)[1];
             
                /* store the user_id and username for next login */
                if (storage && window.JSON) {
                  var accounts = storage.fa_accounts ? JSON.parse(storage.fa_accounts) : {}, i;
               
                  for (i in accounts) accounts[i].last_active = 0;
               
                  accounts[id] = {
                    last_active : 1, /* last active account will be marked with a 1 */
                    username : document.getElementById('fa_login_username').value
                  };
               
                  storage.fa_accounts = JSON.stringify(accounts);
                }
             
                my_setcookie('fa_login_form_redirect', '');
                window.location.href = fa_form_login.redirect;
              } else {
                fa_form_login.error('password');
              }
            });
          }
          return false;
        },
     
        /* throw a form error and display the error text */
        error : function(type) {
          var error = document.getElementById('fa_error_' + type),
              wrap = document.getElementById('fa_form_wrap');
       
          if (/none/.test(error.style.display)) {
            document.getElementById('fa_login_' + type).style.borderColor = '#F00';
       
            error.style.display = 'block';
            wrap.style.height = +wrap.style.height.replace(/px/, '') + error.getBoundingClientRect().height + 'px';
          }
        },
     
        /* clear the specified error */
        clearError : function(type) {
          document.getElementById('fa_error_' + type).style.display = 'none';
          document.getElementById('fa_login_' + type).style.borderColor = '';
        },
     
        /* delete a profile from the account list */
        deleteProfile : function(id) {
          var storage = window.localStorage, accounts = JSON.parse(storage.fa_accounts),
              row = document.getElementById('account_user_' + id),
              i;
     
          delete accounts[id];
          for (i in accounts) {
            accounts[i].last_active = 1;
            break;
          }
          storage.fa_accounts = JSON.stringify(accounts);
       
          row.parentNode.removeChild(row);
          if (!fa_form_login.accountList.firstChild) fa_form_login.accountList.innerHTML = '<div class="fa_login_row">Não existem contas armazenadas.</div><div class="fa_login_row"><a href="javascript:fa_form_login.toggleAccounts();">Retornar ao login</a></div>';
        },
     
        /* create the profile rows based onto the accounts you logged into */
        createProfile : function(id, o) {
          var row = document.createElement('DIV');
          row.id = 'account_user_' + id;
          row.className = 'account_list_row';
          row.innerHTML = '<div class="account_list_inner"><img class="account_list_avatar" src="https://2img.net/i/fa/invision/pp-blank-thumb.png"/> <span class="account_list_username">' + o.username + '</span></div><a class="account_list_delete" title="Elimina account" href="javascript:fa_form_login.deleteProfile(\'' + id + '\');">X</a>';
          row.firstChild.onclick = function() {
            fa_form_login.toggleAccounts();
            document.getElementById('fa_login_username').value = $('.account_list_username', this).text();
            fa_form_login.next(this.parentNode.id.slice(13));
          };
       
          $.get('/ajax/index.php?f=m&user_id=' + id, function(d) {
            var ava = $('.tooltip-content img', d)[0];
            if (ava) row.getElementsByTagName('IMG')[0].src = ava.src;
          });
       
          fa_form_login.accountList.appendChild(row);
        },
     
        /* basic setup of the account list */
        initAccountList : function() {
          var a = document.createElement('A'),
              holder = document.getElementById('account_list_holder');
       
          a.href = '#';
          a.innerHTML = 'Entre com outra conta';
          a.onclick = fa_form_login.toggleAccounts;
       
          fa_form_login.accountList.id = 'account_list';
          fa_form_login.accountList.className = 'accounts_hidden';
       
          document.getElementById('fa_form_wrap').appendChild(fa_form_login.accountList);
          holder.appendChild(a);
        },
     
        /* toggle display of the account list */
        toggleAccounts : function() {
          if (/accounts_hidden/.test(fa_form_login.accountList.className)) {
            fa_form_login.accountList.className = '';
            document.getElementById('account_list_holder').firstChild.innerHTML = 'Torna al login';
          } else {
            fa_form_login.accountList.className = 'accounts_hidden';
            document.getElementById('account_list_holder').firstChild.innerHTML = 'Collegati ad un altro account';
          }
       
          if (!fa_form_login.accountList.firstChild) fa_form_login.accountList.innerHTML = '<div class="fa_login_row">Non hai account memorizzati.</div><div class="fa_login_row"><a href="javascript:fa_form_login.toggleAccounts();">Torna al login</a></div>';
          return false;
        }
      };
     
      var container = document.getElementById('fa_form_container'),
          username = document.getElementById('fa_login_username'),
          storage = window.localStorage;
     
      container.className = 'logged_out';
     
      /* move forward in the form when ENTER is pressed */
      username.onkeydown = function(e) {
        if (e.keyCode && e.keyCode == 13) {
          fa_form_login.next();
          return false;
        }
      };
     
      /* if the specified data is useable we'll go through the stored accounts in localStorage and form a list for switching */
      if (storage && storage.fa_accounts && window.JSON) {
        var accounts = JSON.parse(storage.fa_accounts),
            i, last_active = false;
     
        for (i in accounts) {
          if (accounts[i].last_active) {
            last_active = true;
            username.value = accounts[i].username;
            fa_form_login.next(i);
          }
         
          fa_form_login.createProfile(i, accounts[i]);
        }
     
        fa_form_login.initAccountList();
        !last_active && username.focus();
      } else username.focus();
     
      document.getElementById('fa_button_next').onclick = function() {
        fa_form_login.next();
      };
      document.getElementById('fa_login_back').onclick = fa_form_login.back;
      document.getElementById('fa_form_login').onsubmit = fa_form_login.submit;
    }());
    //]]></script>


Installazione del codice Javascript

Le pagine javascript attive nel tuo forum ti permettono di inserire script e jquery per personalizzare il tuo forum, tuttavia è importante sapere che qualsiasi script trovato su internet non finisce per apparire nei forum.

Per creare il codice javascript dovremo andare invece verso Pannello di amministrazione ► e creare un nuovo codice con le seguenti impostazioni:
  • Titolo: a tua scelta
  • Dove: in tutte le pagine
  • Codice:
    Codice:
    (function() {
      var html_page = '{LINK_DA_PAGINA_HTML}',
          link_change = true,
          redirect = true;
     
      $(function() {
        var regex = new RegExp(html_page);
     
        // link change
        if (link_change && !regex.test(window.location.href)) {
          $('a[href^="/login"], a[href^="http://' + window.location.host + '/login"]').attr('href', html_page);
        }
     
        // redirect to classic if login page isn't available
        if (!document.getElementById('fa_form_container') && regex.test(window.location.href)) {
          window.location.href = '/login#login_classic';
        }
      });
     
      // login redirection
      // saves redirect location so you're taken to the correct page upon login
      if (/\/login\?redirect/.test(window.location.href)) {
        my_setcookie('fa_login_form_redirect', window.location.search.replace(/.*?redirect=(.*?)(?:&|$)/, '$1'));
      }
     
      // redirect
      if (redirect && /\/login/.test(window.location.href)) {
        if (/login_classic/.test(window.location.hash) || /admin=1/.test(window.location.href)) return;
        window.location.href = html_page;
      }
    }());


Sarà poi necessario modificare var html_page = '{LINK_DA_PAGINA_HTML}', con il link della pagine HTML creata precedentemente (ad esempio: https://aiuto.forumattivo.it/h292-)


Niko
Niko
Moderatore
Moderatore

Sesso : Maschio
Età : 28
Messaggi : 9573
Località : Provincia di Varese

https://www.fmcodes.net/
Niko è stato ringraziato dall'autore di questo topic.

Visualizza l'argomento precedente Visualizza l'argomento successivo Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.