pragmaMx Support Forum

pragmaMx => integrierte Module => Thema gestartet von: Musicman75 am 19 Februar 2006, 18:34:12

Titel: rss für eigene module
Beitrag von: Musicman75 am 19 Februar 2006, 18:34:12
Hallo,

wie binde ich eigene Module in die rss feeds ein?
mit sql programmierung hab ich noch nen bisschen Probleme.

Man müsste aus 3 Tabellen Daten holen:

1. Tabelle: ID und Name
2. Tabelle: ID des Namens, ID des Titels, Titel
3. Tabelle: ID des Titels, Kommentare

Wie kann man das am einfachsten machen, bzw wie ist der Befehl um die jeweils zugehörigen Daten zu holen?

Danke und Gruß
Steff
Titel: Re: rss für eigene module
Beitrag von: jubilee am 19 Februar 2006, 19:29:16
Zitatwie binde ich eigene Module in die rss feeds ein?
mit sql programmierung hab ich noch nen bisschen Probleme.
Du musst die backend.php ändern.

ZitatMan müsste aus 3 Tabellen Daten holen:
1. Tabelle: ID und Name
2. Tabelle: ID des Namens, ID des Titels, Titel
3. Tabelle: ID des Titels, Kommentare
Um zu wissen, wie die 3 Tabellen miteinander verknüpft werden müssen, müsste man die Tabellenstruktur kennen und welche Daten aus den Tabellen gebraucht werden.

MfG
jubilee
Titel: Re: rss für eigene module
Beitrag von: Musicman75 am 19 Februar 2006, 22:22:45
Tabelle 1 von den Alben:
idalbum (Zahl), idartist (Zahl), title (String)

Tabelle 2 vom Künstler:
idartist (Zahl), name (String)

Tabelle 3 Kommentar zum Album:
idalbum (Zahl), comments (String)

idalbum und idartist sind jeweils die gleiche Zahl, anhand derer die Daten zugeordnet werden.

Das sind auch die Felder die benötigt werden.
Ich hab schon in der backend geschaut und hab da sowas gefunden was passen könnte:

AS b ON a.fid =b.fid

Denke mal so muss man das irgendwie machen, 1. Tabelle Daten lesen, mit 2ter vergleichen und die Namen dazu lesen, mit 3. vergleichen und die Kommentare dazu lesen.

Ist das Topmusic Modul.
Ich kann Dir ja mal die sql Datei schicken.

Danke schon mal.

Gruß
Steff
Titel: Re: rss für eigene module
Beitrag von: jubilee am 20 Februar 2006, 08:48:06
Hallo !
Die Abfrage sollte so (der so ähnlich) lauten.
Zitat
SELECT a.title, b.name, c.comments from Tabelle_1 AS a LEFT JOIN Tabelle_2 AS b ON a.idartist=b.idartist LEFT JOIN Tabelle_3 AS c ON a.idalbum=c.idalbum

MfG
jubilee
Titel: Re: rss für eigene module
Beitrag von: Musicman75 am 20 Februar 2006, 15:10:11
Merci, das werde ich dann mal probieren.


Ok, hab das soweit hinbekommen, allerdings hab ich jetzt noch nen kleines Problem.

- Titel müsste so aussehen: Name - Titel , angezeigt wird nur der Titel, den Namen bekomm ich irgendwie nicht dazu.

Ich habe die music Option oben in die Liste und unten bei den Case eingefügt, der Code sieht grad so aus:

function topmusic ($version)
{
    global $rss, $limit, $prefix, $itemdescriptiontrunk, $modcheck ;
    $result = sql_query("SELECT a.idalbum, a.idartist, a.title, b.name, c.comments from " . $prefix . "_topmusic_album AS a LEFT JOIN " . $prefix . "_topmusic_artist AS b ON a.idartist=b.idartist LEFT JOIN " . $prefix . "_topmusic_album_lang AS c ON a.idalbum=c.idalbum order by idalbum DESC limit " . $limit);
    if (!$result) {
        echo "An error occured";
    } else {
        if ((mxModuleAllowed("topMusic")) && ($modcheck['topMusic'])) {
            while ($data_down = sql_fetch_object($result)) {
                if (($version == "RSS1.0")or($version == "RSS2.0")) {
                    $data_down->name = rss_bbencode($data_down->name);
                    $data_down->title = rss_bbencode($data_down->title);
                    $data_down->comments = rss_bbencode($data_down->comments);
                }
                $item = new FeedItem();
                $item->descriptionTruncSize = $itemdescriptiontrunk;
                $item->title = strip_tags(rss_bbencode($data_down->title));
                $item->link = MX_HOME_URL . "/modules.php?name=topMusic&op=album&idartist=" . $data_down->idartist . "&idalbum=" . urlencode(trim($data_down->idalbum));
                $item->description = strip_tags(rss_bbencode($data_down->name));
                $item->description = strip_tags(rss_bbencode($data_down->comments));
                $item->source = MX_HOME_URL . "/modules.php?name=topMusic";
                $rss->addItem($item);
            }
        } else {
            moduleerror("topMusic");
        }
    }
    unset ($result, $data_down);
}


Kannst mir bei den letzten Problemchen bitte noch nen Tip geben.

Hier noch der Link: http://www.gothic-online.de/backend.php?op=music

Danke und Gruß
Steff
Titel: Re: rss für eigene module
Beitrag von: jubilee am 20 Februar 2006, 17:39:05
Hallo !
Zitat
$item->description = strip_tags(rss_bbencode($data_down->name));
$item->description = strip_tags(rss_bbencode($data_down->comments));
2x hintereinander bringt nix. wird nur das letzte Angezeigt.
Wenn Du beides drinhaben möchtest, musst Du das aneinanderhängen --->
$item->description = strip_tags(rss_bbencode("".$data_down->name." ".$data_down->comments.""))
Dito gilt dasselbe bei $item->title
$item->title = strip_tags(rss_bbencode("".$data_down->name."-".$data_down->title.""))

MfG
jubilee



Titel: Re: rss für eigene module
Beitrag von: Musicman75 am 20 Februar 2006, 18:14:28
Merci, jetzt gehts wunderbar, so wie es soll.

Besten Dank.
Titel: Re: rss für eigene module
Beitrag von: Musicman75 am 22 Februar 2006, 12:17:38
Ok, für alle Anderen, hier nochmal die komplette Anpassung:

Zeile 95
$actions = array("news", ...,  "music", "all");

Die Funktion:
function topmusic ($version)
{
    global $rss, $limit, $prefix, $itemdescriptiontrunk, $modcheck ;
    $result = sql_query("SELECT a.idalbum, a.idartist, a.title, b.name, c.comments from " . $prefix . "_topmusic_album AS a LEFT JOIN " . $prefix . "_topmusic_artist AS b ON a.idartist=b.idartist LEFT JOIN " . $prefix . "_topmusic_album_lang AS c ON a.idalbum=c.idalbum order by idalbum DESC limit " . $limit);
    if (!$result) {
        echo "An error occured";
    } else {
        if ((mxModuleAllowed("topMusic")) && ($modcheck['topMusic'])) {
            while ($data_down = sql_fetch_object($result)) {
                if (($version == "RSS1.0")or($version == "RSS2.0")) {
                    $data_down->name = rss_bbencode($data_down->name);
                    $data_down->title = rss_bbencode($data_down->title);
                    $data_down->comments = rss_bbencode($data_down->comments);
                }
                $item = new FeedItem();
                $item->descriptionTruncSize = $itemdescriptiontrunk;
                $item->title = strip_tags(rss_bbencode("".$data_down->name." - ".$data_down->title.""));
                $item->link = MX_HOME_URL . "/modules.php?name=topMusic&op=album&idartist=" . $data_down->idartist . "&idalbum=" . urlencode(trim($data_down->idalbum));
                $item->description = strip_tags(rss_bbencode($data_down->comments));
                $item->source = MX_HOME_URL . "/modules.php?name=topMusic";
                $rss->addItem($item);
            }
        } else {
            moduleerror("topMusic");
        }
    }
    unset ($result, $data_down);
}


Zeile 333 beginnt die Funktionsauswahl, das kommt da rein, ganz unten gibt es nochmal cases, da auch:
            case "music":
                topmusic($version);
                break;


Und bei dem case all nicht zu vergessen:
        topmusic($version);

Und schließlich, damit man die Funktion auch als Auswahl bekommt in der includes/myheader.php:
<link rel="alternate" type="application/rss+xml" title="' . htmlspecialchars($GLOBALS['sitename']) . ' - ' . _MUSIC . '" href="backend.php?op=music">

Hoffe es hilft nen paar Usern.

Gruß
Steff