STRIX
PluginiRSS: Revision 2

rss/*

Ova infrastruktura namijenjena je da omogući željenim modulima generiranje RSS feeda. Feedove generira skripta rss/rssfeeder.php kojoj je potrebno predati tri GET parametra:

  • rss_uid - ID korisnika za kojeg je namijenjen dotični feed kako bi se feed izgenerirao u skladu s njegovim dozvolama
  • rss_kid - ID kategorije u kojoj se nalazi sadržaj za kojeg će biti generiran feed
  • rss_ct - ID tipa sadržaja, dogovor je da, kad god je to moguće, dotični odgovara ID-ovim ACL-a iako se to nigdje striktno ne provjerava

U skripti rss/rssfeeder.php nalaze se konstante koje omogućavanju njezino konfiguriranje:

  • DEBUG - aktivira debug način rada u kojem skripta prima sve konekcije (u normalom načinu rada skripta prima konekcije samo s localhosta (127.0.0.1) odnosno s IP adrese definirane u konfiguracijskoj varijabli _rss_ip_regex (u datoteci etc/*.conf.php), po pretpostavci false.
  • PLUGIN_DIR - direktorij s RSS pluginima, po pretpostavci ../inc/plugins/rss/
  • PLUGIN_EXT - ekstenzija za plugin datoteke, po pretpostavci .php
  • PLUGIN_FUNCTION_PREFIX - prefix za funkciju koja se poziva unutar plugina, po pretpostavci rssfeed_
  • CACHE_DIR - direktorij za RSS cache, po pretpostavci /tmp
  • DEFAULT_TTL - vijeme života cachea (Time To Live) u sekundama, po pretpostavci 300

Za generiranje RSS-a skripta rss/rssfeeder.php koristi biblioteku inc/ContentFeeder.class.php.

Svaki modul koji želi koristiti ovu infrastrukturu (tj. generirati RSS feed) mora imati zasebnu datoteku u direktoriju inc/plugins/rss/. Ime datoteke mora biti isto kao i dogovoreni ID tipa sadržaja (parametar rss_ct), a pretpostavljena ekstenzija datoteke je .php.

Unutar datoteke plugina mora se nalaziti funkcija čije je ime kombinacija PLUGIN_FUNCTION_PREFIX-a i ID tipa sadžaja. Dotična funkcija vraća rezultat odgovarajućeg upita iz baze pomoću metode getAllTable. Iz vraćenog rezultata skripta rss/rssfeeder.php izgenerirat će RSS feed.

Primjer

Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar news. Zato se datoteka u inc/plugins/rss zove news.php, a funkcija koja će biti pozvana zove se rssfeed_news:

<?php
$rssfeed_channel = "News";
$rssfeed_description = "News";
$rssfeed_ttl = "300";

function rssfeed_news ($uid, $kid) {
    $q = new SQLquery("SELECT *
                       FROM news, news_kategorija, kategorija
                       WHERE news.id = news_kategorija.news_id
                       AND kategorija.id = news_kategorija.kategorija_id
                       AND news_kategorija.kategorija_id = " . $kid . "
                       AND news.visible = TRUE
                       AND news_kategorija.approved = TRUE
                       AND news_kategorija.archived = FALSE
                       AND userCanDoOnObject (" . $uid . ", 1, 'news', news.id)
                       AND (news_kategorija.time_to > NOW() OR news_kategorija.time_to IS NULL)
                       AND (news_kategorija.time_from < NOW() OR news_kategorija.time_from IS NULL)
                       ORDER BY news_kategorija.pos DESC, news.date DESC");
    $data = $q->getAllTable();
    return $data;
}
?>

Na početku plugina nalaze se tri konfiguracijske varijable:

  • rssfeed_channel - ime RSS kanala
  • rssfeed_description - opis RSS kanala
  • rssfeed_ttl - vrijeme života cache, override za vrijednost u rss/rssfeeder.php

Za funkciju je dovoljno da sadžava samo odgovarajući SQL query te da vrati "sirove" rezultate.


Mislim da će trebati CACHE_DIR razdjeliti nekako, npr. site_name/rss_kid/rss_uid-rss_ct jer ćemo željeti pobrisati samo dio RSS-ova nakon što npr. netko snimi novu vijest, a mi je preuzimamo na 10 drugih mjesta na site-u.

contributed by dpavlin@hidden on Nov 17 4:34pm