Closed KrzysztofMadejski closed 8 years ago
@KrzysztofMadejski Czy jest lepszy sposób na osadzanie linków w template'ach niż: https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/blob/develop-1.1/ckanext/danepubliczne/templates/organization/snippets/organization_list.html#L24 ?
@KrzysztofMadejski Zobacz: https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/blob/develop-1.1/ckanext/danepubliczne/controllers/group.py#L15 i kolejną linijkę.
Musiałem zastąpić CKAN'ową funkcję z pakietu logic
bo oryginalna nie obsługiwała odpytywania bazy z użyciem warunków (ciężko mi zrozumieć brak tej funkcjonalności :)
Czy to jest dobry sposób na przeładowanie tej funkcji?
URLe buduje sie przy użyciu h.url
i h.url_for
. Zobacz https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/blob/develop-1.1/ckanext/danepubliczne/templates/home/sitemap.html
Można podać kontroler/akcję lub globalna nazwę akcji (poszukaj routings.py
o ile mnie pamięć nie myli, lub routes.py - tam są definicje)
Nadpisywanie Logic to dość mocno posunięty krok. Ja bym rozszerzył organization/index (zauważ ze już jest nadpisana) w https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/blob/develop-1.1/ckanext/danepubliczne/controllers/organization.py
I przefiltrował results przed paginacją.
Poprawne osadzenie linków: https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/commit/b49c37a0883f90bb15ea881f78133a8fddb375d2
W sprawie nadpisywania logiki: Tu jest API CKAN do pobierania listy organizacji: http://docs.ckan.org/en/latest/api/#ckan.logic.action.get.organization_list Nie ma tam żadnych opcji filtrowania (poza tytułem i opisem). Sprawdziłem również, czy jest coś nieudokumentowanego w kodzie - nie ma.
Filtrowanie wyników w kontrolerze - po pobraniu z bazy - spowoduje liczne problemy z paginacją, wśród których jest np taki:
Załóżmy, że masz 30 organizacji w bazie. 20 pierwszych to instytucje państwowe, 10 kolejnych to instytucje samorządowe. Paginacja umieszcza 20 wyników na stronie. W takim przypadku przeglądanie instytucji samorządowych będzie wyglądało tak, że pierwsza strona wyników będzie pusta. Wyniki będą dopiero na drugiej stronie. Moim zdaniem to dyskwalifikuje takie rozwiązanie.
Wiem, że to jest hack i może powodować problemy przy upgrade'owaniu CKANa, ale nie wiem, czy da się zrobić coś lepszego z punktu widzenia działania portalu dla użytkownika...
Zauważ, że logika nie jest nadpisywana globalnie, a (póki co) tylko w kontrolerze groups
(nie wiem, czy to lepiej czy gorzej jeśli chodzi o estetykę hacka :)
Będę sporządzał dokument: https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/wiki/Overriding-CKAN-code w którym będą wymienione wszystkie miejsca, które coś nadpisują, żeby na to uważać przy upgrade'owaniu CKANa.
Jeżeli to nadpisanie poprzez override kontrolera to spoko. Ja trafiałem na przypadki gdzie w kodzie ckana musiałem coś zmienić - to jest problematyczne bardziej.
Gdy filtr nic nie zwraca to brak komunikatu ala "Brak dostawców o podanym typie"
Błąd: gdy wybrana jest jakaś wersja językowa to tworzą się niepoprawne linki przy wyborze typu.
np. na http://szkolenia.danepubliczne.gov.pl/pl/organization kieruje do http://szkolenia.danepubliczne.gov.pl/plorganization?q=&sort=&type=state plorganization
Czy tam url_for wykorzystujesz?
Tak, link jest tworzony w taki sposób:
<a href="{{ h.url('organization', q=c.q or '', sort=c.sort_by_selected or '') }}">
Jak to powinno wyglądać, żeby nie dostawiało do linku wersji językowej?
Powinno dostawiać, ale nie wiem czemu to niepoprawnie robi. Może slash na początku potrzebny? Nie wiem..
Może trzeba będzie nadpisać
index
zckan/controllers/group.py