DanePubliczneGovPl / ckanext-danepubliczne

Layout and custom fields for DanePubliczne.gov.pl
Other
10 stars 4 forks source link

Filtrowanie dostawców po samorządowych i innych #263

Closed KrzysztofMadejski closed 8 years ago

KrzysztofMadejski commented 8 years ago

Może trzeba będzie nadpisać index z ckan/controllers/group.py

danielmacyszyn commented 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 ?

danielmacyszyn commented 8 years ago

@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?

KrzysztofMadejski commented 8 years ago

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)

KrzysztofMadejski commented 8 years ago

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ą.

danielmacyszyn commented 8 years ago

Poprawne osadzenie linków: https://github.com/DanePubliczneGovPl/ckanext-danepubliczne/commit/b49c37a0883f90bb15ea881f78133a8fddb375d2

danielmacyszyn commented 8 years ago

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 :)

danielmacyszyn commented 8 years ago

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.

KrzysztofMadejski commented 8 years ago

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.

KrzysztofMadejski commented 8 years ago

Gdy filtr nic nie zwraca to brak komunikatu ala "Brak dostawców o podanym typie"

KrzysztofMadejski commented 8 years ago

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?

danielmacyszyn commented 8 years ago

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?

KrzysztofMadejski commented 8 years ago

Powinno dostawiać, ale nie wiem czemu to niepoprawnie robi. Może slash na początku potrzebny? Nie wiem..