tbaddade / redaxo_url Goto Github PK
View Code? Open in Web Editor NEWREDAXO 5 AddOn zur URL-Generierung für eigene AddOns (ehemals Url Control, ehemals Frau Schultze)
License: MIT License
REDAXO 5 AddOn zur URL-Generierung für eigene AddOns (ehemals Url Control, ehemals Frau Schultze)
License: MIT License
Extension Point:
YREWRITE_SITEMAP
Damit man beim Benutzen von rex_getUrl nicht mehr die Artikel-Id wissen muss.
Aus
rex_getUrl(4, '', ['id' => 5])
könnte zusätzlich dann
rex_getUrl('', '', ['news-id' => 5])
werden
Wenn nur eine Sprache in Redaxo vorhanden ist, werden die generierten URLs in der pathlist.php mit der clang_id 0 abgespeichert. Es gibt aber keine rex_clang mit dieser ID.
Wenn ich den Startartikel für eigene URLs auswähle erwarte ich die URL:
/de/meine-url/, bekomme aber /de/startartikelname/meine-url/.
ist es möglich an den Extension-Point URL_GENERATOR_PATH_CREATED noch den Tabellennamen weiterzureichen?
Hi, ich bekomme folgende Fehlermeldung (Erst-Installation, an zwei Projekten getestet):
AddOn url konnte aus folgendem Grund nicht installiert werden:
SQL error: Error while executing statement "SHOW COLUMNS FROM rex_url_generate_url
"! SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db130654_7.rex_url_generate_url' doesn't exist
Hey Thomas,
ist es möglich die generierten URLs irgendwo in eine "normale" Sitemap einzuhängen?
LG
Oliver
siehe auch
#54
a9bf2a3#diff-3f116a2cbbf8951f1fcc14c92ea8fec9
Hi,
ich habe nun, nachdem Issue #7 behoben wurde, die neueste Version aus Github gezogen.
Lokal arbeite ich hier seit kurzem mit Mamp, die "Detailseiten" leiten dort immer auf den Redaxo 404 Artikel. Auf dem Produktiv-Server werden die "Detailseiten" ohne Probleme angezeigt.
Hat das Addon eventuell Probleme mit abweichenden Ports? Lokal rufe ich die Seiten per http://beispielseite.dev:8888/ auf.
Gruß
Nico
@tbaddade Gibt es eine Möglichkeit Trailing Slash zu entfernen? Brauche das dringend für ein Projekt, da sonst alte URLs kaputt gehen.
In unserem Fall wurde die Pathlist nicht aktualisiert, wenn wir einen Datenbank-Eintrag gelöscht haben. Das wäre jedoch notwendig, da sonst alte URLs in der Pathlist bleiben. (ich weiß nicht, ob das grundsätzlich so ist, ist aber im Rahmen von #26 aufgefallen)
Das Addon lässt sich installieren obwohl yrewrite nicht installiert ist.
Call to a member function getSitemapFrequency() on null
Der Hinweis: Please install a rewriter addon or deactivate the Url AddOn.
ist aufgrund der Scrollposition nicht sichtbar. -> Core-Issue
redaxo/redaxo#1098
Hallo,
ich versuche gerade das Addon in Verbindung mit YRewrite/YForm zum laufen zu bekommen. Folgendes Problem habe ich:
Ich erzeuge die Links folgendermaßen:
rex_getUrl(5, 1, ['id' => $this->attributes['id']]);
5 ist die Artikel ID die ich im URL Addon entsprechend zugewiesen habe, $this->attributes['id'] der gewünschte Datensatz.
Die generierten Links beginnen nun jedoch alle mit "://:80".
Die Redaxo-Installation läuft auf einer Subdomain. Muss ich hier noch etwas beachten?
Ich verwende bei mehreren Artikeln den ParamKey "category_id". Die folge ist, dass beim rex_getUrl() Aufruf nur der erste Treffer in der Pathlist korrekt übersetzt wird, sonst wird die URL nur mit ?category_id ausgegeben.
Szenario:
domain.de/produkte/
ist ein Ziel-Artikel des URL-Plugins, die Artikel werden über domain.de/produkte/slug/
aufgerufen.Gummipunkt
in rex_products
wird mit leerem URL-Feld (hier: slug
) befülltdomain.de/produkte/
(ohne slug
-Wert, die Übersichtsseite) die id
zum Datenbankeintrag Gummipunkt
zurück.Zu erwarten wäre, dass leere Eingaben grundsätzlich keinen Datenbanktreffer auslösen können.
(In der Hilfe könnte man desweiteren erwähnen, dass YForm für das URL-Feld (hier: slug
) 2 Validierungen anwendet: unique
und empty
. Bei uns war empty
nicht aktiviert.)
Ich habe gerade den Fall, dass auf einer Seite ein Template an mehreren Artikeln eingebunden werden, die UrlGenerator::getId()
verwenden. So kann es sein, dass UrlGenerator::getId()
darin einmal die ID des Datensatzes aus tabelle_a
bekommt, bspw. 5
und einmal die des Datensatzes aus tabelle_b
, bspw. auch 5
Ich möchte allerdings nur dann eine ID, wenn ich mich auch im korrespondierenden Artikel befinde, bspw.
UrlGenerator::getId('tabelle_a')
. Das muss ich derzeit von Hand abfragen, bspw.:
$event_id = UrlGenerator::getId();
if($event_id && rex_article::getCurrentId() == 6) {
Wenn die Pathlist im Backend neu generiert wird und man sich auf einer Seite befindet, die ein Modul enthält, dass das Addon aufruft, wird die Methode Generator::getUrlById
aufgerufen. Zu diesem Zeitpunkt enthält die Variable Generator::$paths
die gerade generierten Daten. Dadurch ist $articleIds[$articleId][$primaryId][$clangId]
in dieser Schleife https://github.com/tbaddade/redaxo_url/blob/master/lib/Url/Generator.php#L534-L569 ein stdObject
und kein Array, wodurch der Fehler Cannot use object of type stdClass as array
geworfen wird.
Wenn ich vor der Schleife die Daten statt mit self::ensurePaths()
mit self::$paths = \rex_file::getCache(self::$pathfile);
zwingend neu lade, funktioniert es.
Der Fehler fiel mir im Zusammenhang mit dem online/offline Schalten eines Startartikels in den durch structure_tweaks verschobenen Metadaten auf.
In meinem Addon erzeuge ich URLs für Kategorien in mehreren Sprachen. Hier zwei Beispiele:
http://www.promitec.de/de/maschinen/einbauruehrwerke/
http://www.promitec.de/en/machines/industrial-agitators/
Maschinen dieser Kategorie haben z.B. folgende URLs:
http://www.promitec.de/de/maschinen/industrial-agitators/promi-individuelles-einbauruehrwerk/
http://www.promitec.de/en/machines/industrial-agitators/promi-customized-agitator/
Spannend ist, dass die deutsche URL der Maschine auf einmal den englischen Kategorienamen enthält obwohl in der Konfiguration festgelegt ist, dass die Relationstabelle eine Sprach-ID hat. Aber offentsichtlich wird diese nicht mit der Sprach-ID der Tabelle aus der die URLs erstellt werden verknüpft.
Hier der Code des Projektes: https://github.com/TobiasKrais/d2u_machinery/blob/master/install.php#L64
Zeilen 64 bis 90 installieren die entsprechenden Views und URL Schemata.
Fehler beim Strato Hosting: "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay"
Ist in einem Yrewrite-Scheme ein leerer String als Suffix definiert, wird die Artikel-URL in dieser Methode komplett gelöscht: https://github.com/tbaddade/redaxo_url/blob/master/lib/Url/Generator.php#L100-L107.
Als umgeschriebene URL wird daher nur der vom Addon angehängte Teil gespeichert.
Ist das Suffix NULL, wird der Slash vor dem vom Addon angehängten Teil verdoppelt.
liegt daran, dass das Speichern des ContainerFields von Multiple(true) auf Multiple(false) gesetzt wurde.
Sollte das im Updateskript beachtet werden oder lassen wie es ist, da es sich immer noch um eine Beta Version handelt?
Wenn ich einen Datensatz in der Tabelle ändere, ändert sich das lastmod Feld in der Sitemap bei allen Datensätzen. Wäre es möglich alternativ auf ein Feld in der Datenbank Tabelle zuzugreifen, die einen Unix-Timestamp enthält?
Wird bei wachsender Anzahl von Urls sehr träge.
"Error" thrown in /Users/oliennotebook/Sites/abcd/redaxo/src/addons/url/boot.php on line 56
Call to a member function getSitemapExtensionPoint() on null
Ich habe eine Maschinendatenbank. Die Maschinen sind in Kategorien eingeteilt. Also habe ich zwei Konfigurationen:
AddOn url konnte aus folgendem Grund nicht installiert werden:
SQL error: Error while executing statement "SHOW COLUMNS FROM rex_url_generate
"! SQLSTATE[42S02]: Base table or view not found: 1146 Table 'rex5basic3.rex_url_generate' doesn't exist
Beispiel: Standardsprache ist Deutsch. Wenn ein Artikel, der für eigene URLs verwendet wird in Englisch Offline ist, wird die URL in Deutsch generiert.
Lösungsvorschläge:
a) Es werden gar keine URLs erstellt, da Artikel offline ist (das wäre mein Wunsch)
b) Es werden die URLs mit der korrekten Sprache erstellt.
Hi,
wenn ich mir eine URL ausgeben lassen will kommt bei mir folgender Fehler:
Undefined index: 1_xxx_rex_news_clang_id
redaxo/src/addons/url/lib/Url/Generator.php (aktuelles generator.php aus dem Git ist eingebunden)
Somit kann ich natürlich auch meine URL nicht aufrufen.
Dieses Problem tritt sowohl lokal als auch live auf.
Ich habe meine Konfiguration via YRewrite vorgenommen (Domain für deutsche Sprache ist eingerichtet - htaccess gesetzt).
Versionen:
Erhält der Redaxo Artikel einen benutzerdefinierten URL wird dieser im Rewrite (glaube ich) verändert; folgendermaßen:
produkt wird zu produk
produkte wird zu produkt
es wird jeweils der letzte Buchstabe weggetrimmt.
Rex frisch von Redaxo.org
"rex_functional_exception" thrown in /Applications/MAMP/htdocs/rex5basic/redaxo/src/addons/url/lib/Url/Url.php on line 693
Please install a rewriter addon and call Url::setRewriter(Rewriter $rewriter).
#0 /Applications/MAMP/htdocs/rex5basic/redaxo/src/addons/url/boot.php(18): Url\Url::boot()
#1 /Applications/MAMP/htdocs/rex5basic/redaxo/src/core/lib/packages/package.php(226): include('/Applications/M...')
#2 /Applications/MAMP/htdocs/rex5basic/redaxo/src/core/packages.php(55): rex_package->includeFile('boot.php')
#3 /Applications/MAMP/htdocs/rex5basic/redaxo/src/core/backend.php(105): include_once('/Applications/M...')
#4 /Applications/MAMP/htdocs/rex5basic/redaxo/src/core/boot.php(105): require('/Applications/M...')
#5 /Applications/MAMP/htdocs/rex5basic/redaxo/index.php(9): require('/Applications/M...')
#6 {main}
Kommt sofern yrewrite noch nicht installiert ist..
Ich verwende yrewrite 2.2.1 und url 1.0.0-beta4 - die URL Generierung auf Basis einer erstellten Veranstaltungs DB funktioniert super - auch die Ergänzung der URLs in die Sitemap. Nur die SEO Generierung des meta titles und meta description will irgendwie nicht. Trotz Einstellung im Addon kommt nicht title und description aus den gewählten Spalte sondern immer noch vom Artikel. Hab ich etwas vergessen?
Als Ausgabe im header verwende ich
<?php $seo = new rex_yrewrite_seo(); echo $seo->getTitleTag().PHP_EOL; echo $seo->getDescriptionTag().PHP_EOL; echo $seo->getRobotsTag().PHP_EOL; echo $seo->getHreflangTags().PHP_EOL; echo $seo->getCanonicalUrlTag().PHP_EOL; ?>
Um die ID einer Kategorie zu erhalten bspw.
siehe #22
Weitere erforderlich?
Ich habe mir gerade ein neues Addon für die Ausgabe meiner Events geschrieben und wollte gern suchmaschinenoptimierte URLs haben. Dies lief bis vor kurzem super doch jedesmal wenn ich, nach der Re-Installation das redaxo_url Addons, den System-Cache lösche bekomme ich folgenden Fehler angezeigt.
"Error" thrown in /www/htdocs/w010b316/muenzberg.me/redaxo/src/addons/url/lib/Url/Rewriter/Yrewrite.php on line 127
Call to a member function normalize() on null
Beispiel: Ich möchte gerne den SEO-Titel aus Produktname und Kategorie kombinieren.
Wir hatten heute bei einer Website den Fall, dass die generierten URLs des Schemas /artikel/relation/datensatz/
nicht funktioniert haben:
/artikel/relation/datensatz/
ausgegeben/artikel/)
, jedoch ohne Treffer in URLGenerator::getId();
/artikel/relation/datensatz/
als auch /artikel/datensatz/relation/
Bei Bedarf können ich / @PixelPaul dir Zugang zur betroffenen Installation geben.
25.10.2016 10:18:55 Notice Undefined index: 1_xxx_rex_team_clang_id
redaxo/src/addons/url/lib/Url/Generator.php
Zeile 69
Hallo Thomas, es wäre schon wenn man mehrere "Einschränkungen" haben könnte und diese noch mit AND und OR kombinieren könnte (z.B. "status=1 AND jahr >2016" oder "category=1 OR category=2")
Wenn ich mich in www.website.net/artikel/url-titel/
befinde, sollte yRewrite die aktuelle URL ausgeben und nicht den Container-Artikel www.website.de/artikel/
Gleiches gilt für generierte URLs, die unterschiedliche Sprachen haben. Wenn ich in
www.website.net/de/artikel/url-titel/
bin, sollte der hreflang-Eintrag von yRewrite www.website.net/en/article/url-title/
ausgeben.
Hatte ein Update von irgendeiner alpha gemacht. Danach bekam ich diesen Fehler:
Error while executing statement " SELECT
id
,
article_id
,
clang_id
,
url
,
table
,
table_parameters
,
relation_table
,
relation_table_parameters
FROM rex_url_generate LIMIT 0,30"! SQLSTATE[42S22]: Column not found: 1054 Unknown column 'relation_table' in 'field list'
Reinstallieren hat nicht geholfen. Daher dacht ich mir, probiere ich es mal mit Deinstallieren und wieder Installieren. Hat auch nicht geholfen, da die Tabelle eben nicht gelöscht wird.
der urlParamKey
darf nur mehrmals ein und derselben Tabelle vergeben werden (Filtervarianten).
Szenario: Ein YForm-Formular, das das Formular an die aktuelle Seite absenden soll, die mit dem URL-Addon generiert wurde.
$yform->setObjectparams('form_action',rex_getUrl());
erwartetes Verhalten: Die URL der aktuellen Seite wird ausgegeben
tatsächliches Verhalten: Die URL des Artikels wird ausgegeben.
Noch schöner wäre es btw., wenn YForm direkt die korrekte URL bei aktiviertem Addon übernimmt, stattdessen wird man auf die 404er-Seite weitergeleitet.
Wenn man mehr als eine Domain in YRewrite hat, dann wird bei unterschiedlichen URL-Profilen mal die URL zum Artikel
/folder/scheme
, und http://domain2.de/folder/scheme/
, oderhttp://domain1.de/folder/scheme
, und /folder/scheme/
angezeigtJe nachdem, mit welcher Domain man im Redaxo-Backend eingeloggt ist. Ist das so gewollt?
Hi,
sofern ich die erzeugten URLs mit in der sitemap.xml anzeigen lassen möchte wird die sitemap.xml nicht richtig ausgegeben.
Es werden zwei Leerzeichen am Anfang gerendert.
LG
Oliver
XML-Verarbeitungsfehler: XML- oder Text-Deklaration nicht am Beginn der Entität Adresse: http://abc.de/sitemap.xml Zeile Nr. 1, Spalte 3: <?xml version="1.0" encoding="UTF-8"?> --^
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.