Rozbudowa komponentu helloworld
Wyniki 1 do 9 z 9

Temat: Rozbudowa komponentu helloworld

  1. #1
    Nowicjusz
    Dołączył
    19-02-2010
    Wpisy
    18
    Punkty
    2

    Domyślny Rozbudowa komponentu helloworld

    Witam,
    ucze się pisania komponentów bazując na tym tutorialu z joomla.org:
    http://docs.joomla.org/Developing_a_...ackend_actions

    W obecnej chwili wpisy/pola które zostają wysłane do bazy danych znajdują się w pliku: admin/models/forms/helloworld.xml
    Skrypt pobiera z tego xmla pola i wpisuje je w kolumny w bazie danych zgodnie z deklaracją nazwy 'name' w xml.
    Dopisując następne pozycje w pliku xml udało mi się zapisywać więcej danych do bazy danych, teraz chce jednak wysłać do bazy danych zmienną php. W xml to są tylkostatyczne pola których zawartość uzupełniam przez formularz, natomiast chce wysyłać do bazy dodatkową wartość, uzupełniać dodatkową kolumnę w bazie dynamicznie zmienną php, nie przez formularz.

    Jak zmodyfikować kod aby wstrzyknąć swoją zmienną? Wydaje mi się że dane które zostaną dołączone do zapytania bazy danych są w zmiennej $data, lecz to tylko moje przypuszczenie i nie wiem nawet jak wstrzyknąć do niej swoją zmienną php.
    $data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data ', array());

    Pozdrawiam

  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 pawelSafiStudio awatar
    Dołączył
    27-09-2010
    Wpisy
    646
    Punkty
    90

    Domyślny

    Możesz to zrobić na kilka sposobów. Albo przez tworzenie własnego obiektu dziedziczonego po JFormField (http://docs.joomla.org/Form_field), albo przez nadpisanie metody store/save w modelu/pliku table/controlerze. Jeśli skorzystasz z pierwszej opcji, pole dynamiczne będzie ładowane automatycznie do formularza. Jeśli z drugiej, musiałbyś napisać jeszcze metodę do pobierania danych dla tego pola i przekazać do widoku. Sposobów jest sporo. Wystarczy wybrać ten, który dla Ciebie będzie najwygodniejszy.

    Tutaj masz przykład: http://wiki.joomla.pl/index.php/Twor...formularza_XML
    "Twoja strategia jest do bani (głównie dlatego, że nie poświęcasz jej wystarczająco dużo czasu)" - Mitch Joel

  4. #3
    Nowicjusz
    Dołączył
    19-02-2010
    Wpisy
    18
    Punkty
    2

    Domyślny

    wywołałem funkcje var_dump na zmiennej $data i otrzymałem coś takiego:

    Kod:
    object(JObject)[47]
      protected '_errors' => 
        array
          empty
      public 'id' => string '10' (length=2)
      public 'userid' => string 'dasdas' (length=6)
    
    
    jak odwołać się do pola userid i go nadpisać?

  5. #4
    Wyjadacz pawelSafiStudio awatar
    Dołączył
    27-09-2010
    Wpisy
    646
    Punkty
    90

    Domyślny

    Nie do końca rozumiem o co pytasz. Jeśli chodzi Ci o to jak nadpisać to w bazie danych, w necie jest bardzo dużo kursów na ten temat. Nie sądzę, żeby ktoś napisał pełny esej jak zapisywać dane w bazie danych z Twojego formularza.
    Wszystko co trzeba masz tak naprawdę tutaj: http://docs.joomla.org/Developing_a_...for_Joomla!2.5, łącznie z zapisywaniem do bazy danych.
    "Twoja strategia jest do bani (głównie dlatego, że nie poświęcasz jej wystarczająco dużo czasu)" - Mitch Joel

  6. #5
    Nowicjusz
    Dołączył
    19-02-2010
    Wpisy
    18
    Punkty
    2

    Domyślny

    Wiem że tam "niby" wszystko jest bo sam wkleiłem ten link i właśnie z niego korzystam, nie mam własnego formularza tylko właśnie formularz jaki został napisany w tym tutorialu, korzystam z dokładnie komponentu napisanego w tym tutorialu. Piszę jednak tutaj bo nie mogę się połapać w tym wszyskim, ten kod jest dla mnie mało czytelny, nie czuje jeszcze tego co po czym się wykonuje między tymi plikami i klasami. Obecnie zamieniłem sobie tylko nazwę powa, w tutorialu jest greetings a u mnie userid. Po zatwierdzeniu formularza przyciskiem joomlowskim "zapisz i zamknij" nie mam pojęcia co się dalej dzieje, które plik są wykonywane, które metody, czyli tym samym nie mogę dojść gdzie jest kod odpowiedzialny za pobranie danych wpisanych w formularzu.

    W poprzednim poście znalazłem zmienną $data do której są wczytywane pola formularza przy kliknięciu joomlowskiego przycisku 'dostosuj', jednakże w tej zmiennej siedzi obiekt i nie wiem jak się odwołać do pojedyńczego pola userid. Próbowałem $data->userid, $data[1], $data['userid'] nic z tego nie działa.

  7. #6
    Wyjadacz pawelSafiStudio awatar
    Dołączył
    27-09-2010
    Wpisy
    646
    Punkty
    90

    Domyślny

    Niestety nie będę Ci w stanie pomóc. Piszesz, że znalazłeś zmienną $data. Ale wiesz czy w ogóle przekazujesz ją do widoku i co przekazujesz w tej zmiennej, czy po prostu znalazłeś w jakimś poście, że ktoś wykorzystał zmienną o nazwie $data?. Niestety aby pisać komponenty musisz zrozumieć MVC Joomla!. Aby wykorzystać zmienną w widoku, musisz ją pobrać i przekazać do niego. Możesz to zrobić np. wyciągając dane z bazy w modelu. Aby wytłumaczyć to wszystko, tak jak wspominałem wcześniej, trzeba by było napisać niezły esej. W necie jest sporo kursów dodatkowych. Więc jest z czego korzystać.
    Ostanio edytowane przez pawelSafiStudio : 17-01-2013 07:52
    "Twoja strategia jest do bani (głównie dlatego, że nie poświęcasz jej wystarczająco dużo czasu)" - Mitch Joel

  8. #7
    Nowicjusz
    Dołączył
    19-02-2010
    Wpisy
    18
    Punkty
    2

    Domyślny

    Kurcze na prawdę nie wiem jak można prościej wytłumaczyć co chce zrobić. Nie chce w kolejnym poście pisać po raz kolejny to samo.
    Jednak napisze...
    Cytat Wysłane przez pawelSafiStudio Zobacz wiadomość
    Piszesz, że znalazłeś zmienną $data. Ale wiesz czy w ogóle przekazujesz ją do widoku i co przekazujesz w tej zmiennej, czy po prostu znalazłeś w jakimś poście, że ktoś wykorzystał zmienną o nazwie $data?. Niestety aby pisać komponenty musisz zrozumieć MVC Joomla!.
    JA NIC NIE MODYFIKOWAŁEM W TYM KOMPONENCIE! Nic jeszcze nie pisze. Mówię po raz n-ty, odpalam komponent z tego tutorialu który jest do pobrania z linku: https://github.com/downloads/rvsjoen...rld-part12.zip

    Cytat Wysłane przez pawelSafiStudio Zobacz wiadomość
    czy po prostu znalazłeś w jakimś poście, że ktoś wykorzystał zmienną o nazwie $data?.
    Cytat Wysłane przez Pad19 Zobacz wiadomość
    wywołałem funkcje var_dump na zmiennej $data i otrzymałem coś takiego:

    Kod:
    object(JObject)[47]
      protected '_errors' => 
        array
          empty
      public 'id' => string '10' (length=2)
      public 'userid' => string 'dasdas' (length=6)
    
    
    jak odwołać się do pola userid i go nadpisać?
    Chyba jednoznacznie z tego wynika co zrobiłem.
    Jaka zmienna $data?
    Pierwszy link z mojego pierwszego postu:
    http://docs.joomla.org/Developing_a_...ackend_actions

    Po wyszukaniu na tej stronie "$data":

    Kod PHP:
    $data JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array()); 

  9. #8
    Wyjadacz pawelSafiStudio awatar
    Dołączył
    27-09-2010
    Wpisy
    646
    Punkty
    90

    Domyślny

    Jak zmodyfikować kod aby wstrzyknąć swoją zmienną?
    Przejdź do pliku zarządzającego widokiem (view.html.php). Pobierz w nim swoje dane dynamiczne przy pomocy akcji:

    Kod PHP:
    $my_data $this->get('MyData');
    $this->assignRef('my_data',$my_data); 
    Następnie przejdź do modelu, który wykorzystujesz i dopisz w nim funkcję:

    Kod PHP:
    public function getMyData(){
    return array(
    'mojedane');

    Ostatni krok to dopisanie danych do formularza w pliku widoku:

    Kod PHP:
    <select name="jform[nazwa_zmiennej]">
    <?php foreach(this->my_data as $data): ?>
    <option value="<?php echo $data?>"><?php echo $data?></option>
    <?php endforeach; ?>
    Pamiętaj aby także w modelu obiektu uwzględnić wykorzystanie tej zmiennej podczas zapisu do bazy danych (możesz to też uwzględnić w pliku opisującego tabelę - w katalogu tables).

    Czy o takie coś Ci chodzi ?
    "Twoja strategia jest do bani (głównie dlatego, że nie poświęcasz jej wystarczająco dużo czasu)" - Mitch Joel

  10. #9
    Wyjadacz pawelSafiStudio awatar
    Dołączył
    27-09-2010
    Wpisy
    646
    Punkty
    90

    Domyślny

    Btw:
    Kod PHP:
    $data JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array()); 
    Ten kod pobiera dane z sesji użytkownika. Wykorzystane np. podczas próby zapisu formularza i wywołania błędu. Wówczas użytkownik widzi dane, które wpisał i nie musi po raz kolejny wypełniać formularza. Zwróć uwagę, że gdy $data jest pusta, skrypt próbuje wczytać dane z bazy danych ($this->getItem).
    "Twoja strategia jest do bani (głównie dlatego, że nie poświęcasz jej wystarczająco dużo czasu)" - Mitch Joel

Podobne tematy

  1. Rozbudowa formularza rejestracyjnego
    przez motyllo na forum Instalacje (Joomla!, składników)
    Odpowiedzi: 12
    Ostatni post/autor: 08-12-2011, 16:02
  2. komponent kontakt - rozbudowa
    przez voytas na forum Szukam dodatku do Joomla
    Odpowiedzi: 0
    Ostatni post/autor: 07-05-2009, 11:39

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
  •