Codeigniter klicanje funkcije
 
halo 28. dec 2011 12:02:27 Pridružen od:
16. maj 2010
92 objav
17 3 1
#1

Začel sem uporabljati Codeigniter sistem in mi je zelo všeč. Imam pa eno vprašanje.

Ali je mogoče klicati funkcijo iz enega controllerja v drugega tako kot jo lahko znotraj enega npr: $this->show();


všeč(0) ni všeč(0) spam(0)
 
SlimDeluxe 28. dec 2011 12:06:34 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#2

S tem rušiš design pattern, ki pravi da na 1 request odgovarja le 1 controller.

Če imaš potrebo po takih funkcijah, premisli o smotrnosti izdelave librarya, kjer boš imel te funkcije, ali, morda boljše, extendaš CIController v nek MYController, kjer bodo vse tvoje funckije, ki so skupne dvem ali več kontrolerjem. (osebno uporabljam ta drugo varianto).

Če je funkcija preprosta pa jo lahko daš tudi v helper.


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
halo 28. dec 2011 13:32:08 Pridružen od:
16. maj 2010
92 objav
17 3 1
#3

hmmm.. ni mi čisto jasno kdaj se posluževati library, helper, driver ali predlagani MY_Controller.

v svojem sistemu imam controller ki ureja komentarje celotne strani. te funkcije bi potem rad uporabit pri prikazu slike, ki bi jo rad komentiral


všeč(0) ni všeč(0) spam(0)
 
php.programer 28. dec 2011 14:11:53 Pridružen od:
20. sep 2011
347 objav
154 106 10
#4

jaz sem prebral celotno dokumentacijo + vse primere na net.tuts.com in lahko rečem, da je to pravilna pot, ker vmes še pridobiš veliko drugih odgovorov, ki ti mogoče v "tem trenutku" niso uporabni ;) s tem si boš odgovoril, kdaj uporabljat library, helper, driver, controller,... in kdaj so potrebne spremembe po system folderju! LP


všeč(0) ni všeč(0) spam(0)
 
SlimDeluxe 28. dec 2011 14:21:43 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#5

halo, večji del procedure, ki se ukvarja s podatki lahko daš v "model", nekaj ti še ostane v kontrolerju in za to ni problema, če maš skopirano. Saj večina kontrolerjevih metod je od 10-20 vrstic max, razen pri večjih formih.


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
ledi 28. dec 2011 14:26:21 Pridružen od:
14. avg 2008
681 objav
325 223 14
#6

v cakephp jaz ponavadi splosno funkcijo dam kar v app_controller ki je dostopen vsem controllerjem. Ce mas pa kas specificnega se pa naredi library


všeč(1) ni všeč(0) spam(0)
 
halo 28. dec 2011 16:16:57 Pridružen od:
16. maj 2010
92 objav
17 3 1
#7

net.tuts mi deluje zelo koristen. opažam da sem se prehitro pognal v programiranje in ne razumem celotnega koncepta. edina stvar po parih tutorialih, ki mi ni povsem jasna je, zakaj se recimo podatki ne obdelajo v controllerju in pošleju v view, kjer bi se samo izpisali.

npr: izpis komentarjev, se v controllerju sestavi v <div> itd, nato se ves ta delni html pošlje v view in samo izpiše. s tem lahko en view uporabiš na vseh straneh, ker ne vsebuje php-ja ampak samo izpis. je tako narobe?


všeč(0) ni všeč(0) spam(0)
 
SlimDeluxe 28. dec 2011 16:47:10 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#8

To si še enkrat preberi:

http://codeigniter.com/user_guide/general/views.html

V praksi so zelo uporabni t.i. view partials, torej

$string = $this->load->view('myfile', '', true);

potem v tem $string imaš sparsan view in ga v kakšnem drugem lahko uporabiš


// Spravi box kategorije v spremenljivko
$data['kategorije'] = $this->load->view('boxes/kategorije_view', null, true);

// Končni prikaz
$this->load->view('glavni_view',$data);
[/quote]
všeč(1) ni všeč(0) spam(0)
Freelance Web Developer
 
halo 28. dec 2011 17:46:51 Pridružen od:
16. maj 2010
92 objav
17 3 1
#9

če prav razumem.... v določenem manjšem view-ju obdelaš prikaz, ga shraniš v $data ter posreduješ glavnemu prikazu?


všeč(0) ni všeč(0) spam(0)
 
SlimDeluxe 28. dec 2011 18:36:19 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#10

Jp, v določenem manjšem viewu obdelaš samo neko smiselno celoto, kot v zgornjem primeru npr. okvirček s seznamom kategorij. Potem ta "manjši view" preprosto echo-jaš v nekem glavnem viewu, kjer želiš da se ta element pojavi.


všeč(1) ni všeč(0) spam(0)
Freelance Web Developer
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se