Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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  smile


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline