Kalendarz i custom komponent
Strona 1 z 2 12 OstatniOstatni
Wyniki 1 do 10 z 16

Temat: Kalendarz i custom komponent

  1. #1
    Przeglądacz
    Dołączył
    20-03-2018
    Wpisy
    95
    Punkty
    7

    Joomla! 3.x Kalendarz i custom komponent

    Cześć.
    Szukam u was porady do pewnego problemu, zaznaczam że obecna forma działa, lecz jest niedoskonała.

    Teraz do sedna.
    Problemem jest wykorzystanie kalendarza w komponencie, który stworzyłem. Chodzi o to, że na początku w kodzie mam pobieranie zmiennych zawartych w tym kalendarzu i wykorzystanie ich do pobrania danych z bazy opartych na datetime. Jest również moduł paginacji, który niestety odświeża całą stronę i ponownie pobierane są dane podstawowe z kalendarza. Dane po pierwszym pobraniu zapisuje w sesji, ale odświeżenie powoduje napisanie tych danych. Dodatkowo w obecnej formie miejsca w kalendarzu są puste po odświeżeniu (nie wyświetla tego co mu się wybrało).
    Jeśli będzie potrzeba to doprecyzuje jeszcze.

    Dzięki za rady.

    Plik XML:
    Kod:
            <?xml version="1.0" encoding="utf-8"?>
    <form>
        <fields name="filter">
    <field
                    name="date_start"
                    type="calendar"
                    label="Select Start date"
                    description=""
                    class="input-medium"
                    required="false"
                    filter="user_utc"
                    format="%Y-%m-%d %H:%M:%S"
                    default="00:00:00"
                    singleheader="true"
                    showtime="true"
                    timeformat="24"
                    todaybutton="true"
                    weeknumbers="true"
                    filltable="true"
                    minyear="-3"
                    maxyear="5"
            />
    
            <field
                    name="date_stop"
                    type="calendar"
                    label="Select End date"
                    description=""
                    class="input-medium"
                    required="false"
                    filter="user_utc"
                    format="%Y-%m-%d %H:%M:%S"
                    default="23:59:59"
                    singleheader="true"
                    showtime="true"
                    timeformat="24"
                    todaybutton="true"
                    weeknumbers="true"
                    filltable="true"
                    minyear="-3"
                    maxyear="5"
            />
    </fields>
    </form>
    Kod odpowiedzialny za pobieranie danych na obecną chwilę:
    Kod PHP:
    protected function getListQuery()
        {
            
    // Initialize variables.
            
    $db    JFactory::getDbo();
            
    $query $db->getQuery(true);

            
    // Create the base select statement.
            
    $query->select('*')
                  ->
    from($db->quoteName('log_php'));

            
    // Filter: like / search
            
    $search $this->getState('filter.search');

            if (!empty(
    $search))
            {
                
    $like $db->quote('%' $search '%');
                
    $query->where('content LIKE ' $like 'OR err_str LIKE ' $like 'OR file LIKE ' $like);
            }

            
    // Filter Published
            
    $published $this->getState('filter.published');

            if (
    is_numeric($published))
            {
                
    $query->where('published = ' . (int) $published);
            }
            elseif (
    $published === '')
            {
                
    $query->where('(published IN (0, 1))');
            }

            
    $session JFactory::getSession();

            
    $start_date $db->quote($this->getState('filter.date_start'));
            
    $stop_date $db->quote($this->getState('filter.date_stop'));


            if(
    $stop_date == '\'\''){
                
    $def_stop_date = new DateTime();
                
    $stop_date =  $def_stop_date->setTime(235959)->format('Y-m-d H:i:s');
            }

            if(
    $start_date !== '\'\'' && $stop_date !== '\'\''){
                
    $session->set('start_date'$start_date);
                
    $session->set('stop_date'$stop_date);
            }

            if((empty(
    $session->get('start_date')) && empty($session->get('stop_date'))) || ($session->get('start_date') == '\'\'' && $session->get('stop_date') == '\'\'')) {

                
    $def_start_date = new DateTime();
                
    $def_start_date->setTime(000001);

                
    $def_stop_date = new DateTime();
                
    $def_stop_date->setTime(235959);

                
    $session->set('def_start_date'$db->quote($def_start_date->format('Y-m-d H:i:s')));
                
    $session->set('def_stop_date'$db->quote($def_stop_date->format('Y-m-d H:i:s')));


                
    $query->where('date_time BETWEEN '.$session->get('def_start_date').' AND ' $session->get('def_stop_date') );

            }else{
                
    $query->where('date_time BETWEEN '$session->get('start_date') . ' AND ' $session->get('stop_date') );

            }
            return 
    $query;
        } 

  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
    Wyjadacz terra awatar
    Dołączył
    26-05-2017
    Skąd
    Wrocław
    Wpisy
    920
    Punkty
    87

    Domyślny

    To może faktycznie doprecyzuj . Opisz o co chodzi po kolei, ale czuję że próbujesz coś co jest poza Joomla MVC framework.

  4. #3
    Przeglądacz
    Dołączył
    20-03-2018
    Wpisy
    95
    Punkty
    7

    Domyślny

    Mam w komponencie 2 pola na podanie daty, które w pliku XML mają ustawione takie parametry jak: format="%Y-%m-%d %H:%M:%S" oraz default="00:00:00". Jest to zrobione w ten sposób by pobierał podstawową godzinę jaką mu podałem.
    Teraz we wcześniej wspomnianych polach zawsze pojawia się obecna data (np. 2020-10-09 00:00:00) no i tu jest wszystko ok, ale....
    Dochodzimy do momentu wciśnięcia lupki (wyszukiwania), data jest jak wyżej. Powoduje to wyszukanie informacji z podanego dnia. Niestety, kiedy chcemy zmienić dzień na powiedzmy 2020-05-06 :15:23:23 i wciśniemy lupkę to faktycznie pokaże nam dane z podanego dnia, lecz mamy tu tez paginację, która odświeża stronę i ponownie pojawia się podstawowa data (2020-10-09 00:00:00), a chciałbym by była data zadeklarowana przez użytkownika (2020-05-06 :15:23:23) i żeby on ja zapamiętał w polach kalendarza.

    Ja w swoim skrypcie pobieram daną wprowadzoną w pole kalendarza i zapisuje ją do sesji lecz paginacja powodując odświeżenie strony ponownie wczytuje podstawową datę pobrana z XML.

  5. #4
    Wyjadacz terra awatar
    Dołączył
    26-05-2017
    Skąd
    Wrocław
    Wpisy
    920
    Punkty
    87

    Domyślny

    Ok, czyli masz datę domyślną, która po wybraniu przez użytkownika ma stać się nową datą domyślną, czyli musisz zmienić ustawienia domyślne filtra poprzez funkcję setState(); https://api.joomla.org/cms-3/classes...FormModel.html

  6. #5
    Przeglądacz
    Dołączył
    20-03-2018
    Wpisy
    95
    Punkty
    7

    Domyślny

    Tylko, że setState nie daje mi tej nowej daty jako domyślną i kalendarz bierze cały czas domyślną z xml.
    Jeszcze to sprawdzę, jak będę miał możliwość.

  7. #6
    Wyjadacz terra awatar
    Dołączył
    26-05-2017
    Skąd
    Wrocław
    Wpisy
    920
    Punkty
    87

    Domyślny

    samo setState nie ale masz populateState , getState , setState . Wartość domyślna z xml jest pobierana tylko jeśli do pola nie jest podana żadna wartość

  8. #7
    Przeglądacz
    Dołączył
    20-03-2018
    Wpisy
    95
    Punkty
    7

    Domyślny

    No dobrze, ale czy setState nie powinni wówczas nadpisać wartość domyślną? W miejscu kalendarza nadal wyświetla mi wartość domyślną. Przyznam, ze trochę nie rozumiem działania populateState.

  9. #8
    Wyjadacz terra awatar
    Dołączył
    26-05-2017
    Skąd
    Wrocław
    Wpisy
    920
    Punkty
    87

    Domyślny

    tak setState nadpisze wartość domyślną, przez wartość, która zostanie wskazana, czyli np. zmienną wybraną przez użytkownika, na pierwszej stronie paginacji, ale tę wartość pobierasz getState, a populateState to definiowanie stanu początkowego dla wartości w filtrach Obejrzyj sobie model w components/com_content/models/category

  10. #9
    Przeglądacz
    Dołączył
    20-03-2018
    Wpisy
    95
    Punkty
    7

    Domyślny

    Skoro setState nadpisuje wartość, czy jest możliwość aby tą nowa wartość wyświetlić w polu kalendarza? Z tego co zauważyłem, to mimo wykorzystania setState w polu kalendarza nadal jest wartość domyślna i system ja pobiera poprzez getState

  11. #10
    Wyjadacz terra awatar
    Dołączył
    26-05-2017
    Skąd
    Wrocław
    Wpisy
    920
    Punkty
    87

    Domyślny

    setState ustala stan, ale musisz podać mu wartość jaka ma się tam znaleźć i dotyczy to modelu, a w przypadku formularza operujesz na polach poprzez setValue i getValue.
    Jeśli strona paginacji nie jest tym samym formularzem, to przekaż wartość z getValue zmiennymi do ustalenia setState w modelu dla nowego formularza.
    W przypadku strony paginacji, gdy to jest ten sam formularz, to wystarczy operować na setValue getValue i zmiennych.
    Kod:
    <?php $this->form->setValue('nazwa_pola', null, $wartość_pola_którą chcesz ustalić); ?>
    <?php echo $this->form->getInput('nazwa_pola'); ?>
    setState różne setValue
    getState różne getValue

Strona 1 z 2 12 OstatniOstatni

Podobne tematy

  1. Komponent do dodawania opinii z custom fields
    przez zorza na forum Rozszerzenia - problemy z obsługą, zarządzaniem
    Odpowiedzi: 1
    Ostatni post/autor: 05-11-2012, 13:59
  2. Problem z Custom Properties
    przez kubalobo na forum Rozszerzenia - problemy z obsługą, zarządzaniem
    Odpowiedzi: 0
    Ostatni post/autor: 25-04-2010, 23:54
  3. Custom backend
    przez jeras na forum Szablony, wygląd, formatowanie
    Odpowiedzi: 0
    Ostatni post/autor: 01-10-2009, 17:19
  4. DocMan + Custom Properties
    przez czyzio na forum Zasoby, plikownie,
    Odpowiedzi: 0
    Ostatni post/autor: 17-04-2009, 11:27
  5. Poprawiony plik sef.custom.php dla PL Remository
    przez keicaM na forum Administracja składnikami
    Odpowiedzi: 0
    Ostatni post/autor: 13-07-2007, 15:08

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
  •