Einzelnen Beitrag anzeigen
  #1  
Alt 04.07.07, 20:40
Phlogiston Phlogiston ist offline
TYPO3 Forum Team
Administrator
 
Registriert seit: 23.03.07
Beiträge: 535
Daumen hoch Wie User weiterleiten, wenn geschützte Seite angefordert wird? +redirect nachher

Ja es geht eben doch: Ein User fordert eine Seite in einem geschützten Bereich an, wird dann automatisch zu einer Seite mit Login Box weitergeleitet. Er meldet sich dort an und gelangt dann zur vorher angeforderten Seite. Hübsch oder?

Hier ein HOWTO wie das ganze geht, auch wenn es ein wenig hacky/tricky ist

Es gibt 2 Varianten das obige zu erreichen, die 2. bietet mehr Möglichkeiten.

Methode A - nur "HTML"
http://www.typo3forum.net/forum/faq-...html#post67375
1. Im Install Tool die Eigenschaft
Code:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'READFILE:fileadmin/template/main/notFound.html';
so oder ähnlich setzen.
2. Diese Datei erstellen. Der Witz an der Sache ist, das in dieser Datei nun der Marker ###CURRENT_URL### (und auch reason = grund für 404, aber nur auf english) ersetzt werden.
3. Kopiere den HTML Output de in Typo3 erstellten 404 Page mit newloginbox in dieses HTML file.
4. Ändere bei der Newloginbox folgendes (den Marker ###CURRENT_URL### einsetzen)
PHP-Code:
<form action="###CURRENT_URL###" target="_top" method="post" onSubmit=""
5. Fertig


Methode B - PHP Userfunction
1. Im Install Tool die pageNotFound_handling Option auf sowas setzen:
Code:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'USER_FUNCTION:fileadmin/template/main/pageNotFoundHandling.php:user_pageNotFound->pageNotFound';
2. In diesem PHP File eine Klasse und eine Methode erstellen:
PHP-Code:
<?php

class user_pageNotFound {
    function 
pageNotFound($param,$ref){
          
//code goes here, thats executed on 404
         
}
}
2. Code einfügen. Ich habe hier einfach mit echo den Webseiten HTML Code ausgegeben:
PHP-Code:
<?php

class user_pageNotFound {
    function 
pageNotFound($param,$ref){
        
//print out the normal page as HTML
        //TODO: Maybe its possible to get the content of a 404Page from the Pagetree?
        
echo '<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-CH" lang="de-CH">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<!--
    This website is powered by TYPO3 - inspiring people to share!
    TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.
    TYPO3 is copyright 1998-2006 of Kasper Skaarhoj. Extensions are copyright of their respective owners.
    Information and contribution at http://typo3.com/ and http://typo3.org/
-->
#####SNIP#####
    <!--  CONTENT ELEMENT, uid:582/text [begin] -->
        <a id="c582"></a>
        <!--  Header: [begin] -->
            <div class="csc-header csc-header-n1"><h1 class="csc-firstHeader">Die gewählte Seite konnte nicht gefunden werden.</h1></div>
        <!--  Header: [end] -->
        <!--  Text: [begin] -->
            <p class="bodytext">Leider konnte die Seite &nbsp"'
;    
            echo 
'http://'.getenv("SERVER_NAME").$param['currentUrl'];
            echo 
'&nbsp;" nicht gefunden werden. Falls die URL doch korrekt sein sollte, wenden Sie sich bitte an den Webmaster. Dies können Sie mittels des Formulars unter Kontakt tun.</p>
        <!--  Text: [end] -->'
;

        
//now check if the requested URL is from the protected area
        //works nice in this case because all pages are after /leiterbereich
         
if (strripos($param['currentUrl'],'leiterseite')){
             echo 
'    <!--  CONTENT ELEMENT, uid:582/text [end] -->
                            <!--
                        BEGIN: Content of extension "newloginbox", plugin "tx_newloginbox_pi1"
                    -->
                    <div class="tx-newloginbox-pi1">
                
                <br/><br/><br/>
                
                <h3>Login, falls geschützte Seite angefordert wurde</h3>
                
                
                
                <form action="'
;echo $param['currentUrl'];echo '" target="_top" method="post" onSubmit="">
                    <table>
                        <tbody>
                            <tr>
                                <th><label for="user">Benutzername:</label></th>
                                <td><input type="text" id="user" name="user" value="" /></td>
                            </tr>
                            <tr>
                
                                <th><label for="pass">Passwort:</label></th>
                                <td><input type="password" id="pass" name="pass" value="" /></td>http://www.typo3forum.net/forum/faq-sonstiges/21757-wie-user-weiterleiten-wenn-geschuetzte-seite-angefordert-wird-redirect-nachher.html#post67375
                            </tr>
                
                            <tr>
                                <th><label for="permalogin">Angemeldet bleiben:</label></th>
                                <td>
                                    <input name="permalogin" value="0" type="hidden" disabled="disabled" id="permaloginHiddenField">
                                    <input name="permalogin" value="1" type="checkbox" checked="checked" id="permalogin"  onclick="document.getElementById(\'permaloginHiddenField\').disabled = this.checked;" />
                http://www.typo3forum.net/forum/faq-sonstiges/21757-wie-user-weiterleiten-wenn-geschuetzte-seite-angefordert-wird-redirect-nachher.html#post67375http://www.typo3forum.net/forum/faq-sonstiges/21757-wie-user-weiterleiten-wenn-geschuetzte-seite-angefordert-wird-redirect-nachher.html#post67375
                                </td>
                            </tr>
                
                        </tbody>
                        <tfoot>
                            <tr>
                                <td></td>
                                <td>
                                    <input type="submit" name="submit" value="Anmelden" />
                                </td>
                
                            </tr>
                        </tfoot>
                    </table>
                    <input type="hidden" name="logintype" value="login" />
                    <input type="hidden" name="pid" value="99" />
                    <input type="hidden" name="redirect_url" value="" />
                
                </form>
                
                
                <p><a href="leiterseite/?no_cache=1&tx_newloginbox_pi1%5Bforgot%5D=1">Passwort vergessen?</a></p>
                
                
                
                    </div>
                
                    <!-- END: Content of extension "newloginbox", plugin "tx_newloginbox_pi1" -->'
;
        }
        
//now print out the rest of the page :smile:
        
echo '                
######SNIP#######
                '
;
    }
}

?>
Bemerkung: Wie man sieht wird auf meiner Seite die Loginbox nur dann angezeigt, wenn die angeforderte URL in einem geschützten Bereich war. Genau das ist mit der Methode A nicht möglich.

Ergänzung zur Methode B: Man könnte den Inhalt einer Typo3 404 Seite mit folgendem Code auslesen. Somit wäre sichergestellt, dass bei Designänderungen auch die 404 Seite gleichbleibt. Im Weiteren kann man dann einfach konfortabel eine typo3 Seite verwalten. Der Marker setzt man einfach mit einem passenden str_replace denke ich.
PHP-Code:
     $file fopen ("http://mydomain.com/index.php?id=206""r"); //link zur Typo3 404 Page
if (!$file) {
    echo 
"<p>Keine 404 Page gefunden.</p>\n";
    exit;
}
    
$tmp fread ($file,99999);
    
$tmp str_replace('action="leiterseite/"','action="'.$param['currentUrl'],$tmp); //achtung diese Zeile ist noch nicht getestet...
    
echo $tmp;
fclose($file); 

Vielleicht ist das ja sogar verständlich.
Richtig cool wäre es natürlich, wenn man mit ein wenig php den Seiteninhalt einer in Typo3 erstellten 404 Page holen könnte. Vielleicht kann das ja mal jemand machen.

Geändert von Junior (13.12.07 um 16:28 Uhr).
Mit Zitat antworten
Sponsored Links