dynamiczny formularz - wersja do edycji
Strona 1 z 2 12 OstatniOstatni
Wyniki 1 do 10 z 12

Temat: dynamiczny formularz - wersja do edycji

  1. #1
    Bywalec
    Dołączył
    15-10-2007
    Wpisy
    102
    Punkty
    30

    Domyślny dynamiczny formularz - wersja do edycji

    Buduję komponent który w zasadzie już działa ... ale nowe pomysły powodują nowe problemy... ja mam problem z implementacją formularza, który się "sam" rozbudowuje


    mamy do dyspozycji tabele w bazie danych:
    #__users nie będę opisywał

    jezyki
    id jezyk
    1 angielski
    2 niemiecki
    ...

    poziomy_jezykow
    id poziom
    1 nie znam
    2 podstawowy
    3 średni
    4 zaawansowany
    5 biegły

    user_to_poziom_jezyka
    id_usera id_jezyka id_poziomu
    45 1 5 - użytkownik 45 zna biegle język angielski
    46 2 3 - użytkownik 46 zna średnio niemiecki


    Kod HTML:
    <select name="jezyk_xxx">
       <options value="1">Nie znam/Niewymagany</options>
       <options value="2">Podstawowy</options>
       <options value="3">Średni</options>
       <options value="4">Zaawansowany</options>
       <options value="5">Biegły</options>
    </select>
    Jakoś nie mogę wpaść na implementację pozwalającą ustawienie selecta z odpowiednia nazwą i pobrania wartości ustawionej wcześniej
    przy stałych polach bez możliwości rozszerzenia o kolejne jezyki bez ingerencji w kod może to wyglądać tak:

    Kod PHP:
        <p>
        <label>Angielski
          <select name="jezyk_ang">
          <option value="1" id="inny1" <?php if ($item->jezyk_ang=="1"){echo "selected=\"selected\"";} ?>Nie znam/Niewymagany</option>
          <option value="2" id="inny1_0" <?php if ($item->jezyk_ang=="2"){echo "selected=\"selected\"";} ?>Podstawowy</option>
          <option value="3" id="inny1_1" <?php if ($item->jezyk_ang=="3"){echo "selected=\"selected\"";} ?>Średni</option>
          <option value="4" id="inny1_2" <?php if ($item->jezyk_ang=="4"){echo "selected=\"selected\"";} ?>Dobry</option>
          <option value="5" id="inny1_3" <?php if ($item->jezyk_ang=="5"){echo "selected=\"selected\"";} ?>Biegły</option>
        </select>
        </label>
      </p>
    Wspomnę, że chcę przetwarzać to pomiędzy <p> a </p>wielokrotnie w jakiejś pętli np foreach.
    Jakoś mam pustkę w głowie może ktoś ma pomysł jak to powinno wyglądać.

  2. Pani Reklamowa
    Pani Reklamowa jest aktywna
    Avatar Panny Google

    Dołączył
    19-08-2010
    Skąd
    Internet
    Postów
    milion
    Pochwał
    setki
  3. #2
    Bywalec EkleErs awatar
    Dołączył
    01-09-2010
    Skąd
    wawa
    Wpisy
    231
    Punkty
    45

    Domyślny

    Nie wiem czy o to ho ale zawsze mozna poprawic
    Kod:
    $query = 'SELECT a.username, c.jezyk, d.poziom ' . '
    FROM jos_users a' . '
    LEFT JOIN user_to_poziom_jezyka b ON a.id = b.id_usera' . '
    LEFT JOIN jezyki c ON b.id_jezyka = c.id' . '
    LEFT JOIN poziomy_jezykow d ON b.id_poziomu = d.id' . '
    WHERE a.id = #user_id';
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    
    foreach($rows as $rows){?>
    <p>
        <label><?php echo $rows->jezyk ?>
          <select name="jezyk_<?php echo $rows->jezyk ?>">
    
                            <?php echo '<option value="0" id="default" selected="selected">'. $rows->poziom . '</option>';?>
                            
                                    <option value="1" id="inny1">Nie znam/Niewymagany</option>
                                    <option value="2" id="inny1_0" >Podstawowy</option>
                                    <option value="3" id="inny1_1" >Średni</option>
                                    <option value="4" id="inny1_2" >Dobry</option>
                                    <option value="5" id="inny1_3" >Biegły</option>
                            </select>
        </label>
                    <?php echo 'użytkownik ' . $rows->username .' zna ' . $rows->poziom . ' język ' .  $rows->jezyk; } ?>
      </p>

  4. #3
    Bywalec
    Dołączył
    15-10-2007
    Wpisy
    102
    Punkty
    30

    Domyślny

    Wygląda obiecująco ... na początek próbuję zrozumieć złączenia ale przy mojej pustce coś mi to idzie jak krew z nosa ...

    zastanawia mnie tez sytuacja kiedy ktoś nie ma jeszcze dodanego języka... a wypełniają to studenci ...

    "chce cos dostać ale sam nie wypełnie wszystkiego ..."


    kiedy student za pierwszym razem nie poda, że zna np włoski to później dodać go nie będzie mógł - o ile dobrze do tej pory zrozumiałem sql. Znaczy kierunek słuszny jednak droga wyboista... po tym jak uporam się ze złączeniami to zacznę rozważać jak ten problem rozwiązać ...

    w pierwszej kolejności sprawdziłbym jakie języki są na liście a potem dopiero pobierał resztę - ale to taki pierwszy przebłysk świadomości.

  5. #4
    Wiarus Robster awatar
    Dołączył
    30-01-2010
    Skąd
    Częstochowa
    Wpisy
    2 136
    Punkty
    135

    Domyślny

    @seeb dlaczego nie może zmienić zawartości pola? SQL na pewno nie jest przeszkodą. Jeśli przewidujesz, że użytkownik może wypełniać i modyfikować dane wielokrotnie, to wystarczy wstawić funkcję warunkową, która sprawdzi czy użytkownik wypełniał już formularz i jeśli dane się nie pokrywają to używasz polecenia UPDATE i dodatkowo wywołujesz np okienko z zapytaniem o potwierdzenie zmiany rekordu w tabeli.
    Nic co jest warte posiadania nie przychodzi łatwo.
    http://robertmatuszewski.pl

  6. #5
    Bywalec EkleErs awatar
    Dołączył
    01-09-2010
    Skąd
    wawa
    Wpisy
    231
    Punkty
    45

    Domyślny

    ........
    //e.d to co wyzej sory

  7. #6
    Bywalec
    Dołączył
    15-10-2007
    Wpisy
    102
    Punkty
    30

    Domyślny

    Przeszkodą jest na razie ciężkie myślenie... stad w ogóle ten wątek... sql nie jest o ile głowa pracuje cokolwiek przyzwoicie.

    wydaje się że powinno to wyglądać tak:

    sprawdzenie i wyświetlenie listy języków w bazie
    w czasie wyświetlania powinienem sprawdzić czy istnieje związek miedzy językiem aktualnie wypisywanym a użytkownikiem jeśli tak to jaki ma poziom.

    czy dobrze myślę?

    pytanie, które mi się nasunęło to czy oby nie stracę za dużo na wydajności ...

    zalążek:
    Kod PHP:
    $sql="SELECT * From #__jezyki";
    $db->setQuery($sql);
    $jezyki = $db->loadObjectList();

    foreach ($jezyki as $jezyk){
    ?>
        <p>
        <label><?php echo $jezyk->jezyk ?>
          <select name="<?php echo $rows->jezyk ?>">
    <?php      /**
                 * tu bedziemy szukali związku z userem
                 * lub ofertą zaleznie od potrzeb
                 */
    ?>
              <?php
                          
    //moje watpliwosci wzbudza value
              
    echo '<option value="0" id="default" selected="selected">'$rows->poziom '</option>';?>
              <option value="1" id="inny1">Nie znam/Niewymagany</option>
                                    <option value="2" id="inny1_0" >Podstawowy</option>
                                    <option value="3" id="inny1_1" >Średni</option>
                                    <option value="4" id="inny1_2" >Dobry</option>
                                    <option value="5" id="inny1_3" >Biegły</option>
                            </select>
        </label>
                    <?php echo 'użytkownik ' $rows->username .' zna ' $rows->poziom ' język ' .  $rows->jezyk; } ?>
      </p>';

    }

    ?>
    poprawcie mnie jeśli gdzieś się zagalopowałem.
    Ostanio edytowane przez seeb : 09-09-2010 23:16

  8. #7
    Wiarus Robster awatar
    Dołączył
    30-01-2010
    Skąd
    Częstochowa
    Wpisy
    2 136
    Punkty
    135

    Domyślny

    Z tego co rozumiem, komponent będzie dostępny dla osób zarejestrowanych, więc szukanie powiązania nie jest konieczne bo będzie nią zmienna sesji (nick). Możesz wymagać od użytkownika uzupełnienia za każdym razem wszystkich pól, wtedy wystarczy dodać jeden warunek, sprawdzający czy użytkownik ma już swój wpis w tabeli i jeśli tak to modyfikujesz dane, a jeśli nie to je dodajesz.
    W przypadku, gdy użytkownik po raz kolejny uzupełnia formularz i może wypełnić tylko te pola które zamierza zmodyfikować, trzeba dodać jeszcze jeden warunek, który pominie rekordy dla których pola nie zostały uzupełnione.

    Co do samego sprawdzania poziomów, to nie wiem czy jest sens. Skoro ktoś się decyduje na zmianę danych, to raczej wpisze nowe, a jeśli nawet poda te same to nic się nie stanie, zwyczajnie dane zostaną nadpisane i już.
    Co do wydajności, to przy tak małym zakresie danych (liczby przeszukiwanych tabel) zmiana wydajności będzie niezauważalna (chyba że mowa o bardzo dużej liczbie wywołań w bardzo krótkim czasie).
    Nic co jest warte posiadania nie przychodzi łatwo.
    http://robertmatuszewski.pl

  9. #8
    Bywalec
    Dołączył
    15-10-2007
    Wpisy
    102
    Punkty
    30

    Domyślny

    Założenie jest takie:

    mamy zarejestrowanych użytkowników którzy albo są studentami albo pracodawcami

    pracodawcy dodają oferty pracy w których wymieniają wymagania (delikwent ma oferty w których np język angielski zawsze jest obowiązkowy albo 1 na 5 nie ma angielskiego nie ma to znaczenia zatem pracodawca może mieć więcej niż jeden wpis w ofertach czego o studencie powiedzieć nie można - cv ma się jedno )
    pracodawców nie wpuszczamy do administratora ale administrator po swojej stronie może modyfikować dane / kasować etc (przecie oferty do pracy w agencji towarzyskiej nie przyjmiemy)
    w tej chwili studentów jest ponad 2400 a pracodawców 2700 nie wiem co będzie dalej ...
    Formularze obu - czyli pracodawcy i studenta mają wiele wspólnych cech - np wymagania co do uprawnień, znajomość języków obcych, umiejętności i cechy osobowości. Dzięki temu mozna np wyłuskać 100% oferty ("oferta idealna dla Ciebie" mam wszystko czego potrzebuje pracodawca a i jeszcze więcej.)

    Do listy języków można dodawać bo nie sposób wyszukać i wypisać wszystkie języki zresztą jest to pewnego rodzaju marnotrawstwo - kto potrzebuje kolesia z językiem zuluskim? a inną sprawą jest kto go zna a na liście trzeba by go mieć. To samo tyczy się uprawnień od kielni po trenera piłki nożnej 2 klasy - a konia z rzędem temu kto zna wszystkie możliwe uprawnienia możliwe do zdobycia w Polsce.
    Tak wypracowany schemat działania powinien sprawdzić się tak samo dobrze przy językach jak umiejętnościach, uprawnieniach i wszystkich innych których nie jesteśmy w stanie przewidzieć.

    Zaznaczam mówię o schemacie działania nie o kodzie chociaż w dużej mierze będzie pewnie zbieżny przy rozwiązywaniu tego typu problemów.

    ---------- Post dodany 10-09-2010 o 00:00 ---------- Poprzedni post był 09-09-2010 o 23:35 ----------

    Zwróćcie uwagę jak różnie to wygląda:

    i miło jest po kolejnym otwarciu zobaczyć coś takiego a nie wypełniać od początku pusty.

  10. #9
    Wiarus Robster awatar
    Dołączył
    30-01-2010
    Skąd
    Częstochowa
    Wpisy
    2 136
    Punkty
    135

    Domyślny

    Tutaj masz materiały na temat wczytywania danych z bazy do formularza http://docs.joomla.org/Sql_parameter_type
    Nic co jest warte posiadania nie przychodzi łatwo.
    http://robertmatuszewski.pl

  11. #10
    Bywalec
    Dołączył
    15-10-2007
    Wpisy
    102
    Punkty
    30

    Domyślny

    Jest może coś po polsku? Nie bardzo rozumiem jak to ma działać. Są jakieś przykłady?
    Jak to się ma do wzorca MVC?
    Ostanio edytowane przez seeb : 10-09-2010 18:48

Strona 1 z 2 12 OstatniOstatni

Podobne tematy

  1. Dynamiczny rozmiar menu
    przez buddyjoe na forum Szablony, wygląd, formatowanie
    Odpowiedzi: 7
    Ostatni post/autor: 22-11-2009, 10:32
  2. Dynamiczny tekst na banerze
    przez damsaw na forum Szablony, wygląd, formatowanie
    Odpowiedzi: 8
    Ostatni post/autor: 19-10-2009, 21:29
  3. Dynamiczny tytuł
    przez Dariusz69 na forum Pomysły, sugestie, propozycje, oczekiwania
    Odpowiedzi: 3
    Ostatni post/autor: 16-03-2008, 02:08
  4. Dynamiczny rozmiar strony a header
    przez Jdwind na forum Szablony graficzne
    Odpowiedzi: 2
    Ostatni post/autor: 14-10-2007, 06:23
  5. Dynamiczny tytul zawarty na stronie
    przez dyziu na forum Administracja - ogólne
    Odpowiedzi: 2
    Ostatni post/autor: 29-08-2007, 00:15

Reguły pisania

  • Nie możesz zakładać nowych tematów
  • Nie możesz dodawać wypowiedzi
  • Nie możesz dodawać załączników
  • Nie możesz poprawiać swoich postów
  •