Willkommen im neuen Forum von concrete5.de.
Die Anmeldung ist ab dem 15.10.2020 nur noch mit E-Mail Adresse und Passwort möglich. Eine Anmeldung mit Benutzername ist nicht mehr möglich.

Diese Nachricht löschen.
Anhang entfernen?
Zurück zur Themenliste
S
Steff 0.png 18.12.2009 12:54

Weiterleitung bei Seitenaufruf

Mittels dem Seitenattribut replace_link_with_first_in_nav kann man in einem Menü beim klicken auf den Menüeintrag die erste Unterseite anzeigen lassen. Das funktioniert auch supper.
Beispiel:
Menü1
--> SubMenü1
--> SubMenü2
Wenn nun dem Menü1 das replace_link_with_first_in_nav Attribut gegeben wird, wird beim Klick auf Menü1 automatisch die SubMenü1 angezeigt. Menü1 braucht somit keinen Content, da ja direkt auf SubMenü1 weitergeleitet wird. Es wird als http://mydom.com/Menue1/SubMenue1 aufgerufen.

Leider funktioniert das nur, innerhalb einer Seite. Wenn ich im Browser http://mydom.com/Menue1/ aufrufe, dann wird mir auch die Menue1 angezeigt. Ich möchte aber, dass diese Seite dann auch automatisch auf SubMenue1 weitergeleitet wird.
Im C5.org Froum habe ich bereits gelesen, dass dies mittels MetaTags machbar wäre. Nur leider wird dann die zuerst die Seite Menue1 komplett geladen und danach die SubMenue1, was ein "Flackern" des Browsers mit sich bringt.
Gibt es eine Alternative möglichkeit? Ich denke, dass das hauptproblem darin liegt, dass wenn man dem Menue1 einen Redirect auf SubMenue1 mitgibt, dass Menue1 danach nicht mehr so einfach bearbeitet werden könnte, was eigentlich auch nicht nötig ist, da die Seite ja keinen Inhalt haben wird.

So. Langer Rede kurzer Sinn,
Wie kann ich beim Direktaufruf über eine URL auf die nächste Unterseite weiter leiten?

Danke
Steff
S
Steff 0.png 18.12.2009 13:14
1. Sorry für den Doppelpost.
2. habe ich einen Weg gefunden. Ob der gut ist oder nicht, das sei mal so dahin gestellt. Wenn also jemand noch einen besseren oder anderen Weg haben sollte, habe ich immer ein offenes Ohr.

Meine Lösung:
Ich habe im header.php des Themes folgende Zeilen eingefügt.
<?php
  $nh = Loader::helper('navigation');

  if ($c->getCollectionAttributeValue('MenuOnly')) {
      $subPage = $c->getFirstChild();
      if ($subPage instanceof Page) {
          $pageLink = $nh->getLinkToCollection($subPage);
      }
    echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=$pageLink\" />";     
  }
?>

Das hat folgende Auswirkung. Wenn also das PageAttribute MenuOnly gesetzt ist, dann wird das erste Kind von diesem Menueintrag in der $pageLink gespeichert. Anschliessend wird mit einem META TAG zu genau der Seite weiter geleitet.

Gruss,
Steff
S
Steff 0.png 18.12.2009 13:56
Mit der oben aufgeführen Lösung, kann die Seite nicht bearbeitet werden. Ich habe also die ganze if abfrage noch in folgendes gepackt.
if(!isset($_SESSION['uID'])){

}
Somit wird nur dann weiter geleitet, wenn kein user angemeldet ist.
R
Remo 0.png 21.12.2009 13:57
Das ist etwas lästig, lässt sich aber eigentlich relativ elegant mit den "Application Events" umsetzen.
Folgendes Event einbinden:
Events::extend('on_before_render', 'RedirectUrl', 'redirectUrl', 'helpers/redirect_url.php');
Und in helpers/redirect_url.php kann man anschliessend das Attribut auslesen
class RedirectUrl{ function redirectUrl($page)        {                 // Hier prüfen ob Attribut gesetzt und wenn ja umleiten..         }}
S
Steff 0.png 22.12.2009 08:02
Vielen Dank für den Hinweis und den Code mit den Application Events.

Kannst du mir bitte noch sagen, wo ich den Event einbinden muss? Irgend wie funktioniert das hier bei mir nicht ganz so, wie es sollte.

Danke
R
Remo 0.png 22.12.2009 08:25
du musst Events::extend in site_events.php einfügen und diese Zeile in site.php einfügen:
<?php define('ENABLE_APPLICATION_EVENTS', true); ?>

Ansonsten findest du hier ein hübsches und vor allem kleines Beispiel von Marc:  http://www.concrete5.org/marketplace/addons/scala-it-browser-update-notification
S
Steff 0.png 22.12.2009 08:32
Danke Remo.Hier noch die C5 Doku dazu http://www.concrete5.org/help/building_with_concrete5/developers/mvc/events/
P
paperized 0.png 08.06.2010 22:23
Hi,

schlage mich jetzt seit geraumer Zeit mit einem ähnlichen, wenn nicht sogar dem selben Problem herum. Wenn man meine Domain aufruft, soll automatisch in die erste, in der Hierarchie "tiefste" Seite gesprungen werden. Das würde jetzt in dem Fall wie folgt ausschauen:

home
|- portfolio
|-- web
|--- projekt 1
|--- projekt II
usw.

Man kommt also per Domainaufruf bei der Homeseite an. Dort soll dann sofort auf Projekt I bzw. das aktuellste Weitergeleitet werden. Habe hier auch euren Lösungsansatz getestet, allerdings kommt dann eine Fehlermeldung:

Fatal error: Non-static method RedirectUrl::redirectUrl() cannot be called statically in /Users/paperized/Sites/paperized/paperized-c5/updates/concrete5.4.0.5/concrete/libraries/events.php on line 160
P
paperized 0.png 08.06.2010 22:26
Achso noch die Details:

im Ordner root/helpers befindet sich die redirect_url.php in der folgendes steht:

<?php


class RedirectUrl {
    function redirectUrl($page) {
          
        // Hier prüfen ob Attribut gesetzt und wenn ja umleiten..
       
        if(!isset($_SESSION['uID'])){
       
            $nh = Loader::helper('navigation');
   
            if ($c->getCollectionAttributeValue('MenuOnly')) {
               
                $subPage = $c->getFirstChild();
                if ($subPage instanceof Page) {
                    $pageLink = $nh->getLinkToCollection($subPage);
                }
                echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=$pageLink\" />";    
            }
        }
   
    }
}


?>



Im Ordner root/config habe ich in der site.php folgende Zeile eingefügt:

define('ENABLE_APPLICATION_EVENTS', true);



und in der site_events.php steht Folgendes:

<?php


Events::extend('on_before_render',
'RedirectUrl',
'redirectUrl',
'helpers/redirect_url.php');


?>
R
Remo 0.png 11.06.2010 10:55
Meta Refresh ist kein guter Ansatz in diesem Fall.
Die Seite wird trotzdem angezeigt, der Benutzer braucht länger bis er auf der neuen Seite ist und der Server muss mehr Code verarbeiten.
ich würde hier eher etwas in dieser Richtung empfehlen:header("location: http://www.bla.com");

Nachricht hinzufügen