AMR Link nachträglich verändern
AMR Link nachträglich verändern
Hallo zusammen,
ich benutze Mod_Rewide und daher habe ich alle meine Links auf meiner Seite im "front_content.php?idart=xx"-Format angegeben. Jetzt habe ich einen Cache gebaut, der die ganze Seite in eine .txt-Datei speichert und dann ausgibt - Funktioniert!
Allerdings habe ich jetzt das Problem, dass in der .txt-Datei die Links auch im "front_content.php?idart=xx"-Format angegeben sind und daher auch so ausgegeben werden. Also beim ersten Mal, wenn die Seite noch nicht gecacht ist, funktioniert es ganz normal mit dem Alias in der URL und so, aber wenn er die gecachte Datei aufruft, funktioniert es nicht.
Daher wollte ich fragen, ob es von Contenido / AMR schon eine Funktion gibt, die in dem ganzen Text (hier also mein ganzer Quelltext) alle Links sozusagen nachträglich umändert, sodass dann auf der Seite die richtigen mod_rewite-URL in den Links stehen? Wenn nicht, kann mir jemand helfen so eine Funktion zu schrieben?
LG Domi
ich benutze Mod_Rewide und daher habe ich alle meine Links auf meiner Seite im "front_content.php?idart=xx"-Format angegeben. Jetzt habe ich einen Cache gebaut, der die ganze Seite in eine .txt-Datei speichert und dann ausgibt - Funktioniert!
Allerdings habe ich jetzt das Problem, dass in der .txt-Datei die Links auch im "front_content.php?idart=xx"-Format angegeben sind und daher auch so ausgegeben werden. Also beim ersten Mal, wenn die Seite noch nicht gecacht ist, funktioniert es ganz normal mit dem Alias in der URL und so, aber wenn er die gecachte Datei aufruft, funktioniert es nicht.
Daher wollte ich fragen, ob es von Contenido / AMR schon eine Funktion gibt, die in dem ganzen Text (hier also mein ganzer Quelltext) alle Links sozusagen nachträglich umändert, sodass dann auf der Seite die richtigen mod_rewite-URL in den Links stehen? Wenn nicht, kann mir jemand helfen so eine Funktion zu schrieben?
LG Domi
Re: AMR Link nachträglich verändern
Hallo Domi,
das ist genau das, was AMR in der Standardeinstellung macht (siehe Konfiguration).
Aber anstatt zu versuchen, AMR zu verbiegen, warum greifst du die Seite nicht erst NACH der Umwandlung ab?
Gruß
René
das ist genau das, was AMR in der Standardeinstellung macht (siehe Konfiguration).
Aber anstatt zu versuchen, AMR zu verbiegen, warum greifst du die Seite nicht erst NACH der Umwandlung ab?
Gruß
René
Re: AMR Link nachträglich verändern
Hallo,
Das AMR das macht, ist ja auch richtig so
Also ich habe einmal geschaut, aber wenn ich das erst danach abgreifen würde, müsste ich meinen ganzen Cache umschreiben
Also ich suche sozusagen eine Funktion, die mir alle Links im Code einmal "umschreibt". Ich hatte mir da unfefähr sowas vorgestellt:
LG Domi
Das AMR das macht, ist ja auch richtig so
Also ich habe einmal geschaut, aber wenn ich das erst danach abgreifen würde, müsste ich meinen ganzen Cache umschreiben
Also ich suche sozusagen eine Funktion, die mir alle Links im Code einmal "umschreibt". Ich hatte mir da unfefähr sowas vorgestellt:
Code: Alles auswählen
...
$full_site = file_get_contents("cache/sites/idart_".$idart."_lang_".$lang.".txt"); // Das funktioniert auch alles!
echo ReplaceLinks($full_site); // --> UND GENAU DIESE FUNKTION FEHLT MIR!
...
Re: AMR Link nachträglich verändern
Weiß niemand, wie ich das Problem lösen kann?
Re: AMR Link nachträglich verändern
Hallo Domi,
versuch mal das hier (nicht getestet):
So wie ich das sehe, muss evtl. nur noch das "cms/" vor dem Link entfernt werden (je nachdem wie Contenido installiert und eingerichtet wurde).
Gruß
René
versuch mal das hier (nicht getestet):
Code: Alles auswählen
function ReplaceLinks($html) {
# HTML-Code auf Anfang der Links aufsplitten
$aLinks = explode('front_content.php', $html);
# Das erste Array-Element ist kein Link
$return = $aLinks[0];
# Ab Element 1 anfangen
for ($i = 0, $n = count($aLinks); $i < $n; $i ++) {
# Das Ende des Links suchen
$pos = strpos($aLinks[$i], '"');
# Link-Parameter auslesen
if (substr($aLinks[$i], 0, 1) == '?') {
$aParms = explode('&', substr($aLinks, 1, ($pos - 1)));
}
# Neuen Link generieren
$aParams = array('client' => $client, 'lang' => $lang);
for ($j = 0, $o = count($aParms); $j < $o; $j ++) {
$parm = explode('=', $aParms[$j]);
$key = ((substr($parm[0], 0, 4) == 'amp;') ? substr($parm[0], 4) : $parm[0]);
$aParams[$key] = $parm[1];
}
$link = Contenido_Url::getInstance()->build($aParams, false);
# Teilcode mit ersetztem Link an Returnstring anfuegen
$return .= $link . substr($aLinks[$i], $pos);
}
# Ergebnis zurueck liefern
return $return;
}
Gruß
René
Re: AMR Link nachträglich verändern
Hallo Spider IT,
also hierbei gibt er mir einen 500 Internal Server Error aus.
Also ich verstehe schon ein bisschen davon und ich weiß, dass alle meine Links im Quellcode so sind:
Also ich habe überall nur eine idart angegeben, weil ich nur mit einem Mandant und einer Sprache arbeite.
Ich sage dir das, weil in dem Script ja was von client steht, aber ich weiß nicht ob es dir was hilft Ich hoffe mal!
LG Domi
also hierbei gibt er mir einen 500 Internal Server Error aus.
Also ich verstehe schon ein bisschen davon und ich weiß, dass alle meine Links im Quellcode so sind:
Code: Alles auswählen
<a href="front_content.php?idart=1">Startseite</a>
oder so:
<a href="front_content.php?idart=16" title="Hilfe">Hilfe</a>
Ich sage dir das, weil in dem Script ja was von client steht, aber ich weiß nicht ob es dir was hilft Ich hoffe mal!
LG Domi
Re: AMR Link nachträglich verändern
Hallo Domi,
an welcher Stelle hast du denn das eingebaut?
Kann ich mir das evtl. mal ansehen?
Wenn ich den Code direkt unten im Layout mit einfüge und die Funktion mit ein Teil HTML füttere, meckert er nur an, dass "lang" mit angegeben sein muss (die Variable ist anscheinend bei der Generierung des Layouts nicht verfügbar).
Wenn du nur ein Mandant mit nur eine Sprache hast, kannst du für beiden (client und lang) die jeweilige Nummer einsetzen anstatt die Variablen.
Gruß
René
an welcher Stelle hast du denn das eingebaut?
Kann ich mir das evtl. mal ansehen?
Wenn ich den Code direkt unten im Layout mit einfüge und die Funktion mit ein Teil HTML füttere, meckert er nur an, dass "lang" mit angegeben sein muss (die Variable ist anscheinend bei der Generierung des Layouts nicht verfügbar).
Wenn du nur ein Mandant mit nur eine Sprache hast, kannst du für beiden (client und lang) die jeweilige Nummer einsetzen anstatt die Variablen.
Gruß
René
Re: AMR Link nachträglich verändern
Hab noch einen kleinen Fehler gefunden, hier die korrigierte Version:
Gruß
René
Code: Alles auswählen
function ReplaceLinks($html) {
global $client, $lang;
# HTML-Code auf Anfang der Links aufsplitten
$aLinks = explode('front_content.php', $html);
# Das erste Array-Element ist kein Link
$return = $aLinks[0];
# Ab Element 1 anfangen
for ($i = 1, $n = count($aLinks); $i < $n; $i ++) {
# Das Ende des Links suchen
$pos = strpos($aLinks[$i], '"');
# Link-Parameter auslesen
if (substr($aLinks[$i], 0, 1) == '?') {
$aParms = explode('&', substr($aLinks[$i], 1, ($pos - 1)));
}
# Neuen Link generieren
$aParams = array('client' => $client, 'lang' => $lang);
for ($j = 0, $o = count($aParms); $j < $o; $j ++) {
$parm = explode('=', $aParms[$j]);
$key = ((substr($parm[0], 0, 4) == 'amp;') ? substr($parm[0], 4) : $parm[0]);
$aParams[$key] = $parm[1];
}
$link = Contenido_Url::getInstance()->build($aParams, false);
# Teilcode mit ersetztem Link an Returnstring anfuegen
$return .= $link . substr($aLinks[$i], $pos);
}
# Ergebnis zurueck liefern
return $return;
}
René
Re: AMR Link nachträglich verändern
Hallo Domi,
im AMR-Plugin gibt es die Funktion mr_buildGeneratedCode(), die genau das macht, was du brauchst.
Diese Funktion bekommt den HTML-Code und ersetzt alle darin vorkommenden URLs zu Clean-URLs.
Du kannst also folgendes machen:
Wenn dieser Code in einem Modul oder in der front_content.php nach der Initialisierung der Plugins ausgeführt wird, sollte es wie gewünscht arbeiten. Ansonsten musst du dafür sorgen, dass das Plugin korrekt intialisiert wird, damit es seine Arbeit verrichten kann.
Zur der Sprache:
Die Angabe des lang-Parameters in URLs is eine Vorgabe von CONTENIDO. Wenn du aber die Plugin Funktion zum Generieren der URLs verwendest, kümmern sich das Plugin um das Setzen des Parameters für die Sprache, sofern dies nicht in den zu ersetzenden URLs vorkommt.
Einzelne URLs ohne lang-Parameter kannst du auch mit
auf Clean-URLs umstellen.
Wenn du die CONTENIDO-Funktion verwendest, muss der Parameter lang dabei sein:
Der Vorschlag von René ist auch vollkommen in Ordnung, sofern du damit zufrieden bist. Es bleibt dir überlassen, welche Lösung du einsetzen möchtest.
Am saubersten wäre es natürlich, wenn man die von CONTENIDO zur Verfügung gestellte Funktion verwendet (das letzte Beispiel), aber die erwartet die Id der Sprache, was du nicht hast...
Nachtrag:
Ist zwar Offtopic, trotzdem...
Warum verwendest du nicht die in CONTENIDO vorhandene Funktion zum Cachen der Ausgabe der Seiten?
Der Grund, weshalb deine gecacheten Seiten keine umgewandelten URLs enthalten liegt daran, dass die Ausgabe gecached wird, bevor das Plugin die URLs umwandeln kann.
Das kann z. B. passieren, wenn du z. B. die Ausgabe am Ende des Layouts cachest.
Gruß
xmurrix
im AMR-Plugin gibt es die Funktion mr_buildGeneratedCode(), die genau das macht, was du brauchst.
Diese Funktion bekommt den HTML-Code und ersetzt alle darin vorkommenden URLs zu Clean-URLs.
Du kannst also folgendes machen:
Code: Alles auswählen
$full_site = file_get_contents("cache/sites/idart_".$idart."_lang_".$lang.".txt"); // Das funktioniert auch alles!
echo mr_buildGeneratedCode($full_site);
Zur der Sprache:
Die Angabe des lang-Parameters in URLs is eine Vorgabe von CONTENIDO. Wenn du aber die Plugin Funktion zum Generieren der URLs verwendest, kümmern sich das Plugin um das Setzen des Parameters für die Sprache, sofern dies nicht in den zu ersetzenden URLs vorkommt.
Einzelne URLs ohne lang-Parameter kannst du auch mit
Code: Alles auswählen
$url = 'front_content.php?idart=123';
$urlNew = mr_buildNewUrl($url);
Wenn du die CONTENIDO-Funktion verwendest, muss der Parameter lang dabei sein:
Code: Alles auswählen
$aParams = array(
'idart' => 123,
'lang' => $lang
);
$urlNew = Contenido_Url::getInstance()->build($aParams, false);
Am saubersten wäre es natürlich, wenn man die von CONTENIDO zur Verfügung gestellte Funktion verwendet (das letzte Beispiel), aber die erwartet die Id der Sprache, was du nicht hast...
Nachtrag:
Ist zwar Offtopic, trotzdem...
Warum verwendest du nicht die in CONTENIDO vorhandene Funktion zum Cachen der Ausgabe der Seiten?
Der Grund, weshalb deine gecacheten Seiten keine umgewandelten URLs enthalten liegt daran, dass die Ausgabe gecached wird, bevor das Plugin die URLs umwandeln kann.
Das kann z. B. passieren, wenn du z. B. die Ausgabe am Ende des Layouts cachest.
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: AMR Link nachträglich verändern
Hallo,
Vielen Dank, das mit der Methode mr_buildGeneratedCode() klappt genauso
Was gibt es für eine Caching Methode von CONTENIDO ?
LG Domi
Vielen Dank, das mit der Methode mr_buildGeneratedCode() klappt genauso
Was gibt es für eine Caching Methode von CONTENIDO ?
LG Domi
Re: AMR Link nachträglich verändern
In contenido/includes/config.misc.php kannst du das Cachen aktivieren:
Dann den Rest in cms/includes/concache.php konfigurieren.
Code: Alles auswählen
$cfg['cache']['disable'] = false;
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.