Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] generator admina + i18n
Forum PHP.pl > Forum > PHP > Frameworki
phpion
Witam!
Mam pewien problemik z wersjami językowymi w adminie.
Schemat 2 tabel:
Kod
  attraction:
    _attributes: {phpName: Attraction}
    id:
    icon:        {type: varchar(40), required: true}
  attraction_i18n:
    _attributes: {phpName: AttractionI18n}
    name:        {type: varchar(20), required: true}

czyli nic nadzwyczajnego. Tworzenie i edycję danych załatwiłem z pomocą tego linku. Mam jednak pewien problem z wyświetlaniem listy "atrakcji". Otóż załóżmy, że mamy 3 wersje językowe: PL, ENG, DE oraz 2 rekordy w tabeli "attraction". Każdy z nich posiada wpisaną nazwę dla wersji PL oraz ENG, natomiast nie dla DE. Przechodząc do listy atrakcji w PL mamy ikonkę + napis po polsku (na dole: 2 results), to samo jest dla wersji ENG. Natomiast dla wersji DE nie wyświetla się nic, a na dole nadal jest "2 results".
Wykonywane są zapytania:
Kod
[0.28 ms] SELECT COUNT(attraction.ID) FROM attraction
[2.23 ms] SELECT attraction.ID, attraction.ICON, attraction_i18n.NAME, attraction_i18n.ID, attraction_i18n.CULTURE FROM attraction, attraction_i18n WHERE attraction_i18n.CULTURE='de_DE' AND attraction.ID=attraction_i18n.ID LIMIT 20

Domyślam się, że "2 results" pochodzi z pierwszego, natomiast listę rekordów wyświetla drugie (które nic nie zwraca).
Mój generator.yml:
Kod
generator:
  class:              sfPropelAdminGenerator
  param:
    model_class:      Attraction
    theme:            default
    
    list:
      title: Attractions list
      display: [_icon, name]
      object_actions:
        _edit: ~
        _delete: ~
      peer_method:   doSelectWithI18n
    
    edit:
      title: Attraction form
      display: [icon, name]
      fields:
        icon:
          type: admin_input_file_tag
          upload_dir: attraction
          params:
            include_link: attraction
            include_remove: true
        name:
          params: disabled=false

Pozdrawiam: pion
pawel_k
atrybut peer_method służy tylko do pobieranie danych, zmieniasz go jeśli nie chcesz pobierać danych za pomocą standardowego doSelect, a do liczenia liczby kolumn masz osobny atrybut zastępujący domyślny doCount, chyba peer_count_method ale nie jestem teraz w stanie tego sprawdzić, musisz sam poszukac smile.gif
phpion
Dzięki za odpowiedź.

Problem w tym, że chciałbym wyświetlić po 2 rekordy w każdej wersji językowej; problem nie jest w różnicy w ilości wyświetlonych rekordów, a liczbą "X results", a w tym, że jeśli nie ma tłumaczenia rekordu dla danej wersji językowej to wogóle nie jest on wyświetlany na liście.

W przypadku PL oraz ENG widoczne byłoby tłumaczenie, natomiast w wersji DE chciałbym aby "name" było puste (gdyż nie jest wpisane do bazy), a nie tak jak jest teraz, że rekord wogóle nie jest wyświetlany. Rozumiem, że po prostu zapytanie:
  1. SELECT attraction.ID, attraction.ICON, attraction_i18n.NAME, attraction_i18n.ID, attraction_i18n.CULTURE FROM attraction, attraction_i18n WHERE attraction_i18n.CULTURE='de_DE' AND attraction.ID=attraction_i18n.ID LIMIT 20

nic nie zwraca, bo nie ma takich rekordów spełniających "attraction_i18n.CULTURE='de_DE' AND attraction.ID=attraction_i18n.ID".
Aktualnie aby zmodyfikować nazwę dla wersji niemieckiej muszę wejść w wersji polskiej na dany element, a następnie przełączyć się na wersję niemiecką (w czasie edycji z wersji polskiej).

Może teraz nieco jaśniej wytłumaczyłem.
pion
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.