CMFSin
Jest kilka dostępnych produktów dla Plone'a, które umożliwiają integrację RSS'ów w naszym portalu :
- CMFSin
- PloneRSS
- PodChannel
Szczerze powiem, że testowałem wszystkie i udało mi się uruchomić tylko CMFSin, a to też po ostrych walkach :)
Ale do rzeczy - aby CMFSin zadziałał z Plone 2.1.2 potrzebne jest dokonanie paru zmian. Po zainstalowaniu produktu wszystko wygląda cacy, ale gdy wejść w sin_tool w ZMI i zakładkę Debug zobaczymy, że nie ściąga żadnych RSS'ów.
Aby to się stało faktem należy podmienić pliki znajdujące się w katalogu skins\sin na ich odpowiedniki :
Do rozwiązania pozostanie tylko kwestia nieśmiertelnych, polskich czcionek :)
Przykładowe ustawienie pliku konfiguracyjnego - w [channels] dodać :
gazeta1=1h:http://rss.gazeta.pl/pub/rss/gospodarka.xml
następnie w [maps] dodajemy np. :
Aktualności gospodarcze=gazeta1
i ostatnią rzeczą jaką robimy to w proporties naszego portalu w jednym ze slotów dodajemy :
here/sin_tool/macros/Aktualności gospodarcze
Po tych działaniach będziemy mieli dostęp do RSS w tym konkretnym przypadku z GW (nie żebym lubił czytać tego gniota - po prostu tak wyszło :) ) Jedyne co nie będzie nam odpowiadało to brak wyświetlania polskich czcionek w portlecie - zaradzić temu jest zaskakująco prosto :
w pliku sinTool.py szukamy definicji funkcji udecode i tam zamiast aktualnie wpisanego kodowania, wklepujemy takie kodowanie jakie występuje w ściąganych RSS (w przypadku GW jest to iso8859-2) tak że linia kodu będzie wyglądała w ten sposób :
def udecode(data, encoding='iso8859-2'):
Jednak to jeszcze nie wszystko - gdy klikniemy w 'See more' na dole portletu CMFSin ładnie wyświetli nam aktualne nagłówki z opisami w centralnym oknie portalu, ale wystąpi mały zgrzyt... brak obsługi polskich czcionek.
Ale i temu jesteśmy w stanie zaradzić - znowu edycja pliku sintool.py :
znajdujemy fragment następujący :
if info.has_key('title'):
if type(info['title']) not in (UnicodeType, ):
info['title'] = udecode(info['title']).encode(enc)
if info.has_key('description'):
if type(info['description']) not in (UnicodeType, ):
info['description'] = udecode(info['description']).encode(enc)
for r in data:
if r.has_key('title'):
if type(r['title']) not in (UnicodeType, ):
r['title'] = udecode(r['title']).encode(enc)i dodajemy cuś takiego (pogrubiony tekst - reszta to to samo co u góry) :
if info.has_key('title'):
if type(info['title']) not in (UnicodeType, ):
info['title'] = udecode(info['title']).encode(enc)
if info.has_key('description'):
if type(info['description']) not in (UnicodeType, ):
info['description'] = udecode(info['description']).encode(enc)
for r in data:
if r.has_key('title'):
if type(r['title']) not in (UnicodeType, ):
r['title'] = udecode(r['title']).encode(enc)
if r.has_key('description'):
if type(r['description']) not in (UnicodeType, ):
r['description'] = udecode(r['description']).encode(enc) I to by było na tyle!! :)

