Coder Social home page Coder Social logo

friendsofredaxo / yrewrite_scheme Goto Github PK

View Code? Open in Web Editor NEW
37.0 5.0 7.0 116 KB

Stellt verschiedene URL-Schemes für YRewrite mehrsprachig zur Verfügung

License: MIT License

PHP 100.00%
redaxo redaxo-addon yrewrite url-schemes seo hacktoberfest hacktoberfest2021

yrewrite_scheme's Introduction

YRewrite Scheme

stellt eine Auswahl von URL-Schemes für YRewrite zur Verfügung.

Für jedes Schema können der Suffix, die passende URL-Normalisierung je Sprache und eine URL-Ersetzung gewählt werden. Andere AddOns, die eigene Schemes installieren, sollten vorab deaktiviert werden. Die Einstellungen findet man im zusätzlichen Reiter YRewrite Scheme in YRewrite.

Suffix

Hier kann der Suffix der URLs festgelegt werden. Zur Auswahl stehen:

  • "ohne"
  • ".html"
  • "/"

Schemen

1. Standard

Stellt ein optimiertes YRewrite-Schema zur Verfügung, das dieser Form entspricht:
example.tld/sprache/kategorie/kategorie/…/artikel/ Es ist insofern optimiert, dass es html Tags aus URLs entfernt und eine erweiterte Ersetzungstabelle verwendet. Die erweiterte Ersetzungstabelle weist nur bei speziellen Serverkonfigurationen unterschiede zum YRewrite Schema auf. Sie ist vor allem für Sprachen, die die URL kodierung Nutzen interessant.

2. One Level

Implementiert ein kurzes URL-Schema für alle Unterseiten.

Vorher:

example.tld/en/coffee/beans/india/malabar.html (yrewrite 1)
example.tld/en/coffee/beans/india/malabar/ (yrewrite 2)

Nachher:

example.tld/en/malabar (ohne suffix)

⚠️ Wichtig: Das Schema ist nur dann sinnvoll, wenn Seiten innerhalb einer Sprache nicht mehrfach vorkommen. Gäbe es etwa den Malabar-Kaffee nicht nur in 🇮🇳 Indien, sondern auch in 🇧🇷 Brasilien, sollte dieses URL-Schema besser nicht verwendet werden!


URLReplace

Ersetzt die URLs der Elternkategorien mit den URLs der nächst zugehörigen Kindkategorie.
Hier stehen 2 Varianten zur Auswahl:

  • Variante 1: Es werden nur die Kategorien ersetzt, deren Startartikel keinen Inhalt haben.
  • Variante 2: Es werden alle Kategorien ersetzt, unabhängig vom Inhalt der Startartikel.

Ideal für Webpräsenzen, die keine Vorschaltseiten für die jeweilige Kategorie benötigen (z.B. bei einer Dropdown-Navigation)

Sprachen

Für jede Sprache kann eingestellt werden, ob das optimierte YRewrite Schema verwendet werden soll, oder die Zeichen URL kodiert werden sollen. Letzteres ermöglicht russische, chinesische und andere URLs - kurz gesagt URLs mit Zeichen die nicht das lateinische Alphabet verwenden.

мне-нравится-редакс.html

编辑系统.html

Schema modifizieren

YRewrite Scheme lässt sich wie das Original YRewrite auch modifizieren / erweitern. Hierzu muss sichergestellt werden, dass das eigene AddOn oder das Projekt-AddOn in der package.yml load: late notiert hat. Damit wäre sichergestellt, dass es nach dem yRewrite_scheme AddOn geladen und registriert wird.

Beispiel Änderung der Umschreibung für das & Zeichen in einer Url

In die boot.php des project-AddOns:

$addon = rex_addon::get('project');
$scheme = new my_project_rewrite_scheme();
rex_yrewrite::setScheme($scheme);

In den Lib-Ordner des project AddOns (z.B. `my_project_rewrite_scheme.php)

class my_project_rewrite_scheme extends yrewrite_url_schemes
{
    /**
     * @param string $string
     * @param int    $clang
     *
     * @return string
     */
    public function normalize($string, $clang = 1)
    {
        $string = str_replace(
      ['&'],
      ['und'],
      $string
    );
        return parent::normalize($string, $clang);
    }
}

Eigenes Schema verwenden ohne dieses AddOn?

Anleitung und Beispiele findet Ihr in der Dokumentation innerhalb des yrewrite-Addons oder auf Github.

Lizenz

siehe LICENSE

Credits

yrewrite_scheme's People

Contributors

chrison94 avatar dtpop avatar eace avatar isospin avatar omphteliba avatar pschuchmann avatar schuer avatar skerbis avatar tobiaskrais avatar tyrant88 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

yrewrite_scheme's Issues

Großes "Ü" wird nicht zu UE oder ue umgeschrieben, sondern zu U

Redaxo 5.8.0
yrewrite 2.6
yrewrite_scheme 3.1.0

Beginnt eine Kategorie mit einem großen "Ü" wird die URL nicht zu "ue" oder "UE" umgeschrieben, sondern lediglich zu "u" bzw "U". Dies betrifft auch folgende Unterkategorien, die in dieser Kategorie vorhanden sind.

kompatibilität mit yrewrite 2.7

in yrewrite 2.7 gibt es das neue feature Startsprache automatisch gemäß Sprache des Client-Browsers, bevorzugte Sprache als Fallback. wenn man diese automatische umleitung aktiviert, ist / nur noch eine weiterleitung, und auch die bevorzugte sprache bekommt als startseite /de/ (o.ä.).

sobald yrewrite_scheme aktiviert ist, wird die url der bevorzugten sprache wieder zu '/'.
das führt dazu, das die seite der hauptsprache für user, die diese sprache nicht im browser eingestellt haben nicht aufrufbar ist.

Mehr SEO42-Magie (URL-Weiterleitungstypen)

Erinnerungsstütze für @skerbis

image

  • Weiterleitungstypen (intern, extern, Medienpool, keine URL...) an einer geeigneten Stelle definieren können
  • verständliche, einfach gehaltene GUI für Redakteure (siehe SEO42)
  • Kompatibilität zur Verwendung in REX_LIST
    • bspw. dadurch, indem Weiterleitungstypen wie in SEO42 am Artikel definiert werden
    • ggf. visuelles Feedback in der Struktur-Übersicht (anderes Kategorie-Icon, zusätzliche Spalte)

"Diese Kategorien aus URL entfernen" leitet auf Startseite der entfernten Kategorie bei Sprachwechsel.

Hi zusammen,

mit scheme 3.2.1 oder 3.3.0-dev und yrewrite 2.7b2 oder 2.7dev und diesen settings
grafik
Struktur ist diese:
grafik

Die cat skip1 wird richtig aus dem url entfernt und die test-subsites funktionieren.
Problem: Auf der home funktioniert der Sprachwechsel zur sekundären Sprache nicht mehr, unter home.de/en erscheint der Startartikel der entfernten Kategorie anstelle der englischen Home.
Mit one level funktioniert alles wie es soll.

Addon Umbennen?

Da das wort schemes in vielen kontexten genutzt wird finde ich sollte die bezeichnung etwas weniger generische sein

Vorschlag

  • yrewrite_schemes

Kategorien aus URL entfernen funktioniert nur in Hauptsprache

3-sprachige Website, URLs der ausgewählten Kategorien werden nur in der Hauptsprache entfernt. Die URLs werden auf die Startseite weitergeleitet. Schema Standard.

Affected versions / Verwendete Versionen
yrewrite_scheme 3.6.2

REDAXO: 5.41.1
PHP: 8.0.24
Database:
Browser:
AddOns:

Did it whoops? / Whoops erhalten?

Classic Rewrite before 5.x ermöglichen

ArtId-clanID-name.html

return $path . '/' . $art->getId() .'-'. $art->getClang() .'-'. $this->normalize($art->getName(), $art->getClang()) . $path_suffix;

Ersetzungs-Array anpassbar machen

Es wär super wenn der Ersetzungs-Array im Addon anpassbar wär. Um individuelle Umschreibungen wie z.B. "&" => "und" einfacher umzusetzen.

Warning beim Ändern einer Sprache

Gerade beim Ändern einer Sprache in Redaxo 5.10 und YRewrite 2.6 aufgetreten.

Warning: in_array() expects parameter 2 to be array, string given in redaxo/src/addons/yrewrite_scheme/lib/yrewrite_url_schemes.php on line 76

Idee: Nur eine konfigurierbare Scheme-Klasse

Im Moment kann man nur eine der angebotenen Scheme-Klassen wählen.
Man könnte auch einen anderen Ansatz wählen:
Eine Backend-Page, wo man sich das Schema zusammenklicken kann, und nur eine Scheme-Klasse, die gemäß den gewählten Optionen agiert. Also innerhalb der Scheme-Klasse die Optionen abfragen.

Vorteil wäre, dass man kombinieren kann. Zum Beispiel One Level zusammen mit einer der Weiterleitungs-Schemes.

Sprache berücksichtigen lib/yrewrite_url_schemes.php:63

if ($art->isStartArticle() && ($cats = $art->getCategory()->getChildren(true)) && !rex_article_slice::getFirstSliceForCtype(1, $art->getId(), rex_clang::getCurrentId())) {

rex_clang::getCurrentId() durch $art->getClang() ersetzen

Warnings nach config_save

Ich erhalten folgende Warnings nach dem ich die Konfiguration speichere:

Warning: rmdir(/home/cpointm/www/inuikii.com/redaxo/cache/addons/mediapool) [function.rmdir.php]: Directory not empty in /home/cpointm/www/inuikii.com/redaxo/src/core/lib/util/dir.php on line 123
Warning: rmdir(/home/cpointm/www/inuikii.com/redaxo/cache/addons/media_manager) [function.rmdir.php]: Directory not empty in /home/cpointm/www/inuikii.com/redaxo/src/core/lib/util/dir.php on line 123
Warning: rmdir(/home/cpointm/www/inuikii.com/redaxo/cache/addons) [function.rmdir.php]: Directory not empty in /home/cpointm/www/inuikii.com/redaxo/src/core/lib/util/dir.php on line 123```

Neuen Unicode-Modus des Mutteraddons unterstützen

YRewrite hat inzwischen einen eigenen Unicode-Modus, der auch Sprachen mit anderen Schriften (kyrillisch etc.) unterstützt.
Dieser Modus belässt auch die deutschen Umlaute wie sie sind (also "ä" wird nicht "ae").
Der Modus arbeitet mit einem recht speziellen Regex und noch ein paar speziellen Ersetzungen: https://github.com/yakamara/redaxo_yrewrite/blob/72564f4e33a68154aff424194c11f66b3bda2a28/lib/yrewrite/scheme.php#L131-L134

Der Modus lässt sich in den allgemeinen YRewrite-Einstellungen aktivieren.
Jedoch wenn man yrewrite_scheme installiert hat, lässt sich der Modus nicht 100% so nutzen.
Denn yrewrite_scheme ersetzt grundsätzlich erstmal viele der Umlaute:

$replaced_string = str_replace(
['À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ', '/', '®', '©', '™', ':', '#', '$', '%', '&', '(', ')', '*', '+', ',', '.', '/', '!', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '`', '{', '}', '~', '–', '’', '¿', '”', '“', ' '],
['A', 'A', 'A', 'A', 'Ae', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'Oe', 'Oe', 'U', 'U', 'U', 'Ue', 'Y', 'ss', 'a', 'a', 'a', 'a', 'ae', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'oe', 'oe', 'u', 'u', 'u', 'ue', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'Oe', 'oe', '-', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '-'],
strip_tags(trim(mb_strtolower($string)))
);

Ich fände es schön, wenn man trotz yrewrite_scheme, den neuen Unicode-Modus 1:1 wie im Mutteraddon nutzen könnte, ohne diese zusätzlichen Zeichenersetzungen.
Ich bin mir aber unsicher, wie man das nun am besten hier integriert, da dieses Addon ja vorher schon, sprachspezifisch, einen eigenen Unicode-Modus hatte.
Dieser Modus ersetzt aber eben einerseits trotzdem viele Umlaute.
Und andererseits ersetzt er einige Sonderzeichen nicht, die der yrewrite-unicode-modus hingegen ersetzt (per diesem speziellen regex, siehe oben), wenn ich das richtig sehe.
Beispiele siehe PR: yakamara/redaxo_yrewrite#360
Ich glaube, dass der Unicode-Modus aus diesem Addon zum Beispiel die Emojis, und auch "&" etc. so in der URL lassen würde, was bei manchen Zeichen problematisch sein kann.

Also letztlich würde ich mir also eine Variante wünschen, wo dieses Addon einfach nur per parent::normalize an die Elternklasse weiterreicht, ganz ohne eigene Anpassungen.

Readme : Verständnis OneLevel

Der untere Hinweis scheint sich zu widersprechen.

innerhalb einer Sprache ... Indien ... Brasilien

Oder ist dies hier nicht möglich?
example.tld/hi/malabar
example.tld/pt/malabar

Aus der Readme

2. One Level

Implementiert ein kurzes URL-Schema für alle Unterseiten.

Vorher:

example.tld/en/coffee/beans/india/malabar.html (yrewrite 1)
example.tld/en/coffee/beans/india/malabar/ (yrewrite 2)

Nachher:

example.tld/en/malabar (ohne suffix)

⚠️ Wichtig: Das Schema ist nur dann sinnvoll, wenn Seiten innerhalb einer Sprache nicht mehrfach vorkommen. Gäbe es etwa den Malabar-Kaffee nicht nur in 🇮🇳 Indien, sondern auch in 🇧🇷 Brasilien, sollte dieses URL-Schema besser nicht verwendet werden!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.