tbaddade / redaxo_url

REDAXO 5 AddOn zur URL-Generierung für eigene AddOns (ehemals Url Control, ehemals Frau Schultze)
MIT License
46 stars 22 forks source link

Zwei mal gleicher Artikel wird nur letzte Konfiguration bearbeitet #18

Closed TobiasKrais closed 7 years ago

TobiasKrais commented 8 years ago

Ich habe eine Maschinendatenbank. Die Maschinen sind in Kategorien eingeteilt. Also habe ich zwei Konfigurationen:

  1. Eine um die URLs für die Kategorien der Maschinen zu generieren. Der "Parameter für rex_getUrl()" nennt sich hier "category_id".
  2. Eine um die URLs der Maschinen selbst zu generieren. Der "Parameter für rex_getUrl()" nennt sich hier "machine_id". Natürlich sind beide zu generierende URLs mit dem selben Artikel konfiguriert. Das Problem: es wird immer nur die letzte der beiden Konfigurationen bearbeitet, obwohl der Parameter einen anderen Namen hat.
TobiasKrais commented 8 years ago

Noch ein Zusatz: mit der Funktion UrlGenerator::getId() bekomme ich nur die ID, nicht aber den Namen des Parameters. SEO42 hatte das so gelöst, dass der Wert in den $_POST array geschrieben wurde.

tbaddade commented 8 years ago

Deine Config ist falsch. Du kannst nicht denselben Artikel für zwei Tabellen verwenden. Wie du schon bemerkt hast, wird dir zwar immer eine Id geliefert aber du kannst nicht unterscheiden zu welcher Tabelle diese gehört.

Du solltest für die Kategorien einen eigenen Artikel anlegen, so dass dir dann solche Urls generiert werden: /de/kategorien/containerruehrwerke/. (Hier heißt der Artikel kategorien)

Hier wiederum kannst du deine Übersicht der Maschinen auflisten, die dann mit der Url /de/maschinen/containerruehrwerke/promi-con-600/ zur Detailansicht verlinken. (Hier heißt der Artikel maschinen, wobei in der Config noch die Relationstabelle der Kategorien vorgehangen werden)

SEO42 hatte das so gelöst, dass der Wert in den $_POST array geschrieben wurde.

Das Addon konnte keine Urls aus Tabellen generieren.

TobiasKrais commented 8 years ago

Ja, hab mir schon gedacht, dass es nicht anders zu lösen ist. Wie viel Aufwand wäre es, das so zu programmieren, dass es mit einem Artikel funktioniert?

TobiasKrais commented 8 years ago

Kann ich irgendwie herausfinden, wie die Bezeichnung der ID ist, also machine_id oder category_id? Denn im Template brauche ich hierfür eine Abfrage.

tbaddade commented 8 years ago

Vermutlich geht es doch bereits. Probier mal

$data = Generator::getData();
echo '<pre>'; print_r($data); echo '</pre>';
TobiasKrais commented 8 years ago

Das ist eine sehr gute Idee. Ich habe einen Pull request für eine entsprechende Methode erstellt. Was steht nun noch einer Verwendung von zwei Parametern in einem Artikel im Weg?

tbaddade commented 8 years ago

Das funktioniert bereits und kann über den UrlParamKey unterschieden werden.

$data = Generator::getData();
if ($data->urlParamKey == 'mein-param') {}
TobiasKrais commented 8 years ago

Du meinst: $data = UrlGenerator::getData(); if ($data->urlParamKey == 'mein-param') {}

Danke. Der Code funktioniert.

TobiasKrais commented 8 years ago

Noch ein Fehler: zwar kann ich für einen Artikel mehrere Parameter übergeben und auch wie in dem Codebeispiel von dir gezeigt unterscheiden. Jetzt aber zum Fehler: wenn ich im URL Addon zwei Konfigurationen mit dem selben Artikel angebe, wohl aber mit unterschiedlicher Parameterbezeichnung, wird nur die letze der beiden Konfigurationen verarbeitet. Die erstere entweder übergangen oder überschrieben. Sichtbar wird das besonders gut in der sitemap.xml.

TobiasKrais commented 8 years ago

Hi Thomas, was denkst du, ist der Fehler leicht zu fixen? Kannst du mir einen Hinweis geben, wo im Code ich danach suchen müsste? Vielleicht kann ich helfen.

tbaddade commented 8 years ago

@TobiasKrais Ersetze mal diese Datei lib/Url/Generator.php mit der aus GH. Ich hatte da was eingespielt.

TobiasKrais commented 8 years ago

Hi Thomas, das ist super! Ich habs auf Herz und Nieren getestet. Auch mit drei URL Typen auf einen Artikel. Es passt alles. Vielen, vielen Dank!

Noch eine kleine Anmerkung: kann es sein, dass beim Speichern und bearbeiten der Datensätze im Backend als createdate und updatedate immer nur das Jahr gespeichert wird? Sieht so aus als ob du einen Datetime in ein int Feld speichern willst.