Nach frontend login automatisch bestimmte seite öffnen

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
nikko
Beiträge: 34
Registriert: Mo 7. Aug 2006, 14:33
Kontaktdaten:

Nach frontend login automatisch bestimmte seite öffnen

Beitrag von nikko » Do 17. Jul 2014, 03:15

Hallo,

Ich habe Probleme mit der Standard-Login-Modul - der TargetIdart ist immer falsch ... Ich habe diesen alten modul gesehen. Ich möchte die gleiche Funktionalität in 4.9.3 zu erreichen - nach frontend login automatisch bestimmte seite öffnen. Ist etwas ähnliches verfügbar:

Code: Alles auswählen

Einfaches Login-Modul
Erweitert um automatische Weiterleitung zu 'persönlichem' geschützten Bereich
Author: Andreas Lindner / Tino Fäustel
Version:2.0
Aenderungen : 05.09.07 : Weiterleitung auch ueber den (ersten) Namen der (ersten) Gruppe, zu der der User gehoert. 

Code: Alles auswählen

?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     Login mit Weiterleitung
* Author(s)   :     Tino Faeustel, www.faeustel.de
* Created     :     05.09.2007

************************************************/

$cms_mode = "CMS_VALUE[1]";

function getSel($value) {
   global $cms_mode;
   if ($value == $cms_mode) {
      return 'selected="selected"';
   } else {
      return "";
   }
   
}

echo '<table cellpadding="0" cellspacing="0" border="0">';
echo '<tr><td>Modus:</td><td class="text_medium" style="padding:5px">';
echo '<select name="CMS_VAR[1]" style="width:300px">';
echo '<option value="0" '. getSel(0) .'>&nbsp;Weiterleitung &uuml;ber Usernamen.</option>';
echo '<option value="1" '. getSel(1) .'>&nbsp;Weiterleitung &uuml;ber Gruppennamen.</option>';
echo '</select>&nbsp;<input type="image" src="images/submit.gif">';
echo '</td></tr>';
echo '</table>';

?><?php 

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Loginbox
* Author(s)   :     Andreas Lindner (erweitert v. Tino Faeustel)
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     05.08.2005
************************************************/

$linkmode = "CMS_VALUE[1]";

#Includes
cInclude('classes', 'class.template.php');

global $loginflag;

// merken (s.u.)
if ( !$sess->is_registered('loginflag' )) $sess->register('loginflag');


/**
* Preferences :  Im geschützten Bereich gibt es für jeden Frontendbenutzer eine eigene Kategorie
*                die mit dem Benutzernamen bezeichnet wird.
*                Das Loginformular ruft automatisch den Startartikel dieser Kategorie auf, unabhängig
*                davon von welcher Seite aus es aufgerufen wird.
*/

// Weiterleitung ueber Gruppe : Gruppenname ermitteln
function getfirstgroup($uid) {
   global $cfg, $client;

   $db = new DB_Contenido;
   
   $sql="SELECT groupname FROM " .
               $cfg['tab']['frontendgroups'] . " fg, " .
               $cfg['tab']['frontendgroupmembers'] . " gm 
         WHERE fg.idfrontendgroup = gm.idfrontendgroup AND
               gm.idfrontenduser = ". $uid . " AND fg.idclient = " .$client .
           " ORDER BY groupname LIMIT 0,1";

   $db->query($sql);
   if ($db->next_record()) {
      return $db->f('groupname');
   } else {
      return "";
   }
}
   


// ermitteln einer Kategorie zu einem Benutzernamen
function getstartcat($username){

   global $cfg, $lang, $idcatart;

   $db = new DB_Contenido;

   $sql = "SELECT idcat FROM " . $cfg['tab']['cat_lang'] . " cat_lang " .
          "WHERE cat_lang.name = '". $username . "' AND cat_lang.idlang = " .$lang;
         
   $db->query($sql);
   if ($db->next_record()) {
      return "idcat=" . $db->f('idcat');
   } else {
      return "";
   }
}

// fuer Ausgabe
if ( !is_object($tpl) ) {
    $tpl = new Template;
}
$tpl->reset();

if ($auth->auth["uid"] == "nobody"){
// nicht angemeldet -> 'normal'
   $template = 'login.html';

   $tpl->set('s', 'TEXT', mi18n("Client Login"));
   $tpl->set('s', 'FORM_ACTION', 'front_content.php?idcatart='.$idcatart);   
   $tpl->set('s', 'USERNAME', mi18n("Username"));   
   $tpl->set('s', 'PASSWORD', mi18n("Passwort"));   
   $tpl->set('s', 'GO', mi18n("Go"));   
   $tpl->set('s', 'LOGIN', mi18n("Login"));   

   $tpl->generate('templates/'.$template);
   
   // Login - Flag Init / Reset
   $loginflag=0;

} else {
   if (($loginflag == 0) ){
   // nur beim ersten mal
      $loginflag = 1; // wegen 'erstes Mal'

      if ($linkmode == 0) {   
   // ueber username
          $weiter = getstartcat($auth->auth["uname"]);  // das ist die Zielcat oder 'idcatart=162';
      } else {
          // ueber gruppe
          $weiter = getstartcat(getfirstgroup($auth->auth["uid"]));
      }   
      if (($weiter != "")  AND ( ! $edit) ) { // nur wenn passende Kategorie vorhanden und NICHT im Backend
         // dann sofort Weiterleitung
      echo '<meta http-equiv="refresh" content="0; URL=' . $sess->url("front_content.php?" . $weiter)  .'">';
      }
   } else {
   // sonst wie immer
      $template = 'logout.html';

      $tpl->set('s', 'CURRENT_USERNAME', mi18n("Hello"));   
      $tpl->set('s', 'USERNAME', $auth->auth["uname"]);   
//      $tpl->set('s', 'HREF', 'front_content.php?idcatart='.$idcatart.'&logout=yes');   
      $tpl->set('s', 'HREF', 'front_content.php?logout=yes');   

      $tpl->set('s', 'LOGOUT', mi18n("Logout"));   
      $tpl->generate('templates/'.$template);
   }
}
?> 
Danke für jede Anwort.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Nach frontend login automatisch bestimmte seite öffnen

Beitrag von homtata » Do 17. Jul 2014, 16:11

Brauchst du wirklich die Funktion, userabhängig unterschiedliche Seiten zu öffnen?

Falls es nur darum geht, die Loginseite EGAL für wen zu ändern, dann nutze einfach das neue form_login Modul und ändere in den Mandanteneinstellungen den Wert von
login | idart | 1

auf einen anderen Wert als "1" und wähle die korrekte idart des Artikels, auf den du einloggen möchtest...

nikko
Beiträge: 34
Registriert: Mo 7. Aug 2006, 14:33
Kontaktdaten:

Re: Nach frontend login automatisch bestimmte seite öffnen

Beitrag von nikko » Mi 6. Aug 2014, 11:20

Hallo homtata,
Vielen Dank für deine Antwort. Ich denke, es wird sehr gut sein, um diese Funktionalität zu haben und in der Lage, unterschiedliche Inhalte für verschiedene Gruppen zu zeigen. Stellen Sie sich dieses Szenario - Ich habe mehrere Bildergalerien und ich möchte einige für alle Benutzer und einige auf bestimmte Benutzer zu zeigen. Wie um dies zu erreichen?

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Nach frontend login automatisch bestimmte seite öffnen

Beitrag von homtata » Mi 6. Aug 2014, 12:11

Hi nikko,

das funktioniert eigentlich anders:
- Du legst geschützte Kategorien an.
- Dann legst du in Administration / Frontend testweise Frontenduser wie auch Frontendgruppen an und bestimmst, welcher User in welche Gruppe gehört.
- In den Frontendgruppen konfigurierst du, welche der geschützten Kategorien für diese Gruppe zugänglich sind.
- Wenn sich nun ein User einloggt, sieht er die für ihn freigegebene zusätzliche Kategorie.

Die Login-Erfolgsseite kann ja immer die gleiche sein...

nikko
Beiträge: 34
Registriert: Mo 7. Aug 2006, 14:33
Kontaktdaten:

Re: Nach frontend login automatisch bestimmte seite öffnen

Beitrag von nikko » Mi 6. Aug 2014, 14:38

Hallo homtata,

Vielen Dank für deine Antwort. Ich weiß, dass diese Möglichkeit besteht. Aber auf der Login-Erfolgsseite habe ich eine Artikel-Liste, erzeugt mit "article_list_reloaded". Ein Benutzer, der Zugriff nur auf eine Kategorie hat, sieht immer noch die Links zu allen Kategorien, darunter auch diese, auf die er keinen Zugriff hat... Wenn dieser Benutzer auf solche Kategorie klickt gibt es eine Nachricht "The page isn't redirecting properly".

Mit dem Modul aus meinem ersten Beitrag war dies nicht der Fall, aber dieses Modul funktioniert nicht in CON493.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Nach frontend login automatisch bestimmte seite öffnen

Beitrag von homtata » Mi 6. Aug 2014, 14:58

okay...

dann musst du lernen, wie man alte Module umschreibt, schau dir mal folgende Seite an:
https://docs.contenido.org/display/COND ... .8+and+4.9

und benutze den Code-Analyzer:
http://www.contenido.org/de/cms/Downloa ... 973-3.html

Der Moduloutput könnte (ungetestet) in etwa so aussehen:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Loginbox
* Author(s)   :     Andreas Lindner (erweitert v. Tino Faeustel)
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     05.08.2005
************************************************/

$linkmode = "CMS_VALUE[1]";

global $loginflag;

// merken (s.u.)
if ( !$sess->isRegistered('loginflag' )) $sess->register('loginflag');


/**
* Preferences :  Im geschützten Bereich gibt es für jeden Frontendbenutzer eine eigene Kategorie
*                die mit dem Benutzernamen bezeichnet wird.
*                Das Loginformular ruft automatisch den Startartikel dieser Kategorie auf, unabhängig
*                davon von welcher Seite aus es aufgerufen wird.
*/

// Weiterleitung ueber Gruppe : Gruppenname ermitteln
function getfirstgroup($uid) {
   global $cfg, $client;

   $db = cRegistry::getDb();
   
   $sql="SELECT groupname FROM " .
               $cfg['tab']['frontendgroups'] . " fg, " .
               $cfg['tab']['frontendgroupmembers'] . " gm
         WHERE fg.idfrontendgroup = gm.idfrontendgroup AND
               gm.idfrontenduser = ". $uid . " AND fg.idclient = " .$client .
           " ORDER BY groupname LIMIT 0,1";

   $db->query($sql);
   if ($db->nextRecord()) {
      return $db->f('groupname');
   } else {
      return "";
   }
}
   


// ermitteln einer Kategorie zu einem Benutzernamen
function getstartcat($username){

   global $cfg, $lang, $idcatart;

   $db = cRegistry::getDb();

   $sql = "SELECT idcat FROM " . $cfg['tab']['cat_lang'] . " cat_lang " .
          "WHERE cat_lang.name = '". $username . "' AND cat_lang.idlang = " .$lang;
         
   $db->query($sql);
   if ($db->nextRecord()) {
      return "idcat=" . $db->f('idcat');
   } else {
      return "";
   }
}

// fuer Ausgabe
$tpl = new cTemplate;
$tpl->reset();

if ($auth->auth["uid"] == "nobody"){
// nicht angemeldet -> 'normal'
   $template = 'login.html';

   $tpl->set('s', 'TEXT', mi18n("Client Login"));
   $tpl->set('s', 'FORM_ACTION', 'front_content.php?idcatart='.$idcatart);   
   $tpl->set('s', 'USERNAME', mi18n("Username"));   
   $tpl->set('s', 'PASSWORD', mi18n("Passwort"));   
   $tpl->set('s', 'GO', mi18n("Go"));   
   $tpl->set('s', 'LOGIN', mi18n("Login"));   

   $tpl->generate('templates/'.$template);
   
   // Login - Flag Init / Reset
   $loginflag=0;

} else {
   if (($loginflag == 0) ){
   // nur beim ersten mal
      $loginflag = 1; // wegen 'erstes Mal'

      if ($linkmode == 0) {   
   // ueber username
          $weiter = getstartcat($auth->auth["uname"]);  // das ist die Zielcat oder 'idcatart=162';
      } else {
          // ueber gruppe
          $weiter = getstartcat(getfirstgroup($auth->auth["uid"]));
      }   
      if (($weiter != "")  AND ( ! $edit) ) { // nur wenn passende Kategorie vorhanden und NICHT im Backend
         // dann sofort Weiterleitung
      echo '<meta http-equiv="refresh" content="0; URL=front_content.php?' . $weiter  .'">';
      }
   } else {
   // sonst wie immer
      $template = 'logout.html';

      $tpl->set('s', 'CURRENT_USERNAME', mi18n("Hello"));   
      $tpl->set('s', 'USERNAME', $auth->auth["uname"]);   
//      $tpl->set('s', 'HREF', 'front_content.php?idcatart='.$idcatart.'&logout=yes');   
      $tpl->set('s', 'HREF', 'front_content.php?logout=yes');   

      $tpl->set('s', 'LOGOUT', mi18n("Logout"));   
      $tpl->generate('templates/'.$template);
   }
}
?>

Antworten