Problem z wywołaniem metody widoku
Strona 1 z 2 12 OstatniOstatni
Wyniki 1 do 10 z 17

Temat: Problem z wywołaniem metody widoku

  1. #1
    Bywalec
    Dołączył
    11-07-2008
    Wpisy
    327
    Punkty
    29

    Domyślny Problem z wywołaniem metody widoku

    Mam problem z wywołaniem metody w widoku

    Mam:
    controller - com_mvc/controllers/list.php
    Widok - com_mvc/views/list/view.html.php
    com_mvc/views/tmpl/klienciform.php
    model - com_mvc/models/list.php

    I teraz jak chciałbym z controller.php metodą edit() wskazać, że widokiem tej metody ma zająć się metoda w view.html.php o nazwie display_edit() oraz ma otworzyć się template klienciform.php

    Mam nadzieję, że dobrze to opisałem a jeśli nie to z chęcią udostępnię więcej informacji ;)

    Dodam jeszcze, że chodzi o formularz do edycji. W chwili obecnej mam te same ikony (taskbar) w oknie wyświetlającym wszystkich klientów jak w formularzu edycji a dla formularza chcę mieć inne.
    Ostanio edytowane przez vego007 : 16-07-2008 19:56

  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

    Domyślny

    nie wiem czy dobrze rozumiem... w sumie to nie rozumiem ;P jeśli chcesz wybrać inny szablon to w adresie wpisujesz
    index.php?option=com_twojkomponent&view=widok&layo ut=templatka2

    gdzie templatka2 to nazwa pliku php z drugim szablonem w katalogu tmpl twojego widoku.

    nie wiem o co Ci dokładnie chodzi z tymi samymi ikonami staraj się pisać konkretniej. poprostusz stwórz kolejny widok jeśli ma służyć do czegoś innego... ten sam możesz użyć gdy wygląd ma być taki sam tzn np dodawanie elementu i jego edycja...
    ================
    Kurs pisania komponentów dla Joomla 1.5 - www.wromanek.info
    Czekam na opinie i sugestie.

  4. #3
    Bywalec
    Dołączył
    11-07-2008
    Wpisy
    327
    Punkty
    29

    Domyślny

    Tzn layout wiem w sumie jak wczytać. Robię to za pomocą:
    Kod:
    JRequest::setVar('view','list');
    JRequest::setVar('layout','listlayout');
    A chodzi mi o to:

    Mam tabelę z klientami.

    Tworzę toolbar (pasek z dodaj, edytuj itd.) kodem

    Widok:
    Kod:
    function display(){
    JToolBarHelper::title("Widok listy");
            JToolBarHelper::addNewX();
            JToolBarHelper::editListX();
            JToolBarHelper::deleteList();
            JToolBarHelper::cancel( 'cancel', 'Close' );
    ......
    }
    I teraz mam drugą funkcję do edycji
    Kod:
    function displayEdit()
    {
            JToolBarHelper::title("Edycja danych firmy");
            JToolBarHelper::save('save','save');
            parent::display();
    }
    I teraz jak wywołać i gdzie, żeby wyświetlały się ikony od displayEdit() a nie z display(). Z display mają zostać tylko w widoku z listą klientów.

    Kontroler wygląda następująco
    Kod:
    function display(){
            JRequest::setVar('view','list'); 
            JRequest::setVar('layout','listlayout'); 
            
            parent::display();
        }
    
    function edit()
    {
     $cids = JRequest::getVar('cid', null, 'default', 'array' ); 
    if($cids === null){ 
     JError::raiseError(500, 'cid parameter missing from the request');
    }
           $greetingId = (int)$cids[0]; 
           JRequest::setVar('view','list');
           JRequest::setVar('layout','klienciform');  
           if ($model = & $this->getModel('greetings')) {
                 $view->setModel($model, true);
           }
                
          parent::display();
    }
    Trochę to długie ale może teraz będzie łatwiej zrozumieć o co mi chodzi
    Ostanio edytowane przez vego007 : 17-07-2008 07:42

  5. #4

    Domyślny

    źle robisz... ty chcesz za pomocą jednego widoku wyświetlić najpierw listę wszystkich greatings (chyba gdzieś widziałem ten tutorial) a potem w tym samym widoku formularz?

    Tak się nie robi! Tworzysz dodatkowy widok i tam wszystko ładnie wygląda... nie po to ktoś wymyślił MVC żeby pchać wszystko w jednym miejscu, chodzi również o to żeby zadania różne od siebie oddzielić, tak jak napisałem wcześniej w jednym widoku możesz sobie zrobić np dodawanie jakiegoś elementu oraz jego edycję, wtedy tylko rejestrujesz taski w kontrolerze...

    p.s. kiedy wrzucasz na forum jakiś kod to wrzucaj go w tagach code lub php... troche przymiera to forum ale rób to dla siebie im lepiej i czytelniej przedstawisz sprawę tym szybciej dostaniesz dobrą odpowiedź.
    ================
    Kurs pisania komponentów dla Joomla 1.5 - www.wromanek.info
    Czekam na opinie i sugestie.

  6. #5
    Bywalec
    Dołączył
    11-07-2008
    Wpisy
    327
    Punkty
    29

    Domyślny

    To ma dokładnie wyglądać jak com_contact. Mam listę userów, biorę new lub edit i mam formularz. Wypełniam / modyfikuję i wciskam save, dzięki czemu dodaję/ aktualizuję bazę danych i wyświetlają mi się ponownie userzy.
    A co do widoku, to jakie pliki muszę stworzyć, bo gdzieś czytałem, że dla jednego kontrolera może być tylko jeden widok nazwany view.html.php.

    Narazie zrobiłem instrukcję switch do tasków. W przypadku taska 'edit' wyświetla mi sie toolbar z zapisem a w 'default' standardowy z dodaj, edytuj itd. Jeśli jednak to jest niezgodne z MVC to proszę o jakąś radę.
    Nie wiem też jak pod JToolBarHelper podpiąć link do wybranego przeze mnie taska. Za wszelką pomoc będę wdzięczny
    Ostanio edytowane przez vego007 : 17-07-2008 09:13

  7. #6

    Domyślny

    eh... te artykuły są dziwnie napisane i do wielu rzeczy trzeba dojść samemu... w kontrolerze nie rób switch tylko każdy task rób jako osobną funkcję w view zapisujesz to tak:

    JToolBarHelper::save();

    a w kontrolerze
    Kod:
        function __construct( $default = array() )
        {
            parent::__construct( $default );
        }
    function save()
    {
       //tu co robi save
    }
    ew. jeśli chcesz zrobić jeszcze apply (zastosuj) które zachwouje się identycznie jak save (zapisuje coś) tylko nie wychodzi z edytora to w konstruktorze rejestrujesz ten task:
    Kod:
    $this->registerTask( 'apply', 'save');
    a następnie wewnątrz funkcji save() pod koniec robisz sobie
    Kod:
            switch($this->_task)
            {
                case 'applySite':
                    $link = 'index.php?option=com_component&task=editSite&cid[]='.$row->ID;
                    $msg = 'Dokonane zmiany zostały zapisane!';
                    break;
                case 'saveSite':
                default:
                    $link = 'index.php?option=com_component&task=sites';
                    $msg = 'Stronę zapisano!';
                    break;
            }
            $mainframe->redirect($link, $msg);
    i masz różne przekierowania w zależności od tego czy to apply czy save. i jedna funkcja bez konieczności kopiowania;)
    oczywiście żeby działało przekierowanie na początku musisz dodać

    global $mainframe;

    jak masz inny przycisk i inną funkcje to robisz analogicznie:

    JToolBarHelper::mojaInnaFunkcja(); a w kontrolerze ją implementujesz
    mojaInnaFunkcja(){
    //treść;)
    }

    pozdrawiam,
    Polecam książkę Mastering Joomla!
    ================
    Kurs pisania komponentów dla Joomla 1.5 - www.wromanek.info
    Czekam na opinie i sugestie.

  8. #7
    Bywalec
    Dołączył
    11-07-2008
    Wpisy
    327
    Punkty
    29

    Domyślny

    Ja robiłem tego switcha w widoku. Już się wogóle w tym pogubiłem. Zrobiłem tak jak mówiłeś i wtedy w toolbar są wszędzie te same ikony. :/ Mam 3 kontrolery i do tego 3 widoki i to okazało się już dla mnie za dużo. Może wysłałbym Ci na maila mój kod to byś zerknął w wolnej chwili i dał mi jakieś konstruktywne rady?

    Dodam jeszcze, że jak wpisuję z palca w linku task=save to wykonuje się instrukcja save z kontrollera którego potrzebuję. Problem jest z tym, że przyciski z toolbara wywołują metody głównego kontrolera a nie kontrolera list znajdującego się w katalogi controllers.
    Ostanio edytowane przez vego007 : 17-07-2008 12:21

  9. #8

    Domyślny

    hm... o to w sumie chodzi... na co komu tyle kontrolerów? ja zawsze robię tak że mam jeden główny kontroler, w którym są odpowiednie funkcje save() edit() list() itp itd.i te funkcje są wywoływane odpowiednio z każdego widoku;)

    przyglądnij się jak po stronie admina zrobiony jest komponent com_weblinks tylko tam przyciski wrzucali do templatki a ja wole do view.html.php...i tam jest jeden kontroler ;) przyglądnij się na spokojnie a napewno załapiesz o co chodzi
    ================
    Kurs pisania komponentów dla Joomla 1.5 - www.wromanek.info
    Czekam na opinie i sugestie.

  10. #9
    Bywalec
    Dołączył
    11-07-2008
    Wpisy
    327
    Punkty
    29

    Domyślny

    Zrobiłem tyle kontrolerów bo gdzieś tam zalecali żeby tak robić. Mam oddzielny do wyswietlania klientów, główny i jeden pod który będę musiał jakoś podpiąć mój skrypt do generowania faktur. Przejrze tego weblinka, mam nadzieję, że pomoże.

  11. #10

    Domyślny

    wiem o którym mówisz tekscie też to czytałem kiedy się uczyłem ale tylko mnie to w błąd wprowadzało;/ naprawdę uwierz mi wygodniej jest zrobić ten jeden kontroler z wszystkimi funkcjami masz wszystko ładnie w jednym miejscu a widoki tylko rozdzielasz osobno i modele;)
    ================
    Kurs pisania komponentów dla Joomla 1.5 - www.wromanek.info
    Czekam na opinie i sugestie.

Strona 1 z 2 12 OstatniOstatni

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
  •