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
Updated by dpavlin@hidden on Nov 17 4:34pm
Posted by dpavlin@hidden on Nov 17 2:42pm
subscribe/*
Plugini za subscribe vraćaju naslove sadržaja prema proslijeđenom ID-u. Ovo je bitno kako bi se prilikom slanja obavijesti korisnicima mogli izgenerirati smisleni naslovi sadržaja koji je promijenjen.
OPREZ: OVU ISTU INFRASTRUKTURU KORISTI I CHANGELOG.
Razlog tome je što changelog ima istu potrebu kao i subscribe (saznati naslov sadržaja iz njegovog ID-a), pa nije imalo smisla raditi drugu infrastrukturu za istu stvar. Nezgodno je samo ime postojeće infrastrukture koje po ničemu ne govori da je i changelog koristi.
U slučaju korištenja infrastrukture u svrhe pretplate plugine pozivaju skripte inc/scripts/subscribe_check.php i inc/scripts/subscribe_reports.php, a u svrhe changeloga plugine poziva skripta sysinc/changelog.php.
Svaki modul koji koristi ovu infrastrukturu mora imati zasebnu datoteku. Imena datoteka moraju odgovarati ID-ovima ACL-a za pojedini tip sadržaja (tablice acl_register i acl_nonregister).
Ime funkcije unutar datoteke mora se sastojati od stringa subscribe_ i imena datoteke. Funkcija vraća pripremljeni znakovni niz.
Primjer
Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar je news. Zato se datoteka u inc/plugins/subscribe zove news.php, a funkcija izgleda ovako:
<?php
function subscribe_news ($params) {
if (isset($params["id"])) {
$q = new SQLquery ("SELECT title FROM news WHERE id = " . $params["id"]);
$row = $q -> getNextRow();
return $row["title"];
}
}
?>
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
printable/*
Svaki modul koji koristi ovu infrastrukturu mora imati zasebnu datoteku. Imena datoteka moraju odgovarati parametru name koji se koristi u PluginiPrint. Ime funkcije unutar datoteke mora se sastojati od stringa printable_ i imena datoteke. Funkcija vraća pripremljeni HTML.
Primjer
Za modul Vijesti (mod_news) dogovoreni identifikacijski parametar name je news. Zato se datoteka u inc/plugins/printable zove news.php, a funkcija izgleda ovako:
<?php
function printable_news ($params) {
$q = new SQLquery ("SELECT title, lead, content, date FROM news WHERE id = " . $params["id"]);
...
$printable = "<i>" . $row["date"] . "</i><br><br>";
...
return $printable;
}
?>
Updated by dpavlin@hidden on Nov 17 2:42pm
Posted by dpavlin@hidden on Nov 17 2:42pm
|
Weblog Navigation
Loading...
|