WebsiteBaker Community Forum

WebsiteBaker Support (2.12.x) => Modules => Topic started by: Martin Hecht on December 12, 2018, 12:56:20 AM

Title: rss-feed-all
Post by: Martin Hecht on December 12, 2018, 12:56:20 AM
Probably I haven't posted this module here at all, but recently I have updated this snippet. It is supposed to provide rss feeds about everything on a web page (some modules like news have their own feeds, but only about a limited region of content on a web page).
This one aims to catch everything, but it's not much tested, and it relies on catching the latest changes from several modules, so if updates in some modules that provide some text are not properly included in the feed, the snippet might need to be updated in order to support that specific module as well...
Title: Re: rss-feed-all
Post by: hgs on December 12, 2018, 07:52:52 AM
Modul lässt sich nicht auf einer WB 2.12.1 mit php7.2 installieren. Fehlermeldung:

Code: [Select]
[160] Module directory /modules/rss-feed-all/info.php not exists or has invalide chars
Problem ist der Modulunterordnernam e, geändert auf:

$module_directory   = 'rss_feed_all';

Damit war es kein Problem
Title: Re: rss-feed-all
Post by: Luisehahne on December 12, 2018, 07:56:55 AM
Hyphens or underscores in directory or file names
They are both valid for folder names. Some addons you will find will have hyphens, but it is better to use underscores, as the use of hyphens has problems with JavaScript and PHP (e.g. namespaces, class names, etc). Because of better readability (Google & Co) hyphens are only allowed for access files

Dietmar
Title: Re: rss-feed-all
Post by: Martin Hecht on December 12, 2018, 10:45:05 AM
dann muss man aber an vielen Stellen im Modul den Pfad ändern (oder man legt wieder einen Symlink an, der so heißt wie der ursprüngliche Modulordner und dann auf den geänderten Ordner zeigt)

Unter der 2.8.x Serie ließ sich das installieren. Ein Upgrade ist dann problematisch, wenn ein gleichnamiges Modul einen neuen Installationsordner verwendet.

Es gibt wohl nur wenige Nutzer außer mir bisher (vielleicht haben es wenn überhaupt eine Hand voll User von Github geholt), so dass das ein eher theoretisches Problem ist. Aber wie würde man prinzipiell mit dem Problem umgehen? Im Upgrade-Skript den alten Ordner löschen und die Daten aus der Info.php irgendwie in der DB aktualisieren?
Title: Re: rss-feed-all
Post by: Luisehahne on December 12, 2018, 01:41:09 PM
Hallo Martin,

hoffe es geht dir gut, eigentlich sehe ich keine Probleme mit dem upgrade, wenn nix übersehen habe. Im Grunde genommen macht doch das Script auch in einem anderen Ordner genau das was es vorher auch gemacht hat, es erzeugt RssFeeds. An dem Aufruf ändert sich ja nix. Die include.php wird genauso eingebunden wie vorher auch.

Mein Vorschlag wäre folgende Anpassung
Folgende Declaration der Variable in deiner config.php, oder Declarieren in den Scripten wo die config.php nicht eingebunden wird
Code: [Select]
$sAddonRelPath = '/modules/'.basename(__DIR__).'/'; // set foldername dymanically

dann kannst du die davor mit WB_PATH oder WB_URL aufrufen, so wie das Addon es braucht. z.B
Code: [Select]
require(WB_PATH.sAddonRelPath.'config.php');

Zum Einen empfehle ich dir Scripte nicht mit require_once oder include_once aufzurufen. Das hat bei mir in Verbindung mit ob_start() riesige Probleme verursacht
Code: [Select]
if (!\function_exists('make_dir')) {require (WB_PATH.'/framework/functions.php');}

die core config binde ich so ein
Code: [Select]
if (!\defined('WB_PATH')) {require((\dirname(\dirname((__DIR__)))).'/config.php');}

Damit erspare ich mir redeclare Fehlermeldungen. In Hoffnung das nichts vergessen oder übersehen habe stehe ich bei Fragen  jederzeit gerne zur Verfügung, oder wir skypen mal wieder. Meine Lösung sollte auch in allen Forks funktionieren.  :-D

Achja fast vergessen. Readme' s oder Changelogs in der info.php bitte immer erst nach den Variablen Declarationen, DANKE

Ansonsten frohes Schaffen und ein geruhsames Weihnachtsfest und einen guten Rutsch ins neue Jahr

Dietmar
Title: Re: rss-feed-all
Post by: Gast on December 12, 2018, 03:27:37 PM
es gibt schon einige "Kleinigkeiten", z.b. die Umbenennung der config.default.php in eine config.php im Install- und im Upgrade-Prozess mit der Folge, das die (user-eigene) Datei config.php nicht gefunden wird, weil das Script im falschem Ordner sucht (rss-feed-all statt rss_feed_all) und dementsprechend neu erstellt und damit überschrieben wird.

Und die view soll nicht laufen, weil sie die include.php nicht findet

Title: Re: rss-feed-all
Post by: Martin Hecht on December 12, 2018, 03:36:23 PM
Bin gerade auf dem Sprung, aber zwei Sachen, die mir im Moment nicht ganz klar sind:

Was passiert mit der Addons-Tabelle bei einem solchen upgrade, bei dem sich der Installationsordner ändert? Stehen da dann zwei Module mit unterschiedlichem Pfad drin?

Und was passiert beim Upgrade mit dem alten Ordner? Der bleibt auch noch rumfliegen und wenn man später manuell die Module neu lädt, welches wird dann gefunden?
Title: Re: rss-feed-all
Post by: Gast on December 12, 2018, 03:50:10 PM
Was passiert mit der Addons-Tabelle bei einem solchen upgrade, bei dem sich der Installationsordner ändert? Stehen da dann zwei Module mit unterschiedlichem Pfad drin?

Und was passiert beim Upgrade mit dem alten Ordner? Der bleibt auch noch rumfliegen und wenn man später manuell die Module neu lädt, welches wird dann gefunden?

sowohl die alten Tabellen wie auch die alten Ordner bleiben bis zu einer ausgelösten Aktion unberührt. In der addons-Tabelle werden dann (erst einmal) zwei Module registriert.
Mit entsprechendem Code in der upgrade.php des jeweiligen Modul's läßt sich der Spaß dann wieder korrigieren, Tabellen und Ordner, die nicht benötigt werden, auch wieder entfernen. z.b. mit

Code: [Select]
// Delete table alte module tabellen
    $sql = 'DROP TABLE IF EXISTS `'.TABLE_PREFIX.'mod_alte_tabelle`';
    $database->query($sql);

analog der alte Ordner über die bekannten PHP-Funktionen
Title: Re: rss-feed-all
Post by: Gast on December 12, 2018, 04:24:32 PM
um es weiter auszuführen....
in diesem Fall (RSS-Feed-All) ist es ja recht einfach, keine Datenbank, drei Aufrufe in den Scripten und die Github-Links (keine Ahnung, ob man das dort auch anpassen muß)

vom Grundprinzip gibt es ja eine neue Modulversion, da die aber mit den bereits registrierten Modulen nicht übereinstimmt, wird es auf jeden Fall eine Neuinstallation. Der Name des ZIP spielt keine Rolle, mit Bindestrich oder Unterstrich ist egal.
Je nach Modul gibt es entweder eine install-struct.sql, eine install-upgrade.sql und / oder eine install.php sowie eine upgrade.php
Install-Prozeß sollte klar sein, hier wird, egal ob SQL-Datei oder PHP mit den neuen Namen gearbeitet.
Der Install setzt ja voraus, das weder Ordner noch Tabellen bestehen, meckert, wenn der Ordner schon vorhanden ist und überschreibt gnadenlos DB-Tabellen mit gleichem Namen.
Ist das Modul bereits mit anderem Namen installiert, gäbe es nun zwei Module und dazu die entsprechenden DB-Tabellen (wenn im Modul genutzt)

Arbeitet das Modul mit Datensätzen, wäre es schade, wenn diese nun verloren gingen, von daher würde ich versuchen, die Tabellen des alten Moduls zu kopieren oder diese umzubenennen. Dies ließe sich schon im Install machen, wenn geprüft ist, ob die alten Tabellen vorhanden sind (abfragen, ob die alte Tabelle vorhanden ist, mit if-else einen Schalter setzen, wenn JA, mit CREATE TABLE alte_tabelle LIKE neue_tabelle kopieren, wenn nein, nur neue erstellen.
Im Anschluß, neue Tabelle prüfen und mit DROP TABLE IF EXISTS die alten Tabellen löschen (wenn kopiert wurde).
Nun noch Verzeichnis löschen und die Addons-Tabelle bereinigen

Anhaltspunkte gibt es in der admin/modules/uninstall.php und im großen upgrade-script.php


Title: Re: rss-feed-all
Post by: Martin Hecht on December 12, 2018, 11:23:15 PM
Sowas in der Art hatte ich befürchtet. Bei dem Snippet ist es ja wie du sagst relativ einfach. Um es sauber zu machen, könnte ich die config.php aus dem alten Pfad, falls vorhanden, herkopieren, dann die Deinstallation des alten Moduls irgendwie anstoßen und schließlich die neue Installation. Ich muss jedenfalls den alten Ordner loswerden und in der Tabelle, in der die installierten Addons geführt sind, am Ende nur och einen Eintrag für das Modul und zwar mit dem richtigen, neuen Pfad drin stehen haben. Am besten führe ich mir die entsprechenden Passagen des Core mal selbst zu Gemüte, so als Gute-Nacht-Lektüre und dann schau ich mal wie man damit am besten umgeht...
- oder die Modulverwaltung würde Bindestriche im Ordnernamen in einer der kommenden Versionen wieder zulassen, das wäre natürlich auch eine Lösung des Problems ;)

@Dietmar, danke für die Wünsche und CHANGLOG schiebe ich nach unten, hab ich bei einem der anderen Module letztens auf Franks HInweis auch schon gemacht.
Title: Re: rss-feed-all
Post by: Gast on December 12, 2018, 11:46:44 PM
es waren ja nun nicht all zu viele Download's, denk ich, eine überschaubare Größe
und mit großer Wahrscheinlichkeit dann wohl auch von Leuten, die damit umzugehen wissen, schließlich muß der Funktionsaufruf ja auch manuell gestaltet werden
Von daher vielleicht die Frage, ob der Aufstand mit Kopieren, löschen, Upgrade etc wirklich gemacht werden muß oder ob da nicht eine wie auch immer gestaltete Anleitung ausreicht
- config.php rüber kopieren in die neue Version
- den Ordner mit der alten Version löschen
- Module neu einlesen
- erledigt

Quote
Bindestriche im Ordnernamen in einer der kommenden Versionen wieder zulassen, das wäre natürlich auch eine Lösung des Problems

nur mal theoretisch - wenn nix passiert, gibt es eine neue WB-Version vielleicht in 6 oder 12 Monaten. Bis dahin bliebe dann nur ein Zettel am (Modul-)Paket: bitte erst Weihnachten 2019 öffnen   :oops: :|

Dietmar hat es ja oben begründet, warum eben keine Hyphens mehr. Im Web gibts Beiträge zu hauf und hier gab es ja auch schon Probleme. RSS-Feed-All ist von der Machart recht einfach gestrickt, ich würde da keine Probleme mit Hyphens sehen, aber wo unterscheidet man? One-for-All legt mit diesem (gewählten) Modulnamen z.b. DB-Tabellen an, nutzt JQuery usw, da seh ich schon Probleme kommen  - Ich glaub, OFA war auch der Auslöser, den Bindestrich da zu streichen.
Title: Re: rss-feed-all
Post by: Martin Hecht on December 13, 2018, 10:42:46 PM
Ja, im Fall dieses Moduls halten sich die Aufräumarbeiten beim Umzug dann doch in Grenzen, da es keine eigenen Datenbanktabellen hat. Trotzdem bin ich auf die zuvor beschriebenen Szenarien gestoßen, dass das Modul dann 2x da war (mal mit Unterstrichen und mal mit Bindestrichen) und sich auch nach einer Deinstallation nicht wieder installieren ließ (ja, es war ja noch die andere Version da, die aber erst nach einem Neueinlesen der Module wieder im Backend sichtbar wurde).

Hier jetzt die 0..4.0, die den Umzug geordnet macht, die config mit rüberholt, das alte Directory aufräumt und die Addons-Tabelle in der DB bereinigt.

Außerdem enthält die info.php eine kleine Anleitung und das Changelog habe ich ans Ende der info.php angehängt (irgendwie ist das verschwunden gewesen)
Title: Re: rss-feed-all
Post by: Martin Hecht on December 13, 2018, 10:59:47 PM
verdammt, in die Anleitung in der info.php hab ich wieder den alten Pfad reinkopiert. Hier eine korrigierte Version
Title: Re: rss-feed-all
Post by: astricia on April 12, 2019, 10:05:25 AM
Kann ich mit diesem Modul einen RSS-Feed erzeugen, das die INHALTE eines OFA-Moduls (also bestimmte Felder wie Titel, Text, Bild..) ausgibt? Und sonst nichts von der Seite? Versuche das gerade einzurichten für einen Kunden, kriege aber immer nur Outputs über Autor, Webmaster, meine EMail-Adresse und auch nur von allen zuletzt bearbeiteten Seiten und nicht nur ausschließlich vom OFA-Modul...

Oder gibt es da eine andere Möglichkeit? Mit RSS habe ich mich noch nie beschäftigt, aber dieser Kunde möchte das unbedingt.... :-/

LG,
Astrid
Title: Re: rss-feed-all
Post by: Martin Hecht on April 12, 2019, 12:59:54 PM
Hallo Astrid,

rss-feed-all ist dafür wahrscheinlich nicht so geeignet. Es kann Titel, Autor, und Link ausgeben, Bilder und Volltext sind nicht vorgesehen. Auch die Einschränkung, dass die Ausgabe nur von diesem Modul erfolgen soll, ist nicht so vorgesehen. Das Modul sammelt die Inhalte aller Seiten und Module ein und erstellt daraus einen rss-Feed. Man kann die so zusammengestellten Feeds wieder nach verschiedenen Kriterien filtern, aber sowas wie "bitte von Seite XY nur Inhalte des OFA Moduls" gibt es nicht.

Manche Module haben eine eingebaute RSS Funktionalität, news und topics gehören da mit dazu. Bei OFA bin ich im Moment überfragt. Sollte es eine solche Funktion nicht im Modul selbst geben, kannst du natürlich die Sourcen von rss-feed-all nehmen und alle Abschnitte rauswerfen oder auskommentieren, die nicht OFA betreffen und die Datenbankabfrage für OFA etwas erweitern, damit du alle Inhalte in den Feed bekommst, die du drin haben willst. Das ist auf jeden Fall schneller gemaccht als wenn man es von Grund auf neu programmieren wollte.

viele Grüße,
Martin
Title: Re: rss-feed-all
Post by: Gast on April 12, 2019, 01:07:01 PM
wie Martin bereits sagte, die rss.php in OFA ist dein Zielobjekt. Schau mal rein, dann siehst du, woher deine Daten kommen, die aktuell ausgegeben werden.
Im News-Modul findest du auch Code für eine Abfrage, die anzupassen wäre.

P.S.: Solch rss im Modul ist natürlich nur auf der Seite aktiv, auf der OFA dann läuft. Willst du etwas Zentrales, schau dir die (auskommentierte) Einbindung der NEWS-RSS im DefaultTemplate an
Title: Re: rss-feed-all
Post by: astricia on April 12, 2019, 01:23:35 PM
OK, das ist schon mal ein guter Hinweis. Aber wie bekomme ich in den Feed einzelne Felder des OFA-Moduls? Bislang gibt der nur Header, Link und Datum aus. Ich bräuchte auch den Inhalt von zwei oder drei Feldern....