Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: seo_url_mod() und Erweiterungen | Kategorienamen in der Produkt-URL

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Hallo Community, hallo modified-Team.
    Wenn ich mir die /includes/extra/seo_url_mod/seo_url_example.txt anschaue könnte der Eindruck entstehen man könne mit einer Klassenerweiterung

    Code: PHP  [Auswählen]
    class seo_url_example extends modified_seo_url {
    }

    die modified_seo_url class erweitern, wo dies doch bereits durch die seo_url_shopstat class geschieht, welche ja auch instantiiert wird in der Funktion seo_url_mod().
    Das ist aber ja nicht der Fall, weil die Instantiierung der Kindklasse fehlen würde (mangels autoload).
    Man könnte sich lediglich eine eigene seo_url_shopstat class schreiben.
    Wo ist da genau der Sinn ?, hat das zukunftsbezogene Gründe ?

    (Als Beispiel:
    Ich möchte eigene Proukt-URLs generieren die die Artikelnummer und den Produktnamen beinhalten anstatt der Produkt-ID, und ohne Kategoriepfad.)

    Wie lässt sich denn nun einfach der Kategoriepfad in der Produkt-URL ausschalten ?
    Bei einem Update von 1.06 auf 2.0 dürfte das, um der Erhaltung der SERPS in den Suchmaschinen willen, wichtig sein.

    Danke euch im Voraus für Feedback.

    Gruß,
    noRiddle

    Linkback: https://www.modified-shop.org/forum/index.php?topic=36430.0

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Wenn du den Kategoriepfad nicht in der URL haben willst, dann erstelle eine Datei und lege diese in "/includes/extra/configure/" ab.

    Inhalt:

    Code: PHP  [Auswählen]
    <?php
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', 'false');

    Wenn du die URLs anders haben möchtest, dann dupliziere die Shopstat Datei und ändere die Function create_products_link() so ab, dass die Artikelnummer statt der ID in der URL ist.

    Gruss Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Vielen Dank für deine Antwort, GTB.

    Wenn ich mir eine neue seo_url_shopstat.php baue, klar, das geht.
    Leider dann nicht ohne Core-File-Änderung.
    Bei der class seo_url_example extends modified_seo_url entzieht sich mir allerdings momentan der Sinn, bzw. die Funktion, wie bereits gesagt.

    Bzgl. ADD_CAT_NAMES_TO_PRODUCT_LINK wundere ich mich über das folgende Konstrukt:

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT') ? define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true') : define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);

    In Worten lese ich da:
    Wenn ADD_CAT_NAMES_TO_PRODUCT_LINK oder MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT definiert ist,
    definiere ADD_CAT_NAMES_TO_PRODUCT_LINK soundso,
    ansonsten definiere ADD_CAT_NAMES_TO_PRODUCT_LINK anders.

    Da ist doch bestimmt ein Irrtum im Code... ??

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    GTB, würdest du mir nochmal antworten ?
    Diesen von mir zitierte Code halte ich für verkehrt weil Konstanten, einmal definiert, nicht neu definiert werden können. Eine Fehlermeldung kommt ja lediglich deshalb nicht weil die "else"-Kondition der ternary-Konstruktion greift.
    Wofür ist eigtl. die zweite Konstante MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT die nirgends benutzt wird ?

    Übrigens.
    Ich bin immer mehr begeistert von eurer 2.0.2.1. Ohne Probleme konnte ich eigene SEO-URLs für Produkte bauen und mein Modul dann im Backend => Erw. Konfiguration Meta-tags/Suchmaschinen auswählen.
    Klasse gemacht. Auch die ganzen Hooks helfen wirklich sehr.
    Deshalb nochmals Danke und Respekt für die viele Arbeit und das durchdachte Konzept an das ganze modified-Team.

    Gruß,
    noRiddle

    web0null

    • Experte
    • Beiträge: 1.998
    Hallo noRiddle

    Das:

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT') ?
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true') :
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);

    Ist im Prinzip das selbe wie das:

    Code: PHP  [Auswählen]
    if (!defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')) {
      if (defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT')) {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true');
      } else {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);
      }
    }

    Man könnte es auch so schreiben:

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR define('ADD_CAT_NAMES_TO_PRODUCT_LINK', defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT') ? MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true' : true);

    Gruß

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Hi web0null, schön was von dir zu hören.

    Mmh, also ich kenne sicherlich solche Kurzformen

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);

    was daselbe ist wie

    Code: PHP  [Auswählen]
    if(!defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')) {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);
    }

    aber wo nimmst du in deiner Erklärung das erste

    Code: PHP  [Auswählen]
    if (!defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')) {

    her ?

    Was ist denn wenn

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')

    true ergibt ?

    Kannst du mir das mal genauer auflösen, mein Hirn dreht sich gerade...  :wohow:

    Merci.

    Gruß,
    noRiddle

    web0null

    • Experte
    • Beiträge: 1.998
    Ist irgendwie schwer niederzuschreiben, aber teste es mal mit dem

    Code: PHP  [Auswählen]
    //$var = 1;
    $foo = true;
    $var || $var = $foo ? 2 : 3;

    Wenn $var in der 1. Zeile einen "TRUE"-Wert hat wird beim || abgebrochen.

    Im Prinzip bedeutet es wenn, 
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') TRUE ergibt,
    wird beim OR abgebrochen, bzw. wird das 2. defined (und das darauffolgende if else), nicht ausgeführt.

    Wie hier:

    Code: PHP  [Auswählen]
    if(!defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')) {
        if (...) {

        } else {
       
        }
    }

    Wenn TRUE wird nichts gemacht.

    Gruß

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Okay, verstehe..., denke ich.
    Wäre leichter verständlich mit einer Klammer um den Ausdruck nach dem OR.

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR (defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT') ?
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true') :
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true));

    Wieder was gelernt, danke dir web0null.

    Gruß,
    noRiddle

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Hi noRiddle,

    deine Frage hat sich ja mittlerweile erübrigt. Habe den Beitrag leider aus den Augen verloren.

    MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT wird von einem Modul verwendet. ;-)

    Gruss Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Kein Problem, wir haben alle genug zu tun.
    Danke dir.

    Gruß,
    noRiddle

    hbauer

    • Experte
    • Beiträge: 1.097
    Gibt es auch eine einfache Möglichkeit das man nur die Wurzel im Kategorienpfad in die URl aufnimmt?

    Gruß

    Hagen

    xt_modding

    • Neu im Forum
    • Beiträge: 27
    Code: PHP  [Auswählen]
    $cat_path_array = explode('_', $this->params_array['cPath']);
    $root_cat = $cat_path_array[0]; // erste Kategorie im Array

    LG

    T

    hbauer

    • Experte
    • Beiträge: 1.097
    Hallo xt_modding

    mit Deinem Tipp bin ich zwar nicht zum Ergebnis gekommen aber Du hast mich ein eine gute Richtung gewiesen

    Das ist zwar jetzt noch nicht update sicher aber da kümmere ich mich später drum.

    Danke Dir

    svn diff
    Index: seo_url_shopstat.php
    ===================================================================
    --- seo_url_shopstat.php (Revision 905)
    +++ seo_url_shopstat.php (Arbeitskopie)
    @@ -193,7 +193,7 @@
             )
         {
           $this->params_array['cPath'] = xtc_get_product_path($this->params_array['products_id']);
    -      $category_link_array = self::create_catagory_link(true);
    +      $category_link_array = array_slice(self::create_catagory_link(true),0,1,true);
           $products_link_array = array_merge($category_link_array, $products_link_array);
         }
         
    @@ -368,4 +368,4 @@
       }
       
     }
    -?>
    \ No newline at end of file

    xt_modding

    • Neu im Forum
    • Beiträge: 27
    das sind nur ein Bespiel wie man aufs Wert kommt. Update sicher 100%. seo_mod_url kopieren, umbenennen (zB seo_url_shopstat_extra), oben class seo_url_shopstat extends ins class seo_url_shopstat_extra extends umbenennen.

    Dann die Änderungen beim Produkt Link durchführen und im admin backend die neue URL Datei aktivieren

    Muss hinhauen und update sicher

    h-h-h

    • modified Team
    • Beiträge: 4.562
    https://www.modified-shop.org/forum/index.php?topic=36368.msg361273#msg361273

    Das hat mich etwas verunsichert, da hier etwas mMn falsch interpretiert wurde.

    Code: PHP  [Auswählen]
    if (defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT')) {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true');
    } else {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);
    }

    und nicht:

    Ist im Prinzip das selbe wie das:

    Code: PHP  [Auswählen]
    if (!defined('ADD_CAT_NAMES_TO_PRODUCT_LINK')) {
      if (defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT')) {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true');
      } else {
        define('ADD_CAT_NAMES_TO_PRODUCT_LINK', true);
      }
    }

    ...  wenn die Konstante ADD_CAT_NAMES_TO_PRODUCT_LINK bereits definiert ist PHP noch diese E_NOTICE Constant ADD_CAT_NAMES_TO_PRODUCT_LINK already defined in ... ins Log schreibt.

    Danke, genau so habe ich das auch verstanden.

    Man könnte es auch so schreiben:

    Code: PHP  [Auswählen]
    defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') OR define('ADD_CAT_NAMES_TO_PRODUCT_LINK', defined('MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT') ? MODULE_SHOPSTAT_ADD_CAT_NAMES_TO_PRODUCT == 'true' : true);

    Hier ist der Fehler nicht mehr enthalten und es kommt nicht zu der E_NOTICE, wenn ADD_CAT_NAMES_TO_PRODUCT_LINK bereits definiert ist.

    Denkste.  :oops: Danke web0null.

    Würde es mit || statt OR noch funktionieren?

    Gruß, h-h-h
    0 Antworten
    2352 Aufrufe
    25. März 2011, 09:30:36 von mantis
    5 Antworten
    3653 Aufrufe
    16. Oktober 2012, 22:41:36 von Batman
    2 Antworten
    2170 Aufrufe
    05. März 2013, 09:16:09 von ralph_84
    3 Antworten
    2158 Aufrufe
    29. Oktober 2013, 21:22:40 von Modulfux