• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

externe PHP-Seite einzeln nachladen?

Danke, das ist ein brauchbares Stichwort!

Jetzt kann ich schauen, ob und wie ich das umsetzen kann.

(Das Blöde ist, wenn man sich alles im Selbststudium aneignen muß...)
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Sehe ich das richtig, das der Request vom Kalender aus ausgeführt werden muß?

Wenn nicht, habe ich einen Fehler in meinem Code, weil er mir jetzt die Index mit in den Content läd, wenn ich den Kalender aufrufe...


Irgendwie habe ich wohl wieder ein falsches Tut erwischt... Mist!


Ohne Hilfe werde ich das wohl alleine nicht so schnell schaffen...

Bin echt kurz vor'm Aufgeben...

(ich will ja keine auf mein Projekt gefertige Scripte... Aber ich brauche aber wenigstens Referenzen, damit ich sehe, wie es in etwa aussehen müßte...)
 
Zuletzt bearbeitet von einem Moderator:
Ich versuch dir jetzt nochmal den Aufbau zu erklären.


Du hast eine Datei index.php, in welche Du eine Kalender-Modul inkludierst (ebenfalls ne PHP-Datei?). Die index.php enthält das komplette Markup der Website, bis auf den Content. Nehmen wir an, die index.php sieht so aus:

PHP:
<html>
    <head>
        <title>MyWebsite</title>
    </head>
    <body>
        <div id="content"><?php include('pfad/zum/klaenderModule/Kalender.php'); ?></div>
    </body>
</html>

Durch das Einbinden der Datei Kalender.php sieht der Quelltext deiner index.php, welche Du im Browser aufrufst, z.B. foglendermaßen aus:

HTML:
<html>
    <head>
        <title>MyWebsite</title>
    </head>
    <body>
        <div id="content"><a href="Kalender.php?show_appointment=22.05.2012">Zeige Termine vom 22.05.2012</a></div>
    </body>
</html>

Klickst Du nun den Link an, ist natürlich dein Grundgerüst futsch, da Du von der index.php zur Kaleder.php wechselst. Möchtest Du nun das "Hinaushüpfen" deines Contents - also des Kalenders - mit AJAX vermeiden, muss der Klick auf diesen Link einen AJAX-Server-Request auslösen. Die Server-Antwort dieses AJAX-Server-Requests schreibst Du mittels JavaScript in den div#content hinein. Für das abschicken eines AJAX-Request empiehlt es sicht, auf ein Framework zu setzen. Dafür würde ich dir jQuery empfehlen (ein Framework, also eine Ansammlung von Funktionen und Klassen, geschrieben in JavaScript). Erstmal musst Du die Links, die in der Kalender.php-Datei erzeugt werden, umschreiben:

Aus
HTML:
<a href="Kalender.php?show_appointment=22.05.2012">Zeige Termine vom 22.05.2012</a>

sollte z.B.
HTML:
<a href="#" onclick="load('Kalender.php?show_appointment=22.05.2012')">Zeige Termine vom 22.05.2012</a>
werden.

In der index.php definierst Du im head-Teil nun folgendes:
HTML:
<html>
    <head>
        <title>MyWebsite</title>
        <script src="pfad/zur/jquery-datei/jquery.js"></script>
        <script type="text/javascript">
            function load(url) {
                $.ajax({
                    url: url,
                    success: function(serverResult) {
                        $('#content').html(serverResult);
                    }
                });
            }            
        </script>
    </head>
    <body>
        <div id="content"><?php include('pfad/zum/klaenderModule/Kalender.php'); ?></div>
    </body>
</html>
 
Werbung:
T!P-TOP, leider läuft das nicht so ab...

Ich fange lieber noch mal von vorne an, um Mißverständnisse auszuschließen. (Ich habe imich in meinem Frust wohl auch schlecht ausgedrückt bzw den Ablauf falsch beschrieben)

Das Kalender-Modul besteht aus mehreren Ansichtendateien (wie Gastansicht guest.php, Admin-Konsole admin.php) sowie weiteren Hilfsdateien in PHP, CSS und JS.

Ich includiere die guest.php ganz normal per Menü in den Content.
Jetzt liegt die "Start-Ansicht" der Datei normal inkludiert im Content (so, wie es auch erwartet wird).

OK, bis hierher ist alles so, wie es sein soll.

für das Ausführen von Kalenderaktionen (egal ob Gast oder Admin) ist eine externe PHP zuständig, die die neuen Ansichten nach den Aktionen per Links (href) abruft:

PHP:
    $dayout = '<a href="'.CALENDAR_PAGE.$link.'" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';

In der Config wird CALENDAR_Page wie folgt definiert:

PHP:
define('CALENDAR_PAGE', './kalender/guest.php?');


Was jetzt in der Adressleiste nach dem Anklicken eines Tages steht:

<URL>/guest.php?date=2012-05-22

Das ist das, was aus der Hilfsdatei des Kalenders kommt.


Nach einigen Überlegungen muß ich also wohl den String der Hilfsdatei so verändern, dass hier keine "Link-Ausgabe" erfolgt, sondern ein JS/Ajax ausgeführt wird, um die Seite im Content dynamisch zu aktualisieren.

include wird also nicht gehen... Aber wie baue ich request ein, so dass er die guet.php mit dem Funktionsaufruf "?date=2012-05-22" abruft und wie leite ich die Serverantwort in den Content?

Ich hatte schon versucht, den href-Inhalt durch "javascript:setRequest" (und externe Dateien) zu ersetzen.
Hat aber nicht geklappt...

Der Aufruf der Kalender-Seite aus dem Menü heraus per "javascript:setRequest" hatte einen Haken:
Dabei wurde in den Content geladen: noch einmal die index.php und hier dann in dessen Content die Kalenderdatei.

An der Stelle hatte ich heute Nacht dann weitere Testst abgebrochen...

Greift da das Script aus dem von dir vorgeschlagenen <head>-Tag trotzdem?

---

Wenn ich wüßte, wie ich den String in der Kalender-Hilfsdatei richtig umstellen müßte...

Inzwischen möchte ich fast behaupten, dass dieser String der entscheidende Knackpunkt ist, an dem die Sache hakelt...
 
Zuletzt bearbeitet von einem Moderator:
@T!IP-TOP:

Ich habe versucht, die von dir vorgeschlagene Link-Definition in der Hilfsdatei einzubinden...

Nur wie soll ich ".$link" unterbringen?

Jedesmal bekomme ich vom Browser Seitenfehler-Meldungen.

Wenn ich deinen Code
PHP:
<a href="#" onclick="load('Kalender.php?show_appointment=22.05.2012')">Zeige Termine vom 22.05.2012</a>

richtig deute, muß ich den Code der Hilfsdatei
PHP:
$dayout = '<a href="'.CALENDAR_PAGE.$link.'" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';

ja wie folgt umstellen

PHP:
$dayout = '<a href="#" onclick="load('.CALENDAR_PAGE.$link.')" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';


Richtig?

Weil ".CALENDAR_PAGE" übernimmt ja aus der Config dem Pfad und Dateinamen der guest.php mit dem "?" und ".$link." setzt ja die jeweilige Funktion (z.B. "date=2012-05-22") ein


Nach dem internen Erstzen der Schlüssel sollte der so entstehende und aufzurufende Link dann also "übersetzt" lauten:
PHP:
...'<a href="#" onclick="load('guest.php?date=2012-05-22')...>...</a>

Richtig?

gehe ich nun mit der Maus über einen Tag, wird nur folgender Link angezeigt:

;ugl :?:

Außerdem habe ich eine Meldung Seitenfehler (IE 8)

... und ich gelange zum Seitenanfang, ohne dass sich zusätzlich die Tagesliste im Content öffnet (was ja eigentlich bei dem Link hätte passieren sollten)


gebe ich das oben gedachte Resultat
PHP:
<a href="#" onclick="load('guest.php.$link.')"...
ein (ich kann auch ".$link." weglassen"), dann wird die Seite nicht mehr richtig aufgebeut und ich bekommen für die Hilfsadtei eine Fehlermeldung betreffs der Anweisungen in der editierten Zeile...


verwende ich nun meinen Link aus dem Menü

HTML:
 <a href="index.php?id=events" ...>...</a> in der hilfsdatei eintrage, öffnet er die Startansicht des Kalenders im Content. (eigentlich schon ein gewünschter Ansatz, wei es sein soll)

Aber wie zum Teufel bekomme ich das ".$link" untergebracht, so dass er auch noch die Funktion ausführt?
(ich kann ja keine festen Anweisungen hier reinschreiben, weil er dann ja auf jedem Tag dann immer nur das selbe datum abrufen würde, egal, welchen Tag ich anklicke)


Was ist mein (Denk)Fehler?

Oder liegt es dartan, dass der Link aus einem PHP-Script heraus aufgerufen wird?

Oder würde es noch einigen Quellcode benötigen, damit es dann funktionieren würde?


Ist das ätzend! man sieht, dasss sich da was ansatzweise tut - man also garnicht so weit weg vom Ziel zu sein scheint, aber es fehlt der entsprechende Durchbruch...

---

Der Inhalt des Contents muß ja nicht unbedingt dynamisch ersetzt werden.

Wichtig ist, dass der Calender im Content bleibt und sich nicht exclusive im Browser aufruft. 

Hauptziel: Kalender bleibt nach Funktionsaufrufen im Content
alternatives Ziel: index.php inklusive der neuen, aktualisierten Kalenderansicht laden
(Der Content muß aso nicht unbedingt dynamisch nachgeladen werden, wenn obige Ziele möglich sind)
 
Hallo,
kopiere dir bitte den dateinamen+alles was dahinter steht, wenn du den Kalender gerade von der startseite deiner homepage aufgerufen hast und noch nicht im Kalender rumgeklivkt hast. Nicht den Pfad mitkopieren!
Beispiel:
Adresszeile des Browsers: http://www.example.com/Pfad/Pfad/Pfad/dateiname.dateiendung?bliblablub
du musst kopieren: dateiname.dateiendung?bliblablub

Soweit ich da durchgestiegen bin, musst du nur die Definition von CALENDAR_PAGE ändern:
statt ./kalendar/guest.php? musst du das was du dir oben kopiert hast einfügen.
Im Beispiel musst du also ./kalendar/guest.php? durch dateiname.dateiendung?bliblablub ersetzen. Sonst NICHTS ändern und alles mit ajax wieder vergessen, wenn ich da durchgestiegen bin.
 
Werbung:
Ich glaube nicht, dass das richtig sein kann...

wenn ich die Funktion "date=2012-05-22" anhänge, würde er mir bei jedem angeklickten Datum die Termine vom 22.05.2012 ausgeben.

$funktion ist aber variabel, da es alle möglichen Datumsangaben wie auch das Monat vor/rück-blättern beinhaltet.


also stellt .$funktion nicht nur date=yyyy.mm.tt dar, sondern auch go_fwd und go_back.

-----------------

Ich hatte jetzt noch mal recherchiert...

anstelle von onclick="load()" habe ich auch solche Syntaxen gefunden:

onClick="loadpage()" oder onClick="loadSite()" oder onClick="loadContent()"...

Aber auch dieses ohne Erfolg...
=> Seitenfehler und der Links würde lauten: <url>/index.php#

Auch legt er mir mit T!P-TOPs Scripten nichts in den definierten Content rein.

Wie sieht es eigentlich aus, wenn dieser href-String in der Kalender-Hilfsdatei steckt? Muß dann in dieser PHP nicht auch 'ne Anweisung zu den JS-Dateien vorhanden sein, um JS ausführen zu können oder reichen die verweise in der index.php aus?


Ich mache irgend etwas noch falsch... - Bin aber zuversichtlicher denn je, sehr nahe an der Lösung dran zu sein...
 
Zuletzt bearbeitet von einem Moderator:
Hallo frank87,

hast du denn schon meinen Tipp oben ausprobiert?

Ich würde es ja mal versuchen, an deiner Stelle. Vielleicht hast du ihn ja nur übersehen.

Gruß janm
 
janm,

das haut -wie ich es schon vermutet habe- nicht hin.

.CALENDAR_PAGE definiert <pfad>/datei.php?
und
$.link. definiert, welche "Funktion" hinter das Fragezeichen angehängt wird (date=yy.mm.dd oder fürs Blättern in den monaten: go=fwd bzw go=back)

'.CALENDAR_PAGE.$link.' ergibt also in der Adreßleiste des Browsers dann: <url>/<pfad>/datei.php?<funktion> (ausgeschrieben z.B. <url>/kalender/guest.php?date=2012.06.24 oder ...?go=fwd)

versuche ich den href-String
<a href="'.CALENDAR_PAGE.$link.'" class...
wie folgt umzuschreiben
<a href="#" onclick="load(...)"...
dann springt er nur auf Position "Top", ignoriert aber den Rest des <a>-Tags und IE gibt aus:
"Ferig, es sind Fehler auf der Seite aufgetreten.", die anderen Testbrowser zeigen nur die Linkadresse <url>/index.php?id=kalender#


Die Sache hängt sich an der Raute auf und reagiert auf die Raute, als wenn man den "Seitenanfang-Anker" aufruft.


Selbst wenn ich die index.php verwende, die schon den dynamische Content-Austausch beinhaltet... Das gleiche Spiel in grün...


Irgendwo habe ich heute gelesen, dass bei href=#" eine ID bei sein muß... - Bringt auch nix...


Irgendwie sieht es auch aus, als wenn das JS nicht greift.
In der Index wird jquery.js + die "loader.js" geladen.

Greifen die hier geladenen JS-Dateien dann auch in der "Kalenderfunktionen.php"-Datei, wenn die guest.php in den Content includiert wird?
 
Werbung:
anstelle von onclick="load()" habe ich auch solche Syntaxen gefunden:

onClick="loadpage()" oder onClick="loadSite()" oder onClick="loadContent()"...
Bei XHTML onclick, bei HTML onClick - spielt aber keine wirklich große Rolle, wie Du das schreibst. load() darfst Du doch nicht einfach in loadpage(), loadSite() oder loadContent() umbennen. Wenn Du es umbenennst, dann musst Du ja auch der JavaScript-Funktion den selben Namen geben. Hast Du mein Beispiel auf der letzten Seite überhaupt verstanden? Dir ist schon Klar, dass es sich bei load() um einen Funktionsaufruf handelt!?


Wie sieht es eigentlich aus, wenn dieser href-String in der Kalender-Hilfsdatei steckt?
?? Mein Beispiel ging ja davon aus, dass der Hypertext-Verweis in der Kalender-Hilfsdatei steckt.



Nochmal:
Du schreibst sämtliche Anchors in sämtlichen Kalender-Dateien folgendermaßen um:

Folgendes...
HTML:
<a href="[Anchor-href]">[Anchorname]</a>
...wird zu...
HTML:
<a href="#" onclick="loadContent([Anchor-href])">[Anchorname]</a>
....oder alternativ....
HTML:
<a href="javascript:loadContent([Anchor-href])">[Anchorname]</a>

Hier habe ich die Funktion nun loadContent() genannt; demnach änder eben die im head-Bereich stehende Funktion auch auf diesen Namen um:

Folgendes...
PHP:
function load() {
    // ...
}

...wird zu...
PHP:
function loadContent() {
    // ...
}

Sollte der Content nicht hineingeladen werden, wirst Du mit großer Wahrscheinlichkeit einen JavaScript-Fehler eingebaut haben. Um diesen möglichst einfach zu finden, öffnest Du die Browser-Konsole und anschließend F5. Bei mir ist die Konsole unter Firefox hier zu finden: Extras >> Web-Entwickler >> Web-Konsole
Solltest Du sie nicht finden, kannst es auch mit folgendem Tastenkürzel probieren: Umschalt+STRG+K
 
@T!P-TOP

Danke für die Erklärungen... Dadurch werden mir die Zusammenhänge klarer, was mir die Fehlersuche erleichtern sollte...


Betreffs load():

Ja, das ist mir klar, dass es in Funktionsaufruf ist. => "Lade beim Anlicken"
Deswegen habe ich mich ja gewundert, dass er darauf null Reaktion zeigt... (außer der Sprung zum Seitenanfang)

---

href-Verweis in der Hilfsdatei:

OK, ich hatte dich wohl falsch verstanden...
Das ist wohl auch der Grund dafür, dasss ich mir nicht sicher war, dass der String genau so in der Kalenderhilfsdatei stehen muß. (Du hattest nur "...load(...)..." geschrieben)

Demzufolge sollte die Syntax dann ja so lauten:
PHP:
$dayout = '<a href="#" onclick="loadContent('.CALENDAR_PAGE.$link.')" class="tooltip">...

Der Ankername ergibt sich ja aus dem String
PHP:
...<b>'.$day.'</b><span class="twrapper">'.$output.</a>';

Richtig?
(Hier hängt er sich aber an der Raute auf und springt nur zum Seitenanfang. => irgendwo ein Code-Fehler meinerseits, den ich jetzt suchen muß.)


auch mit
HTML:
<a href="javascript:loadContent('.CALENDAR_PAGE.$link.')"...
gab es keine wünschenswerte Reaktion, weswegen ich mich erst einmal am "oncllick" festgebissen hatte...

---

Tja... Klar, dass es nicht funktionieren wollte...

Dank deiner Hinweise sind die Zusammenhänge jetzt für mich sichtbarer und ich werde versuchen, die Sachen entsprechend umzustellen.

Ach, eine Frage noch zum Script im head-Tag:

"url: url," anstelle von url: url muß hier doch sicher url: "index.php" stehen?
Richtig?


Ich werde es im Laufe des Tages noch einmal versuchen und dann berichten, was passiert...


Wie ich schon geschrieben habe: Wenn man sich alles selber und ohne Hilfe anlesen/aneignen muß, ist es nicht leicht, Zusammenhänge sofort zu erkennen und man macht öffters mal idiotische Fehler...

Deswegen danke ich dir für deine Geduld, mir die Zusammenhänge zu erklären.
 
Zuletzt bearbeitet von einem Moderator:
So langsam habe ich keine Haare mehr...

Die FF-Konsole meckert mir je nach dem, was ich bei href eingetragen habe jeweils <datei>:1

wenn: href="#" onclick... => index.php:1
wenn: href="javascript:eek:nclick... => guest.php:1

klicke ich auf die jeweils verlinkte Datei passiert folgendes:

index.php => Zeile <!DOCTYPE...> ist rot unterlegt
guest.php => leeres Fenster (Zeile 1 wäre aber auch hier <!DOCTYPE...>)

:?

Was passiert, wenn ich mit der Maus über den anzuklickenden Tag (ist ja der Link zur Funktion "Liste die Termine dieses Tages") gehe?

href="#"... => Anzeige: <url>/index.php#
href="javascript:... => Anzeige: javascript:loadContent(./kalender/guest.php?date=2012-05-26)


jquery.js wird im head-Tag der index.php geladen und direkt dadrunter habe ich deinen Code übernommen, jedoch aus "#content" wurde #ajaxcontent gemacht (so wie meine div-ID lautet)

...und bei "url: url" hatte ich ": url" durch ": "index.php"" ersetzt und auch "'.CALENDAR_PAGE.$link.'" versucht. (das Komma dahinter ist geblieben)


---


Habe ich wirklich irgendwo einen blöden Denkfehler oder übersehe ich irgend etwas?
 
Werbung:
So, es sieht wohl eher so aus, als dass ich nicht zu blöde bin, sondern dass die Änderung des href-Strings ("href="#" ..." bis hin zum '.CALENDAR_PAGE.$link.') inkompatibel zum Script der Kalender-Hilfsdatei ist.

Sobald die Raute im Spiel ist, spinnt die Hilfsdatei, welche ja die Kalenderfunktionen steuert.


Warum?

Die normale Funktion wäre, dass -egal ob aus dem Sidebar-Kalender oder aus der Gastansicht- wenn die Maus über einen "belgten Tag" steht und der tag angeklickt wird, die guest.php (Gastansicht) geladen werden soll.

Auch beim Blättern der Monate in der Gastansicht wird nun zur HP-Startansicht gewechselt, anstatt in der Gastansicht zu bleiben...

Sobald aber href="#" lautet passiert folgendes:

Aus dem Sidebar-Kalender ignoriert er "CALENDAR_PAGE" (steht ja für die guest.php?) und setzt dafür "index.php#" (wenn HP gerade gestartet wurde und kein Menü-Punkt aufgerufen wurde) bzw. "index.pnp?id=[aktuelle Seite]# ein. ([aktuelle Seite] => je nach dem, welcher Menüpunkt aufgerufen wurde: z.B. index.php?id=beispiel.php#)

Aus der Gastansicht (guest.php) setzt er also dafür index.php?id=kalender# ein.

OK, also das wird dann wohl nichts mit dem "in den Content zwingen".
...außer es findet sich ein mit dem Script der Hilfsdatei kompatibler Weg.
 
Neue Frage

So Leute...

Ob ihr es glaubt oder nicht: Es hat sich etwas getan und ich habe einen Teilerfolg zu verzeichnen!
...nur leider nicht auf Eure Art der Vorgaben...


Folgende Syntax in der Hilfsdatei hat jetzt gegriffen (und das Ganze ganz ohne JS-Scripte!)...

aus der originalen Zeile
PHP:
$dayout = '<a href="'.CALENDAR_PAGE.$link.'" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';

wurde jetzt:

PHP:
$dayout = '<a href="?id=kalender&'.$link.'" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';

(auf das "&" bin ich eher zufällig gestoßen... - eine Ableitung von anderen Fallbeispielen mit Mehrfach-Funktionen)

Klicke ich jetzt im Sidebar-Kalender einen Tag mit Terminen (einen "Link") an, so wird die Gastansicht des Kalenders im Content geöffnet (ja, die Kalenderansicht wird wirklich in den Content includiert!!!) und es wird dann sofort die Tagesliste mit angezeit (so wie es eigentlich auch sein soll, wenn man im Sidebar einen Tag anklickt).

Wechsel ich nun im Menü zur Gastansicht (startet ja ohne Tagesliste) und klicke hier auf einen Tag: Die entsprechende Tagesliste wird geöffnet! (also auch die normale Funktion, wie es sein soll)



So weit -so gut! Aber nun kommt das große ABER:

Wenn ich jetzt in der Gastansicht die Monate blättern will, dann springt er von der Gastansicht zum Default-Inhalt (Startseite) und im Sidebar-Kalender wird jetzt der nächste Monat angezeigt (je nach dem, welche richtung geblättert: +1 oder -1)


Das heißt also, ich muß jetzt nur noch einen Weg finden, wie er in der Gastansicht bleibt, wenn in der Gastansicht in den Monaten geblättert wird...

(so, ich brauch erst einmal 'ne Mütze voll Schlaf :roll:)

---

Nachtrag:

Ich vermute, dass ich eine if-else-Anweisung nach folgendem Sinnbild benötige:

Wenn "guest.php" geöffnet ist, dann Action-Pfad "guest.php?go=[Blätter-Richtung]" sonst (also wenn nicht guest.php) Action-Pfad "index.php?go=[Blätterrichtung]

Ist so etwas möglich?


------------------------------------

PS @janm:

Deine Überlegung und der Lösungsansatz hat sich demzufolge fast bestätigt.

Nur, dass ich an Stelle des von dir vorgeschlagenen, zu übernehmenden "bliblablub" (date=[datum]) einfach nur das ".$funktion." anstatt "date=[Datum] übernehmen mußte und halt die "&-Verknüpfung" benötige, damit er " .$link. " richtig auswertet
(Ja, manchmal sieht man den wald vor lauter Bäumen nicht, weil man auf einen anderen Lösungsansatz fixiert ist/war...)

Im Nachhinein gesehen:

Wenn er auf "#" das als Sprungziel "Seitenanfang" interpretiert hat, hätte ich mal gleich schauen sollen, wie er auf das "?" reagiert hätte...

=> Keine Fehlermeldungen mehr!

... und dann das "?" nur noch entsprechend erweitern und schauen müssen, was passiert.


----------

So, nun habe ich in der funktionsausführenden Hilfsdatei des Kalenders wieder die ursprüngliche original-Zeile...

PHP:
$dayout = '<a href="'.CALENDAR_PAGE.$link.'" class="tooltip"><b>'.$day.'</b><span class="twrapper">'.$output.'</span></a>';

...stehen


in der Config steht jetzt die letzte Pfadkonfiguration, die ich in der Kalenderhilfsdatei stehen hatte und zum Erfolg geführt hat:

PHP:
define('CALENDAR_PAGE', 'index.php?id=kalender&');


Entgegen meiner ersten Vermutung wird die Funktion "Blätter Monat vor/zurück" über eine andere Konfiguration in der Hilfsdatei ausgeführt.

die Stings dafür lauten:
PHP:
   $linkback = '<a href="'.$this->self_link.'go=back" title="Vorheriger Monat">&lt;&lt;</a>';
   $linkforward =  '<a href="'.$this->self_link.'go=forw" title="Folgender Monat">&gt;&gt;</a>';

Der gesamte Steuer-Block lautet:
PHP:
   // Start output
   echo '<table summary="month" cellpadding="0" cellspacing="0" class="month">'."\n";
  if (ENABLE_SESSION) {
   $linkback = '<a href="'.$this->self_link.'go=back" title="Vorheriger Monat">&lt;&lt;</a>';
   $linkforward =  '<a href="'.$this->self_link.'go=forw" title="Folgender Monat">&gt;&gt;</a>';
  } else {
   $linkback = "";
   $linkforward = "";
  }
   echo '  <tr><th colspan="7">'.$linkback."&nbsp;&nbsp;".$this->monthName[$this->showMonth['mon']]." - ".$this->showMonth['year']."&nbsp;&nbsp;".$linkforward.'</th></tr>'."\n";
   echo '  <tr class="days">';
   foreach($this->dayName AS $day) echo "<td>$day</td>";
   echo "</tr>\n";


Ich muß jetzt also nur noch rausfinden, wie ich dieses Blättern in den Monaten so hinbekomme, dass z.B. beim Blättern im Sidebar-Kalender immer wieder die index,php mit dem aktuellen Seiteninhalt aufgerufen wird.
(also die Seitenanzeige, auf der ich mich gerade befinde, wenn ich im Sidebar-Kalender zu blättern beginnen will)

Derzeit wechselt er immer zum default-Seiteninhalt, was ja die "Startseite" wäre...

Das Problem ist, dass " '.$this->self_link.' ... " lediglich " ?go=... " erzeugt und nicht die aktuelle Seitenansicht registriert/erkennt.
Beispiele:
Startansicht der HP (ohne einen menü-Punkt gewählt zu haben): => "<url>/?go=..."
nach Aufruf eines Menü-Punktes: => "index.php?go=..."

In der Hoffnung, dass der String funktionieren wird, ist diese Ausgabe gewünscht: "index.php?id=[aktuelle Seitenansicht]&go=..."

Weitere Verknüpfungen mit " '.$this->self_link.' " wären folgende 2 Strings:

PHP:
var $self_link   = "";
und
PHP:
  function prepare($edit = false){
  $this->edit = $edit;
  $parsed = parse_url($_SERVER['REQUEST_URI']);
  $this->self_link = $parsed['path']."?";
  /*
  if ($target_link=="") $target_link = ADMIN_PAGE;         
  $this->target_link = $target_link;
  if ($go_link=="") $go_link = $self;
  $this->go_link = $go_link;
  echo "ta: $target_link <br/>";  
  echo "go: $go_link <br/>";
  */
  
    $this->actions_do($_REQUEST); //process user-actions
  $this->check_go();
    $this->load_events();
  }

Ich wäre für Lösungsansätze (hilfreiche Tipps, was ich nachschlagen könnte) dankbar!


Gruß Frank
 
Zuletzt bearbeitet von einem Moderator:
OK, betreffs der Frage, wie ich in den Monaten blättern kann und wie er dabei auf der aktuell aufgerufenen Seite bleibt, das habe ich nun auch so halbwegs rausgefunden...

Folgende Zeilen waren entscheidend:

PHP:
$parsed = parse_url($_SERVER['REQUEST_URI']);
  $this->self_link = $parsed['path']."?";


Die Änderung muß in der zweiten Zeile stattfinden...

$parsed['path'] gibt mir den Pafad bis vor das "?" im url-String aus. (also: "<url>/index.php")

Demzufolge würde er nur ausführen wollen: <url>/index.php?go=...

Klar, dadurch springt der Content auf "default Content"...


Die Recherchen ergaben, dass ich mit "$parsed['query']" den String hinter dem "?" (welches ja beim includieren eingefügt wird) ausgeben kann...


1 und 1 sollten doch 2 ergeben, oder?

Also habe ich versucht "path" und "query" zusammen zu fügen:

PHP:
  $this->self_link = $parsed['path']."?". $parsed['query']."&";

so weit - so gut...

Zwischenfrage: Ist das die korrekte Lösung?


Aber die Sache hat einen Haken! :shock:

=> jedes Mal, wenn ich nun auf der selben Seitenansicht Monat vor oder zurück anklicke, fügt er an den url-String ein weiteres "&go=..." an... :?:shock:


Hat jemand eine Ahnung, wie ich dieses anfügen eines weiteren "&go=..." an den url-String (in der Adressleiste) unterbinden kann?
 
Werbung:
OK, auch dieses Problem habe ich gelöst...

PHP:
  $parsed = parse_url($_SERVER['REQUEST_URI']);
  $parsed['query'] = str_ireplace('&go=forw','', $parsed['query']);
  $parsed['query'] = str_ireplace('&go=back','', $parsed['query']);
  $this->self_link = $parsed['path']."?". $parsed['query']."&";

Zeile 2 und 3 "löschen" mir die "&go=..."-Eintragungen im url-String hinter dem "?"...
Jeder Klick auf "Monat vor" oder "...zurück" überschreibt somit den letzten "&go=..."-Eintrag.


Jetzt funktioniert der Kalender, wie ich es haben möchte:
1. die Gast-Ansicht des Kalenders wird in den Content der HP includiert
2. Ein Klick auf einen Tag öffnet die Tages-Terminliste (auch aus dem Sidebar-Kalender)
3. ich kann in jeder Ansicht (aufgerufener Content) der HP in den Monaten blättern, ohne dass die Ansicht auf "default" (Startseite) springt


--------


Wie beurteilen die "Fachleute" meine Lösungen/Erweiterungen? Sind die Strings OK oder gibt es Einwände oder bessere Lösungsvorschläge?


Gruß Frank
 
Leute, ich brauche doch noch Hilfe... Folgendes Problem ist aufgetaucht und ich weiß nicht, wie ich es weg bekomme:

Wenn ich die HP "betrete" (Adresse <url>/), dann bekomme ich im Sidebar-Kalender eine Fehlermeldung:

"Notice: Undefined index: query in C:\xampp\htdocs\hdj\classes\class_calendar.php on line 45"

Zeile 45:
PHP:
  $this->self_link = $parsed['path']."?". $parsed['query']."&";

Mir ist klar, dass die Fehlermeldung durch das ausgelöst wird, was ich hinter dem Fragezeichen (."?") angehängt habe. (also folgendem: . $parsed['query']."&" )

==> ohne [ . $parsed['query']."&" ] bekomme ich zwar keine Fehlermeldung, aber wenn dann über das Menü andere Seitenansichten aufgerufen werden, lande ich beim Blättern in den Monaten immer in der default-Seitenansicht (Startseite => "über_uns" = [ <url>/index.php?go=forw ] für Blätter forwärts und ...go=back für rückwärts ).

Also wird <. $parsed['query']."&"> erst dann benötigt, wenn bereits ein Menüpunkt aufgerufen wurde.


Wenn ich die Sache richtig erkannt habe, werde ich wohl eine if-else-Anweisung benötigen.

Wie müßte ich diese in den folgenden "Block" einbinden, damit <$this->self_link = ...> sich auf die beiden "Zustände" ("Startseite => <url>/ " oder "nach Menüaufruf => <url>/index.php?...") einstellt?


(ich hoffe, ihr könnt meinem Gedanken folgen)

Hier noch einmal der gesamte Block, den es betrifft:

PHP:
  function prepare($edit = false){
  $this->edit = $edit;
  $parsed = parse_url($_SERVER['REQUEST_URI']);
  $parsed = str_replace('&go=back','', $parsed);
  $parsed = str_replace('&go=forw','', $parsed);
  $this->self_link = $parsed['path']."?". $parsed['query']."&";
  /*
  if ($target_link=="") $target_link = ADMIN_PAGE;         
  $this->target_link = $target_link;
  if ($go_link=="") $go_link = $self;
  $this->go_link = $go_link;
  echo "ta: $target_link <br/>";  
  echo "go: $go_link <br/>";
  */
  
    $this->actions_do($_REQUEST); //process user-actions
  $this->check_go();
    $this->load_events();
  }
 
Ich bin immer noch am Überlegen...

Wenn ich das richtig verstehe muß es foolgendermaßen ablaufen:

1. Schritt
Ich muß die aktuelle URL im Browser einlesen können (komplett: <url>/..., was nach meinen Recherchen wohl bereits mit
PHP:
$parsed = parse_url($_SERVER['REQUEST_URI']);
gemacht wird.


2. Schritt
Nun muß ich eine Zeichenfolge (z.B. "?id=" oder lange schreibweise: "index.php?id=") definieren, auf die die ausgelesene Adresse untersucht wird.

vermutlich mit: define('REFERENZ', '<zeichenfolge>');
(wenn diese Syntax stimmt, ansonsten mich bitte korrigieren)


3. Schritt:
Vergleiche ob die "aktuelle URL" die "definierte Zeichenfolge" enthält.

Wenn ja:
PHP:
$parsed = str_replace('&go=back','', $parsed);
$parsed = str_replace('&go=forw','', $parsed);
$this->self_link = $parsed['path']."?". $parsed['query']."&";
(str_replace() muß sein, weil er sonst wegen "$parsed['query']" immer ein weiteres "go=" in der Adressleiste zusätzlich an die bereits vorhadene Adresse anhängt)

ansonsten:
PHP:
$this->self_link = $parsed['path']."?"


Würde meine Überlegung aus Eurer Sicht zum gewünschten Ziel führen?
Wenn ja: Wie müßte ich den Vergleich "Zeichenfolge vorhanden" vornehmen und wie müßte dann die if-else-Anweisung aussehen?

(Vielleicht kennt ihr ja Referenzen, die ihr mir geben könnt und die ich auf meinen Fall anpassen kann...)


Danke im Voraus für die Hilfe!
 
Werbung:
So, es läuft alles bestens und so, wie ich es haben wollte...
(...und das ohne von Euch Skripte vorgelegt zu bekommen!)

preg_match durchsucht REQUEST_URI nach einer definierten Zeichenfolge und switcht dann je nach Fall ("true"/"false") auf den fallspezifischen self_link-Eintrag.

Ach ja:
Alles läuft nun ganz ohne zusätzliches JS oder AJAX.
Um die includierten Seiten im Content zu halten (und nicht immer wieder auf "default" zu landen), ist lediglich die oben genannte Auswertung des Request und das dementsprechende Switchen anhand der Auswertung nötig.

Im Fazit:
...ist kein dynamisches Nachladen der Seiten nötig.
Da der jeweilig richtige Link ([pfad]?... oder [url][pfad]?[query]... Das Thema ist somit für mich abgeschlossen!
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben