Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zdjęcie

Jak ustawić wartość pola input text w zależości od wybranej opocji w polu select?


  • Proszę się zalogować aby odpowiedzieć
9 odpowiedzi na ten temat

#1
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
Witam,
Ty razem mam problem z ustawieniem tekstowego pola input w zależności od wybranej opcji pola select. Rzecz dotyczy backendu. Mam pole temat i w zależności jaką wybiorę opcję z listy to wartość (a najlepiej label) ma się wstawiać w formularzu wstawiać w pole temat. Pewnie trzeba przy selekcie wywołać fukcję load_callback i tam ustawiać wartość pola temat. Nie wiem jednak jak się odnieść do tego pola temat.
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
load_callback nie w select, a w polu temat :)

public function setDefault($varValue, DataContainer $dc)
{
    switch ($dc->activeRecord->pole_select)
    {
        case 'opcja1':
            $varValue = 'foo';
            break;

        case 'opcja2':
            $varValue = 'bar';
            break;
    }

    return $varValue;
}

  • 0

Codefog - Contao web development


#3
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
Kurcze naszukałem się tej nazwy pola activeRecord i nie znalazłem. Skąd Ty to wziąłeś?? :) Jak wyświetlam obiekt $dc przez print_r to mam tam tylko objActiveRecord i jak sobie wypisywałem wartość $dc->objActiveRecord->moje_pole to miałem nulla, mimo, że przy print_r($dc) była wartość.
  • 0

#4
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A działa? :)

Samego activeRecord nie zobaczysz, bo obiekt faktycznie nazywa sie objActiveRecord:

# /system/modules/backend/DataContainer.php

/**
 * Active record
 * @param object
 */
protected $objActiveRecord;


/**
 * Return an object property
 * @param string
 * @return mixed
 */
public function __get($strKey)
{
    switch ($strKey)
    {
        case 'activeRecord':
            return $this->objActiveRecord;
            break;

        default:
            return null;
            break;
    }
}

  • 0

Codefog - Contao web development


#5
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
Niestety nie do końca działa. Zmienia się pole text w zależności od wyboru selecta, ale po zrobieniu zapisu wartość pola text nie zapisuje się do bazy. Zapisuje się tylko wtedy gdy dodam chociaż jedną literęz palca w polu text. To wtedy jest wartość z selecta + ta moja literka. Nie mam pojęcia co może być przyczyną.
Pole text wygląda tak:
'subject' => array
		(
			'label'                    => &$GLOBALS['TL_LANG']['tl_newsletter']['subject'],
			'exclude'               => true,
			'search'                 => true,
			'inputType'             => 'text',
			'load_callback'	    => array(array('tl_Newsletter','setSubject'))
)
a select
	    'training' => array
		(
			'label'                   => &$GLOBALS['TL_LANG']['tl_newsletter']['training'],
			'default'                 => '',
			'exclude'                 => true,
			'inputType'               => 'select',
			'eval'                    => array('submitOnChange'=>true),
			'options_callback'        => array('tl_Newsletter', 'trainings')
			
		),
No i ta funkcja setSubject podobna jaką napisałeś tylko jest zapytanie mysql i w zależności o wybranej opcji w select zwraca wartość texta, który ładnie się zmienia, ale dopóki nie kliknę w niego i coś nie dopiszę to nie zapisuje się w bazie.
  • 0

#6
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Spróbuj dodać 'alwaysSave'=>true w evalu tematu:

'subject' => array
                (
                        'label'                    => &$GLOBALS['TL_LANG']['tl_newsletter']['subject'],
                        'exclude'               => true,
                        'search'                 => true,
                        'inputType'             => 'text',
                        'eval'                      => array('alwaysSave'=>true),
                        'load_callback'     => array(array('tl_Newsletter','setSubject'))
)

  • 0

Codefog - Contao web development


#7
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
Działa :). Bardzo Ci dziękuję za pomoc. :)
  • 0

#8
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
Witam,
Mam jeszcze jeden mały problem. Jak wybiorę sobie opcję z selecta to przeładowuje mi się storna ('eval' => array('submitOnChange'=>true)) i zmienia się zawartość pola text. I to jest OK. Ale jeżeli nie chcę robić zmian i wychodzę z fomrularza przez "Wróć" to okazuje się, że wartość pola text się nie zapisała do bazy, a selecta się zapisała. Czy da się tak zrobić, żeby ta wartość pola select nie zapisywała się jeśli chcę zrezygnować ze zmian i nie zatwierdzam formularza prze "Zapisz i Zamknij" tylko wychodzę przez wróć. Rozumiem, że ustawienie 'eval' => array('submitOnChange'=>true na selecie powoduje akceptację formularza i zapis danych, a ponieważ na polu text jest load_callback to zapisuje się stara wartość do bazy a dopiero jest ładowana do niego nowa wartość. Mam zatem taki efekt, że jedno pole ma starą wartość (text) a drugie pole(select) ma już nową. Czy da się to jakoś ominąć, żeby przy naciśnięciu "Wróć" nie zapisywały się zmiany formularza do bazy??
  • 0

#9
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Chyba nie da się tego obejść, bo automatycznie po zmianie opcji selecta/checkboxa/radio który ma evala 'submitOnChange'=>true, formularz zostaje wysłany, tj. zostaje przeprowadzona walidacja i zapisanie do bazy.
  • 0

Codefog - Contao web development


#10
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
No tak. To jest minus tego rozwiązania z 'submitOnChange'=>true. Pozostaje wobec tego jedynie wesprzeć się javascriptem. On by rozwiązał problem.
  • 0




1 użytkowników czyta ten temat

0 użytkowników, 1 gości, 0 anonimowych użytkowników