Plugin Advanced Mod Rewrite für Contenido 4.8.x

Timotheus
Beiträge: 21
Registriert: So 13. Okt 2002, 12:49
Kontaktdaten:

Erweiterung der Rewrite Rules...

Beitrag von Timotheus » Di 7. Dez 2010, 14:52

Hallo in die Runde,

erstmal ein großes Danke an Dich xmurrix, dass Du hier so gut supportest.
Der Advanced Mod Rewrite läuft fehlerfrei in meinem Contenido und ich könnte eigentlich glücklich sein,
wenn ich nicht gerade vor einem Problem stehen würde, welches ich wohl ohne einen guten Tipp nicht lösen kann.

Es geht um die Erweiterung der Rewrite Regeln in der .htaccess Datei (evtl. auch des URL-Builders?).
Ich habe ein Modul gebastelt, welches mir durch Übergabe von Variablen die entsprechenden Steckbriefe von Personen ausgibt. Der Aufruf geschieht ohne aktiviertem Mod_Rewrite in der Form:
front_content.php?idart=123&pid=12345 (alternativ auch noch vorname und nachname als variable möglich)
Die Variable pid wird dann genommen, und anschließend werden aus einer mysql Datenbank dazu Vorname, Nachname, etc. ausgelesen und in einem Steckbrieflayout dargestellt.

Jetzt meine Frage(n) :mrgreen:
Wie muß ich die .htaccess modifizieren, damit ich bei aktiviertem .htaccess die Vornamen und Nachnamen mit in die Artikel-URL bekomme? (Also z.B. in der Form http://www.domain.de/steckbriefe/mustermann_max.html)
bzw. was muß ich machen, damit die Auflösung der URL http://www.domain.de/steckbriefe/mustermann_max.html wieder zurück in das Variablen-Schema front_content.php?idart=123&pid=12345 funktioniert?
Ich befürchte das das ganze nicht mit einer kleinen Änderung in der htaccess zu bewerkstelligen ist, sondern im URL-Builder angefasst werden muß?!

Freue mich über jeden Tipp!

Viele Grüße
Timo

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Di 7. Dez 2010, 22:31

Hallo Timotheus,

das AMR-Plugin kann in der aktuellen Version keine benutzerdefinierten Clean-URLs generieren, es kann nur URLs zu Contenido-Kategorien/-Artikel erstellen. Ich überlege dieses Feature in eine neue Version des Plugins zu integrieren, wass das soweit sein wird, kann ich nivht sagen. Bis es soweit ist, muss man für solche Wünsche etwas in die Trickkiste greifen.

Generieren der Url:
Entweder du erstellst die URLs zu den Steckbriefen im Modul manuell oder du verwendest die Chain "Contenido.Frontend.PostprocessUrlBuilding" um eine vom UrlBuilder generierte URL nachträglich anzupassen. Dazu kannst du entweder ein kleines Plugin schreiben oder das folgende Beispiel in eine Datei einfügen, die am Anfang der front_content.php eingebunden wird, z. B. in "cms/config.local.php" (die config.local.php ist eventuell anzulegen).

Code: Alles auswählen

<?php

// get cec registry instance
$_cecRegistry = cApiCECRegistry::getInstance();

// add own chain function
$_cecRegistry->addChainFunction('Contenido.Frontend.PostprocessUrlBuilding', 'myCustomFunction');


/**
 * Chain function to modify generated urls
 * Will be executed at chain 'Contenido.Frontend.PostprocessUrlBuilding'
 *
 * @param   string  $url  The url generated by UrlBuilder
 * @return  string
 */
function myCustomFunction($url)
{
    $comp = Contenido_Url::parse($url);
    if (isset($comp['path']) && strpos($comp['path'], '/steckbriefe/') !== false) {
        if (isset($comp['params']) && isset($comp['params']['pid'])) {
            $comp['path'] = '/steckbriefe/' . makePortraitCleanUrlNameById($comp['params']['pid']) . '.html';
            unset($comp['params']['pid']);
            $comp['query'] = http_build_query($comp['params']);
            if (!$comp['query'] || empty($comp['query'])) {
                unset($comp['query']);
            }
            $url = Contenido_Url::composeByComponents($comp);
        }
    }
    return $url;
}


/**
 * Creates clean url portrait name part
 *
 * @param   int  $pid  Portrait id
 * @return  string
 */
function makePortraitCleanUrlNameById($pid)
{
    // @todo create clean url name by id
    return 'lorem_ipsum';
}


/**
 * Resolves incomming clean url portrait name part to pid
 *
 * @param   string  $pname  Portrait name
 * @return  int
 */
function resolvePortraitCleanUrlNameToId($pname)
{
    // @todo resolve id by clean url name
    return 123;
}


// check, if we have an pname in request
if (isset($_GET['pname'])) {
    global $pid;
    $pid = resolvePortraitCleanUrlNameToId((string) $_GET['pname']);
}
Wichtig:
Die Funktionen sind beispielhaft, sollten also auf deine Bedürfnisse angepasst werden. Auch sind nicht alle Bereiche sicher, der Code sollte also noch optimiert werden. Je nach AMR-Plugin Einstellung kann der Code etwas anders sein, da hier die Einstellungen des Plugins (Groß-/Kleinschreibung, Mandant/Sprache der Url voranstellen, usw...) nicht berücksichtigt werden.


Erkennen der Url:
Für die generierten URL's brauchst du noch eine Regel in der .htacces. Diese Regel sollte vor der letzten Regeln angegeben werden:

Code: Alles auswählen

RewriteRule ^steckbriefe/(.*)\.html.*$ front_content.php?idart=2&pname=$1 [NC,QSA,L]
Diese Regel fängt alle Requests mit dem Muster steckbriefe/{irgend_ein_wert}.html ab und umschreibt diese in front_content.php?idart=2&pname={irgend_ein_wert} wobei {irgend_ein_wert} einfach ein Platzhalter ist und in diesem Beispiel als Zielartikel die idart=2 angegeben ist.


Das Ganze ist zwar nicht sehr optimal, sollte aber funktionieren.

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.

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von McHubi » Do 9. Dez 2010, 13:31

Hallo zusammen,

kann es sein, dass in der aktuellen Zip auf http://www.purc.de/playground-coding-co ... a.109.html diese Datei hier fehlt?
contenido/classes/UrlBuilder/Contenido_UrlBuilderConfig.class.php

Bekomme nämlich immer diese Fehlermeldung:
Fatal error: Error: Can't include XXX/contenido/classes/UrlBuilder/Contenido_UrlBuilderConfig.class.php in XXX/contenido/includes/api/functions.api.general.php on line 181

Habe die zip schon mehrfach heruntergeladen und neu entpackt um einen Download-/Entpackungsfehler auszuschließen. Im Ordner UrlBuilder ist lediglich die Contenido_UrlBuilder_MR.class.php enthalten.

Vielen Dank für einen Tipp :D
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von Dodger77 » Do 9. Dez 2010, 13:55

@McHubi
Die Datei ist Bestandteil von Contenido, sollte somit also schon vor dem Hochladen von AMR vorhanden sein.

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von McHubi » Do 9. Dez 2010, 14:15

Jep, bin ein Blindfisch. Hatte wg. einem anderen Fehler den Ordner UrlBuilder gelöscht und beim folgenden Upload der Dateien aus der zip waren die übrigen natürlich nicht mehr dabei... :oops: Danke für den Hau auf den Hinterkopf :mrgreen:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Timotheus
Beiträge: 21
Registriert: So 13. Okt 2002, 12:49
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von Timotheus » Fr 10. Dez 2010, 19:51

xmurrix hat geschrieben: Das Ganze ist zwar nicht sehr optimal, sollte aber funktionieren.

Gruß
xmurrix
Und ob es funktioniert :D , ich danke Dir ganz herzlich!

Viele Grüße
Timo

benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von benja » Mo 13. Dez 2010, 22:36

Hallo Zusammen,

ich hoffe es kann mir jemand helfen!!! Keine Ahnung warum, aber ich habe immer noch Duplicated Content.

Die Startseite ist über die Domain und über http://www.domain.de/home.html erreichbar. Startartikel dito. In der Sitemap wird die Domain nicht angegeben, aber dafür die Seite http://www.domain.de/home.html.

Hier einige Details:

CON 4.8.14
AMR 0.5.5
AMR Einstellung:
Duplicated Content verhindern -> aktiviert
Artikelname immer an die URLs anhängen (auch bei URLs zu Kategorien) -> ob aktiviert (+index) oder nicht, DC bleibt.

Die htaccess habe ich wie hier http://forum.contenido.org/viewtopic.ph ... 80#p147838 von Ortwin beschrieben bearbeitet.
RewriteCond %{HTTP_HOST} ^domain.tld [NC]
RewriteRule (.*) http://www.domain.tld/$1 [R=301,L]

Das mit dem Routing habe ich vielleicht nicht richtig verstanden. Dort habe ich z. B. /home.html>>>/ eingegeben, was keine Auswirkung hatte.

Verzweifelt in Cologne
benja

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Mo 13. Dez 2010, 23:54

benja hat geschrieben:... Keine Ahnung warum, aber ich habe immer noch Duplicated Content.

Die Startseite ist über die Domain und über http://www.domain.de/home.html erreichbar. Startartikel dito. In der Sitemap wird die Domain nicht angegeben, aber dafür die Seite http://www.domain.de/home.html....
Hallo benja,

habe dein Problem leider nicht ganz verstanden. Vielleicht liegt es auch daran, dass es spät geworden ist...

Hast du das Duplicated-Content Problem mit der URL / und /home.html, die Homepage wird also über beide URL's angezeigt und das soll nicht sein?

Wenn du nicht willst, das die Homepage unter / und unter /home.html erreichbar sein soll, kannst du das mit einer Regel in der .htaccess machen. Oder du definierst einen Startartikel in der Hauptnavigation, der eine Weiterleitung zum eigentlichen Artikel macht (also zu Home).

Die Funktion zum Verhindern von DC wurde wegen einer anderen AMR-Konfiguration eingebaut, und kann in der Form nicht DC für die Startseite des Webauftritts verhindern. Du kannst aber folgendes probieren:
Öffne die Datei "contenido/plugins/mod_rewrite/classes/class.modrewritecontroller.php" und ändere die Zeile 522 von

Code: Alles auswählen

        if (parent::getConfig('startfromroot') == 1 && parent::getConfig('prevent_duplicated_content') == 1) {
in

Code: Alles auswählen

        if (parent::getConfig('prevent_duplicated_content') == 1) {
Ich habe das aber nicht getestet, daher solltest du das also vorher gegenprüfen, ob es bei dir den gewünschten Effekt erzielt.

...Das mit dem Routing habe ich vielleicht nicht richtig verstanden. Dort habe ich z. B. /home.html>>>/ eingegeben, was keine Auswirkung hatte...
Das Routing ist dafür gedacht, eine ankommende URL auf einen gültigen Contenido-Artikel zu Routen. Die URL in der Adresszeile des Browsers würde dabei bleiben.
Beispiel:
Der User klickt auf eine URL /jetzt_rockts_richtig.html. Hinter dieder URL gibt es aber keinen Artikel/keine Kategorie in Contenido. Mit dem Routing kann man die URL auf eine Contenido-Seite umleiten.

Code: Alles auswählen

/jetzt_rockts_richtig.html>>>front_content.php?idart=123

Das Problem mit DC haben viele Seiten und es ist nicht immer einfacht, das in den Griff zu bekommen. Eine Alternative wäre die Verwendung des Canonical-Tags.

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.

benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von benja » Mo 13. Dez 2010, 23:59

Danke für die schnelle Antwort. Für mich ist es inzwischen auch zu spät. Ich sehe mir das morgen genau an,... und berichte.

GuteN8

Fips
Beiträge: 105
Registriert: Fr 20. Feb 2009, 09:55
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von Fips » Mo 20. Dez 2010, 08:53

Hallo,
ich habe die Version 4.8.14 als Demoverion installiert und wollte in der Sprache EN die Kategorie ändern. Nach der Ändern kam folgende Meldung:
Fatal error: Call to a member function get() on a non-object in /var/www/htdocs/CMS/contenido/contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php on line 12
Die Änderung wurde nach Aufruf der Seite umgesetzt.

Wie kann man dies ändern?

Danke Fips

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Mo 20. Dez 2010, 21:36

Fips hat geschrieben:...
Fatal error: Call to a member function get() on a non-object in /var/www/htdocs/CMS/contenido/contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php on line 12
...
Hallo Fips,

welche Version des AMR-Plugins verwendest du genau? Ich kenne nämlich keine Version, in der in der Datei contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php in Zeile 12 ausführbarer PHP-Code drin steht. Diese Stelle ist eigentlich der Kopfeil der Datei, in der Kommentare drin stehen.

Falls jemand an der Datei Änderungen gemacht hat, solltest du dich an die Person wenden, ansonsten die Datei einfach gegen eine Original-Version aus dem AMR-Package ersetzen.

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.

Fips
Beiträge: 105
Registriert: Fr 20. Feb 2009, 09:55
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von Fips » Mo 10. Jan 2011, 11:01

Hallo xmurrix,
erst einmal ein gesundes neues Jahr und vielen Dank für deine Antwort. Der Wechsel der Sprachen funktioniert jetzt. Wir haben das Modul Navigation_Meta http://forum.contenido.org/viewtopic.php?f=60&t=30849 mit einem Switch für DE und EN angepasst und es fnktioniert jetzt.

Danke Fips

beloved_behated
Beiträge: 55
Registriert: Mi 25. Nov 2009, 16:08
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von beloved_behated » Mo 10. Jan 2011, 16:46

Hallo!!

ich hab das AMR Plugin erfolgreich eingebunden! Allerdings besteht meine Seite aus mehreren Hauptkategorien mit Unterkategorien. Das Linkbuilding ist dadurch ziemlich lang. Also: kategorie1/kategorie2/artikelname.html
Wenn jetzt noch eine Ebene dazu kommen würde, wären die Links alle mega-lang. Ich denke nicht, dass dies sehr förderlich für die Suchmaschinen ist.

Gibt es eine einfache Möglichkeit, dass man nur die letzte Kategorie und den Artikelnamen ausliest?
Das wär echt klasse!

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von kummer » Mo 10. Jan 2011, 17:56

beloved_behated hat geschrieben:[...]Ich denke nicht, dass dies sehr förderlich für die Suchmaschinen ist. [...] Gibt es eine einfache Möglichkeit, dass man nur die letzte Kategorie und den Artikelnamen ausliest?
  1. die länge der url ist den suchmaschinen so ziemlich egal. insgesamt ist der begriff seo-urls nicht so ganz zutreffend. die urls sind besser als die, die contenido von haus aus macht. allerdings in erster linie (oder praktisch ausschliesslich) für menschen. die indexierung wird dadurch nicht wesentlich günstig beeeinflusst.
  2. wenn du nicht die ganze url für die auswertung heranziehst, muss der kategoriebezeichner auf unterster ebene im ganzen kontext eindeutig sein. wenn das zutreffend sein sollte (was inbesondere bei grösseren auftritten schwierig werden dürfte), dann kannst du sich auch einfach nach 'oben' schieben. dann hast du genau das gewünschte resultat.
  3. du bestimmst sowohl für artikel als auch für kategorien die url durch den urlname (resp. das alias). das kannst du ohne weiteres verkürzen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von rethus » Mo 17. Jan 2011, 15:13

Wie schauts beim Upgrading des AMR-Moduls aus.
Das Modul zu installieren ist ja die eine Sache, aber nach einem Contenido-Upgrade wieder alles einzurichten die andere Sache.

Gibt es hier schon Workarrounds, welches folgende Situationen vereinfacht:
  • Upgrade von AMR bei gleicher Vontenido Version
  • Upgrade von Contendio bei gleicher AMR-Version
  • Upgrade von AMR und Contenido auf neuere Version
Wäre klasse, wenn es dazu ein kurzes (Video) Howto geben würde, oder Erfahrungsberichte, wie dies schnell und unkompliziert geht.

Finde es schade, dass bis dato noch keine Möglichkeit im Corecode implementiert ist, welche dem Sysadmin das leben erleichtert.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Gesperrt