Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 17. Mai 2019 08:17
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
URLs im Newsmodul nachträglich füllen
Bei einem aktuellen Projekt (Update von v1.10 auf 2.2) habe ich knapp 1000 Beiträge aus dem Newsmodul über die Datenbank exportiert und in die neue Datenbank importiert. Das hat auch gut geklappt. Allerdings gab es seinerzeit keine explizite URL zum Beitrag und das Feld ist leer. Allerdings funktionieren die aktuellen (automatischen) Links mit News-ID und Titel nicht mehr (Seite wird nicht gefunden). Neue Beiträge bekommen automatisch YYYY/MM/Titel zugewiesen und alles klappt.
Jetzt dachte ich mir, dass ich über die Datenbank das Feld URL automatisch entsprechend fülle. Datum und Titel sind ja da.
Aber da ich nicht die mySQL- und PHP-Leuchte bin, bräuchte ich dafür ein Skript.
Mache ich es manuell, funktioniert es. Aber bei der Zahl der Beiträge ist das zu viel Handarbeit und eine zu große Fehlerquelle. Leider hilft es auch nicht, z.B. den Titel einmal zu löschen und neu einzutragen - das URL-Feld bleibt leer.
Im Prinzip brauch ich sowas:
Suche alle Beiträge aus Kategorie x mit leeren Feld URL und fülle das Feld URL mit YYYY/MM/ vom Datum und hänge den URL-bereinigten Titel (keine Leer- und Sonderzeichen) an.
Mache ich das besser über PHPmyAdmin oder mit einem kleinen PHP-Skript? Gibt's da vielleicht schon was?
Offline
#2 17. Mai 2019 11:14
- Janl
- Server-Pate
- Ort: Freistadt, Österreich
- Registriert: 13. Dezember 2010
- Beiträge: 1.227
- Webseite
Re: URLs im Newsmodul nachträglich füllen
Da habe ich keine Fertiglösung aber meiner Meinung nach geht das mit SQL-Scripts in PHPmyadmin.
So etwa wie
Update url=("yyyy/mm/"+"titel") where url=""
Hoffe Du kannst damit weiter kommen.
MfG
Jan
Ubuntu 16.04 KDE - Kubuntu 18.04 / win10 (1 duo-boot laptop)- LAMP
Raspi 4b mit Ubuntu 20.04 (64bit) und Mate.
Offline
#3 17. Mai 2019 15:26
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: URLs im Newsmodul nachträglich füllen
Genau, in diese Richtung müsste es gehen. Allerdings muss das Datum erst noch zusammengebastelt werden, da es ja in einem anderen Format in der DB steht. Und Gleiches gilt für den Titel, der ja erst noch URL-Tauglich gemacht werden müsste ... da hängt es bei mir :-/
Ein Update-Skript-Schnipsel habe ich sogar, auch schon öfter benutzt.
Die Frage ist, ob das überhaupt direkt in PHPmyadmin geht oder ob ich ein kleines PHP-Skript dafür brauche.
Offline
#4 17. Mai 2019 16:18
- Janl
- Server-Pate
- Ort: Freistadt, Österreich
- Registriert: 13. Dezember 2010
- Beiträge: 1.227
- Webseite
Re: URLs im Newsmodul nachträglich füllen
Hallo Jeff1980,
es geht vieles in Mysql, ich schaue das mal nach.
Ich habe 2 oder 3 Testinstallationen mit 2.2 (8 und 10) glaube ich.
1.10 habe ich sicher noch eine.
Bisschen Geduld.
mfg
Jan
Ubuntu 16.04 KDE - Kubuntu 18.04 / win10 (1 duo-boot laptop)- LAMP
Raspi 4b mit Ubuntu 20.04 (64bit) und Mate.
Offline
#5 17. Mai 2019 20:58
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.927
- Webseite
Re: URLs im Newsmodul nachträglich füllen
Das kannst du wie folgt machen.
update cms_module_news set news_url = concat(DATE_FORMAT(cms_module_news.news_date,'%Y/%m/%d/'), regex_replace('[^A-Za-z0-9-]', '', LOWER(replace(cms_module_news.news_title,' ','-')))) where IFNULL(cms_module_news.news_url,'') = ''
Im Query habe ich die Funktion "regex_replace" verwendet. Dies ist keine Standardfunktion von Mysql sondern eine eigene Funktion. Um dies anlegen zu können, musst du im phpMyAdmin wie folgt vorgehen:
Rufe den Tab "SQL" auf und füge folgenden Code ein:
DELIMITER $$
DROP FUNCTION IF EXISTS `regex_replace`$$
CREATE FUNCTION `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN
DECLARE temp VARCHAR(1000);
DECLARE ch VARCHAR(1);
DECLARE i INT;
SET i = 1;
SET temp = '';
IF original REGEXP pattern THEN
loop_label: LOOP
IF i>CHAR_LENGTH(original) THEN
LEAVE loop_label;
END IF;
SET ch = SUBSTRING(original,i,1);
IF NOT ch REGEXP pattern THEN
SET temp = CONCAT(temp,ch);
ELSE
SET temp = CONCAT(temp,replacement);
END IF;
SET i=i+1;
END LOOP;
ELSE
SET temp = original;
END IF;
RETURN temp;
END$$
DELIMITER ;
Danach auf "Ok" klicken. Damit legst du die fehlende Funktion an.
Anschliessend kannst du das erste SQL-Query zum schreiben der URLs ausführen.
--> Achtung: Mach zuerst ein Backup der DB und prüfe nach der Ausführung ob alles wie gewünscht funktioniert.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#6 30. Mai 2019 06:18
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: URLs im Newsmodul nachträglich füllen
Sorry für die späte Antwort, habe nicht mehr reingeschaut und keine Benachrichtigung bekommen - warum?
Die Lösung ist genial und hat geklappt - vielen Dank dafür :-)
Offline
#7 30. Mai 2019 11:19
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.927
- Webseite
Re: URLs im Newsmodul nachträglich füllen
Schön hat es geklappt
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
Seiten: 1