Baza informacji o firmach - prośba o radę

Witam,

Jako że pierwszy raz zabieram głos, kilka słów tytułem wstępu. Drupala 5.x „obłaskawiam” od ~5 miesięcy, także prawie już wiem, ile jeszcze nie wiem. ;-) Ponieważ czasu brak, idzie to powoli, niemniej mogę się już pochwalić malutką cegiełką.

Obecnie przymierzam się do zrobienia bazy informacji o firmach, powiedzmy, że taką mikro Panoramę Firm. Ma to być dodatkowa funkcjonalność istniejącego już serwisu (w wersji roboczej, więc linku na razie nie mogę podać).

Założenia/wyma­gania:

  1. Każda firma powinna być przypisana do wybranej kategorii/branży (np. restauracja, kwiaciarnia, itp.). Kategorii będzie stosunkowo niewiele: 10 – 20.
  2. Firma z danej branży ma być opisana specyficznymi dla tejże branży atrybutami (np. dla restauracji: liczba miejsc, czy serwuje dania wegetariańskie; dla kwiaciarni: np. czy kwiaty dostarcza pod wskazany adres).
  3. Wszystkie firmy będą też opisane wspólnymi atrybutami (np. dane teleadresowe, ocena użytkowników).
  4. Użytkownicy mają mieć możliwość zaawansowanego wyszukiwania firm z danej branży (np. restauracje serwujące dania wegetariańskie w Krakowie) i pełnotekstowego (np. firmy, których opis zawiera słowa „zniżka” i „studentów”).

Moja koncepcja jest następująca:

  1. Każda branża jako odrębny content-type ze stosownymi, specyficznymi polami (CCK) dla tejże branży
  2. Dane adresowe (oraz inne wspólne dla wszystkich firm):
  • (a) albo za pomocą Address field for CCK (to rozwiązanie o tyle mi się nie podoba, że jest specyficzne dla danych adresowych; nie zadziała, gdybym chciał rozszerzyć listę wspólnych pól)
  • (b) albo jako odrębny typ zawartości + node reference (tego nie jestem pewien, bo w ogóle do tej pory nie korzystałem z node reference).

Bardzo proszę o komentarze i wskazówki. Nie chciałbym się narobić i po jakimś czasie zauważyć, że nie tędy droga.

Pozdrawiam, BG

Sposób wyświetlania odpowiedzi

Wybierz preferowany sposób wyświetlania odpowiedzi i kliknij "Zachowaj ustawienia", by wprowadzić zmiany.

Nikt nie ma pomysłu?

Nikt nie ma pomysłu? A może niejasno się wyraziłem?

Pozdrawiam, BG

Portret użytkownika palik

nie jest to zadanie

moderator

nie jest to zadanie trywialne pewnie stąd mało odpowiedzi, a z drugiej strony można to zrobić na kilka sposobów :)

niczego nie sugerując podrzucam dwa linki – sam nie testowałem ale może się nadadzą lub natchną :)

http://drupal.org/…ated_subform http://drupal.org/…onomy_fields

pozdrawiam

--
drupal w akcji?
http://palikowski.net
http://basoofka.net

Bardzo dziękuję za linki.

Bardzo dziękuję za linki. Obie propozycje wyglądają zachęcająco. :-)

Pozdrawiam, BG

Portret użytkownika akrywko

Cechy wspólne dla

moderator

Cechy wspólne dla wszystkich kategorii firm tworzyłbym jednak za pomocą identycznych pól CCK. Chyba, że przewidujesz spory przyrost kategorii i dużo zmian w zakresie struktury danych.

Nie musisz ograniczać się do Address field for CCK. Jak chcesz dodać jeszcze jakieś wspólne dane to co stoi na przeszkodzie, żeby dać dodatkowe np zwykłe pole tekstowe?

Cechy wspólne dla

Cechy wspólne dla wszystkich kategorii firm tworzyłbym jednak za pomocą identycznych pól CCK. Chyba, że przewidujesz spory przyrost kategorii i dużo zmian w zakresie struktury danych.

Kategorii nie będzie zbyt dużo (~20?). Mimo to, wizja dodawania tych samych pól do tych wszystkich typów zawartości jakoś mi się nie uśmiecha. A jeśli przyjdzie mi ją kiedyś zmienić… jak powiedział Larry Wall, u programisty lenistwo jest cnotą. ;-)

Nie musisz ograniczać się do Address field for CCK. Jak chcesz dodać jeszcze jakieś wspólne dane to co stoi na przeszkodzie, żeby dać dodatkowe np zwykłe pole tekstowe?

Ale wtedy musiałbym to pole dodać do wszystkich typów zawartości ręcznie, tak? Czyli np. osobno do typu „restauracja”, „kwiaciarnia”, itd.

To co chciałbym osiągnąć: dodaje dodatkowe pole do meta typu/child typu (vide powyższy link od palika) i „automagicznie” to pole jest dostępne we wszystkich typach, które zawiarają tenże meta/child typ.

Dziękuję za wskazówki, pozdrawiam, BG

hm… a co złego byłoby w

hm… a co złego byłoby w stworzeniu nowego modułu? mogłoby to wyglądać tak, że miałbyś jedną tabelę dla wszystkich firm z wszystkich kategorii;

kolumny byłyby cechami (liczba miejsc, dostawa kwiatów do domu);

każda cecha (kolumna) miałaby własny kod pola w formularzu dodawania nowej zawartości

każda kategoria firmy miałaby inną listę cech (=pól w formularzu dodawania)

przed wywołaniem formularza dodawania nowej treści wywoływana byłaby funkcja, która sprawdzałaby jaka jest lista cech (pól formularza) dla danej kategorii firmy

formularz wywoływałby się z listą pól specyficznych dla kateogrii firmy

powinno to działać tak: najpierw hook form ustala kategorię firmy, którą chce dodać user, potem innej funkcji dajesz nazwę/id kategorii, a ona zwraca tablicę z listą wszystkich pól i atrybutem: tak lub nie, dalej hook form przed wywołaniem kodu danego pola w formularzu sprawdza w tablicy, czy dla tego pola jest wartość tak i wyświetla (lub nie) kod tego pola; potem już tylko funkcja dodawania node dodaje do bazy danych dane z pól, które są wypełnione

ewentualnie, jeśli dla danej kategorii jakieś pola będą obowiązkowe, to pamiętaj, żeby odpowiednio zaprogramować walidację (wiesz, jeśli user musi podać dane, czy kwiaciarnia wysyła kwiaty do domu, a przy dodawaniu restauracji wogóle nie pojawi się pole, w którym można to zaznaczyć, to funkcja sprawdzająca poprawność danych w formularzu dodawania node musi wiedzieć, jakie pola są obowiązkowe dla danej kategorii)

pozdrawiam
kors4r
mail: kors4r at drupal.org.pl
(nie ukrywam, dumny jestem z tego adresu :) )

Jest to jakiś pomysł.

Jest to jakiś pomysł. Niemniej nie wiem, czy wrzucanie wszystkich firm do jednej tabeli jest dobrym rozwiązaniem. W końcu bazy powinny być znormalizowane (btw: o ile sie orientuje to Drupal pod tym względem nie jest najlepiej przemyślany).

Obecnie skłaniam się jednak do zrobienia tego „na piechotę” definiując po prostu wszystkie content-type'y jeden po drugim. Tak, jak radził akrywko powyżej.

Dziękuję za odpowiedź, BG

Portret użytkownika akrywko

W sumie pole CCK i tak

moderator

W sumie pole CCK i tak definiujesz tylko raz, z opcjami wyświetlania i konfiguracją. Potem tylko dołączasz to samo pole do różnych typów zawartości..