Andere URL nach Bearbeitung eines verlinkten Artikels

  • Eigentlich sagt der Titel schon alles, ich möchte es aber dennoch etwas genauer erklären.


    Im Shop gibt es verschiedene Produkte, die teilweise gleich in mehreren Kategorien auftauchen. Somit haben wir eine Kategorie erstellt die den Namen "Alle Artikel" trägt und als Optionskategorie deklariert ist, damit sie nicht im Frontend ausgegeben wird.
    Von dort aus werden die Artikel dann in die jeweiligen Kategorien verlinkt, wo sie eben angezeigt werden sollen. Das klappt soweit auch alles wunderbar.


    Allerdings ist es nun so, dass manchmal die Kategorie "Alle Artikel" in der SEO-URL steht und manchmal auch eine von den ausgewählten verlinkten Kategorien.
    Das ist schon komisch. Aber es geht noch weiter.


    Wenn ich einen solch verlinkten Artikel dann bearbeite, passiert es teilweise, dass in der SEO-URL plötzlich eine der anderen Kategorien steckt in die ich diesen Artikel verlinkt habe. Das ist vor allem dann Ärgerlich, wenn der Artikel bei irgendwelchen Suchmaschinen gelistet ist, im Newsletter oder eben auf anderen Seiten verlinkt wurde. Dann stimmt natürlich der Link nicht mehr.


    Kann man da irgendwas machen?
    Woran macht das System fest, welche Kategorie es - bei in mehreren Kategorien verlinkte Artikel - für die SEO-URL benutzt?


    LG Maik

  • Es wird immer die erste zutreffende Kategorie genommen. Mit einer kleinen Änderung könntest Du die SEOUrls im Admin editierbar machen. Musst lediglich die Eingabefelder im Admin hinzufügen und das automatische Update etwas anpassen.

  • Woran macht das System fest, welche Kategorie es - bei in mehreren Kategorien verlinkte Artikel - für die SEO-URL benutzt?

    Die hhg_ms_seo.php zieht sich zur Erstellung des Linkpfades aus der Tabelle "products_to_categories" die jeweils niedrigste Kategorie-ID.


    Das Bedeutet, dass wenn ein Artikel nur ein Mal im System vorhanden ist und dieser dann in der "Optionskategorie" liegt, zieht das Script natürlich auch diesen Pfad. Ich würde Dir empfehlen einfach eine Kategorie rauszusuchen, die eine niedrigere ID besitzt und alle Artikel des Systems dorthin zu kopieren. Allerdings ist das nicht so einfach, weil man (abhängig davon um wieviele Datensätze es geht) dies besser über die Datenbank macht.

    Ειμαστε στη μεση απο κατι...

  • Es wird immer die erste zutreffende Kategorie genommen. Mit einer kleinen Änderung könntest Du die SEOUrls im Admin editierbar machen. Musst lediglich die Eingabefelder im Admin hinzufügen und das automatische Update etwas anpassen.


    Das Feld hab ich der Artikelmaske hinzugefügt, wird auch mit der in der Datenbank eingetragenen URL eingetragen. Allerdings weiss ich nicht, wo ich was ändern sollte, damit dort auch das eingetragen wird, was im Feld steht.


    Noch wird die URL automatisch erstellt. Dies kann auch so bleiben, aber auch nur für neue Artikel.
    Artikel die bearbeitet werden sollen die URL bekommen/behalten, die dann im dem Feld steht bzw. geändert wird.

    davin-c
    Maik Kleinhanns | freiberuflicher Mediengestalter für Digital- & Printmedien | www.davin-c.de

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von davin_darock ()

  • Das Update für den Datensatz erfolgt in der class.hhg_ms_seo.php, dort müsstest Du es anpassen.


    Ich denke die richtige Stelle habe ich gefunden, sollte das case product in der function updateSeoIndex sein.
    Aber ich blick da nicht ganz durch, wie ich nun den Inhalt des Textfeldes gespeichert bekomme, wenn ich einen Artikel bearbeite.
    Habe dort nun folgendes geändert um den Inhalt des Textfeldes für url_text zu speichern. Aus

    PHP
    1. if (HHG_MS_SEO_LANGUAGEURL == 'true') {
    2. $productLink = $resultList->fields['code'] . '/' . $productPath . $this->getUrlFriendlyText($resultList->fields['products_name']);
    3. } else {
    4. $productLink = $productPath . $this->getUrlFriendlyText($resultList->fields['products_name']);
    5. }

    habe ich folgendes gemacht:

    PHP
    1. if (HHG_MS_SEO_LANGUAGEURL == 'true') {
    2. $productLink = $_REQUEST['url_text'];
    3. } else {
    4. $productLink = $productPath . $this->getUrlFriendlyText($resultList->fields['products_name']);
    5. }


    Das funktioniert soweit auch. Sobald ich aber neue Artikel anlege, wird für diese neuen Artikel keine URL mehr hinterlegt.

    davin-c
    Maik Kleinhanns | freiberuflicher Mediengestalter für Digital- & Printmedien | www.davin-c.de

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von davin_darock ()

  • Inputfelder werden über die

    Zitat

    admin/core/classes/class.hhg_product.php

    automatisch aktualisiert. Beachte das die URLs sprachabhängig sind. Dort sind auch die Aufrufe der SEOurls denen Du dann eine if-Schleife umsetzen kannst, wenn diese manuell gesetzt wurden.

  • Inputfelder werden über die

    automatisch aktualisiert. Beachte das die URLs sprachabhängig sind. Dort sind auch die Aufrufe der SEOurls denen Du dann eine if-Schleife umsetzen kannst, wenn diese manuell gesetzt wurden.


    Das bringt mich leider nicht weiter. Ich weiss immernoch nicht, wie ich herrausbekomme ob es sich um einen neuen Artikel handelt oder um einen der schon vorhanden und nur bearbeitet (update) wird.


    Das Inputfeld hab ich bereits drin, es wird auch mit der aktuellen URL befüllt beim BEARBEITEN, bzw. ist leer beim Anlegen von einem NEUEN PRODUKT.
    War auch schon soweit, dass ich den Inhalt des Feldes bearbeiten kann, nur wurde bei meiner Variante beim Anlegen eines neuen Produkts keine URL gespeichert.

  • PHP
    1. function processData_update()

    wird bei Update ausgeführt,

    PHP
    1. function processData_new()

    bei Insert.

  • Ich hab das ganze nun mit der Abfrage in der

    Code
    1. core/classes/class.hhg_ms_seo.php

    gelöst:


    Ich wusste sonst nicht, wie ich das in den Funktionen der

    Code
    1. admin/core/classes/class.hhg_product.php

    hätte anstellen sollen.


    Vielleicht hat ja jemand dazu noch eine Idee, wie man das besser anstellen kann. Auf jeden Fall funktioniert das so schonmal.

  • Soll diese Möglichkeit in das Release aufgenommen werden? 1

    1. Ja (1) 100%
    2. Nein (0) 0%

    So hier die Lösung für die manuelle Eingabe der SEOurl's bei Produkten:

    Zitat

    admin/core/modules/categories/product_edit.php


    Zeile: 367ff

    PHP
    1. $module_content.= '</tr>';
    2. $module_content.= '</table><br>';
    3. $module_content.= '</div>';


    ändern in:

    PHP
    1. $module_content.= '</tr>';
    2. if (HHG_MS_SEO_URLS == 'true') {
    3. $module_content.= '<tr class="dataTableRow">';
    4. $module_content.= '<td class="dataTableContent" align="left" width="10%">' . TEXT_URL . '</td>';
    5. $module_content.= '<td class="dataTableContent" align="left" width="90%" valign="top">' . hhg_draw_input_field('url_text_' . $language['id'], $product->data['language_dependent'][$language['id']]['url_text'], 'size=50 maxlenght=255 ' . $readonly) . '</td>';
    6. $module_content.= '</tr>';
    7. }
    8. $module_content.= '</table><br>';
    9. $module_content.= '</div>';


    Zitat

    admin/core/classes/class.hhg_product.php


    Zeile: 645ff & 1064ff

    PHP
    1. if (HHG_MS_SEO_URLS == 'true') {
    2. $hhg_ms_seo = new hhg_ms_seo($this->registry);
    3. $hhg_ms_seo->updateSeoIndex('product', $this->id);
    4. }


    ändern in:


    Damit wird nun folgendes erreicht:
    Bei der Produktbearbeitung ist nun ein weiteres sprachabhängiges Feld Namens

    Zitat

    TEXT_URL

    ^^
    Dieses Feld wird mit der Spalte

    SQL
    1. url_text

    der jeweiligen Sprach befüllt und kann vom Eigentümer bearbeitet werden. Ist das Feld leer oder unbearbeitet, wird ein automatischer Update erfolgen. Ist das Feld bearbeitet so, wird es mit den sprachabhängigen Daten in die

    SQL
    1. products_description

    geschrieben. Somit wird der MD5 Hash nicht mehr mit dem url_text übereinstimmen und wird entsprechend manuell geupdatet und die Sitemap Generierung angestoßen. Die Einzigartigkeit der Url obliegt dabei dem Editor.

  • Ideal wäre natürlich, ähnlich wie bei Wordpress, dass sich die URL beim Anlegen eines Artikels automatisch aus dem Kategoriepfad bildet und man im Prinzip nur den Teil des Produktnamen in der URL ändern kann.

  • Das kann man ja nach der automatischen Generierung machen, da man ja sonst wieder diejenigen hat, die den Kategoriepfad nicht haben wollen.

  • Das könnte man sich dann ja in der Shopkonfiguration - wie auch in Wordpress unter Permalinks - selbst zusammenstellen.
    Von wegen

    Code
    1. %Categoriepfad%/%Artikelname%
  • Habs mal in die Feature Wunsch Liste aufgenommen, ggf. kann es nach dem Release der neuen Version in das entsprechende Modul aufgenommen werden.

  • Im nächsten Minor-/Patch Release werden Custom SEOurl's für Produkte/Kategorien und Contents enthalten sein.