OpenCart 3.x CORE file módosítás Bug fix

SEO URL rewrite() fix

A startup/seo_url controller rewrite() metódusa nem kezeli a common/home route-ot (és más egyedi route-okat sem) – emiatt a főoldal és más egyéni oldalak URL-je nem kapja meg a SEO-barát alakot, hanem az eredeti /index.php?route=common/home formában marad.

A probléma

A rewrite() metódus csak ezeket a route-okat kezeli:

  • product/product + product_id paraméter
  • product/manufacturer/info + manufacturer_id paraméter
  • information/information + information_id paraméter
  • path paraméter (kategóriák)

Ha a bejövő link egyikre sem illeszkedik – például route=common/home –, a belső $url változó üres marad, és a metódus visszaadja az eredeti, SEO URL nélküli linket. A főoldal így nem a https://garazstechnika.hu/ URL-t, hanem az /index.php?route=common/home alakot kapja.

Két javítási lehetőség Ha csak a főoldal hiányzik, a Gyors javítás elegendő. Ha más egyedi route-ok (pl. egyedi extension oldalak) is szerepelnek a seo_url táblában, a Teljes javítás ajánlott – ez minden, az adatbázisban nyilvántartott route-ot kezel.

Hogyan működik?

1

URL parse-olás

A rewrite($link) a kapott linket parse_url()-lal szétbontja, majd a query string-ből parse_str()-gel kinyeri a paramétereket (pl. route, product_id, path).

2

Route azonosítás és SEO kulcsszó keresés

Az eredeti kód a kinyert paraméterek alapján meghatározza az entitás típusát (termék, gyártó, information, kategória), majd SQL-lel lekérdezi a megfelelő SEO kulcsszót a seo_url táblából. A common/home route erre a logikára nincs ráakasztva.

3

URL összerakás

Ha megvan a kulcsszó, a metódus visszaad egy tiszta URL-t: scheme://host/kulcsszo. Ha a kulcsszó üres (mint a common/home esetén), az eredmény csak scheme://host/ – azaz a domain gyökere, ami a főoldal helyes URL-je.

4

Generikus lookup (teljes javítás)

A teljes javítás a seo_url táblát query oszlop szerint keresi – ott a common/home sor keyword értéke üres string, így az összerakott URL https://garazstechnika.hu/ lesz. Minden más, táblában szereplő route ugyanígy kap SEO URL-t. Az adatbázisba fel nem vett route-ok változatlanul az eredeti linket kapják vissza.

Gyors javítás – csak common/home

Ez a megoldás kizárólag a főoldal URL-jét javítja. Nem igényel adatbázis módosítást.

📄 /public_html/garazstechnika.hu/catalog/controller/startup/seo_url.PHP

Keresd meg a rewrite() metóduson belül a foreach ($data as $key => $value) sort. Szúrd be az alábbi blokkot közvetlenül elé:

PHP – seo_url.PHP · rewrite() metódus elejére
// Homepage SEO URL fix
if (isset($data['route']) && $data['route'] == 'common/home') {
    return $url_info['scheme'] . '://' . $url_info['host']
        . (isset($url_info['port']) ? ':' . $url_info['port'] : '')
        . str_replace('/index.php', '', $url_info['path']);
}

A módosítás után a rewrite() eleje így néz ki:

PHP – rewrite() metódus – teljes kontextus
public function rewrite($link) {
    $url_info = parse_url(str_replace('&', '&', $link));

    $url  = '';
    $data = array();
    parse_str($url_info['query'], $data);

    // Homepage SEO URL fix
    if (isset($data['route']) && $data['route'] == 'common/home') {
        return $url_info['scheme'] . '://' . $url_info['host']
            . (isset($url_info['port']) ? ':' . $url_info['port'] : '')
            . str_replace('/index.php', '', $url_info['path']);
    }

    foreach ($data as $key => $value) {
        // ... többi kód változatlan
Eredmény: Cache törlése után a főoldal URL-je https://garazstechnika.hu/ lesz.

Teljes javítás – generikus route lookup

Ez a megoldás a common/home-on túl bármely, a seo_url adatbázis táblában rögzített route-ot kezeli. Jövőbeli egyedi oldalakhoz sem kell majd visszatérni a kódhoz – elegendő az adatbázisba felvenni az új route-ot.

📄 /catalog/controller/startup/seo_url.PHP

Szúrd be az alábbi blokkot a rewrite() metódusban a foreach ($data as $key => $value) sor elé (a gyors javítás helyett vagy helyett):

PHP – seo_url.PHP · generikus route lookup
// Generikus route lookup a seo_url táblából
if (isset($data['route'])) {
    $query = $this->db->query(
        "SELECT * FROM " . DB_PREFIX . "seo_url"
        . " WHERE `query` = '" . $this->db->escape($data['route']) . "'"
        . " AND store_id = '" . (int)$this->config->get('config_store_id') . "'"
        . " AND language_id = '" . (int)$this->config->get('config_language_id') . "'"
    );

    if ($query->num_rows) {
        $keyword = $query->row['keyword'];
        unset($data['route']);

        $query_str = '';
        if ($data) {
            foreach ($data as $k => $v) {
                $query_str .= '&' . rawurlencode($k) . '=' . rawurlencode($v);
            }
            $query_str = '?' . str_replace('&', '&', trim($query_str, '&'));
        }

        return $url_info['scheme'] . '://' . $url_info['host']
            . (isset($url_info['port']) ? ':' . $url_info['port'] : '')
            . str_replace('/index.php', '', $url_info['path'])
            . ($keyword ? '/' . $keyword : '')
            . $query_str;
    }
}
Hogyan kezeli a főoldalt? A seo_url táblában a common/home sorhoz tartozó keyword mező értéke üres string. Ezért a visszaadott URL-ben /keyword rész nem kerül hozzáfűzésre, az eredmény: https://garazstechnika.hu/.
Adatbázis feltétel: A generikus lookup csak akkor működik, ha a route fel van véve a seo_url táblába. A common/home alapból szerepel (üres keyword-del), de egyedi extension route-okhoz manuálisan kell felvenni a sort.

Adatbázis sor ellenőrzése / felvétele

Ellenőrizd, hogy a common/home sor létezik-e (a táblajavaslat előtag telepítésenként eltérhet – alapértelmezetten oc_):

SQL – ellenőrzés
SELECT * FROM oc_seo_url WHERE `query` = 'common/home';

Ha nincs találat, vedd fel:

SQL – felvétel (store_id=0, language_id=1 esetén)
INSERT INTO oc_seo_url (store_id, language_id, `query`, keyword)
VALUES (0, 1, 'common/home', '');
Tipp: A store_id és language_id értékét az éles bolt beállításaihoz igazítsd (Admin → System → Settings és Admin → Localisation → Languages).

Cache törlése

A kód módosítása után töröld az OpenCart cache-t, különben a régi SEO URL-ek maradnak érvényben.

1

Admin cache frissítés

Admin → Dashboard → fogaskerék ikon (jobb felső sarok) → Refresh

2

Böngésző cache törlése

Ctrl+Shift+R (Windows/Linux) vagy Cmd+Shift+R (Mac) – hard reload, amely figyelmen kívül hagyja a böngésző cache-t.

3

Ellenőrzés

Navigálj a főoldalra. A böngésző URL-sávjában https://garazstechnika.hu/ kell megjelenjen – index.php?route= nélkül.

Fájlszerkezet

Változásnapló

VerzióDátumVáltozás
1.1 2026-03-31 Generikus route lookup hozzáadva (seo_url tábla alapján) – kezeli a common/home-t és bármely egyéb táblában szereplő route-ot is. A gyors (csak common/home) javítás dokumentálva maradt alternatívaként.
1.0 2021-02-11 Első kiadás. Probléma azonosítva: rewrite() nem kezeli a common/home route-ot, a főoldal URL SEO nélkül marad.