Avatar billede g1mzee Nybegynder
25. januar 2010 - 14:32 Der er 21 kommentarer

Kender du til code igninter?

Hej eksperter !

Jeg har her på det sidste læst lidt om codeigniter, men jeg syntes at  jeg mangler at vide noget om hvordan man sådan skal gøre hvis man vil lave en rigtig side, med at loade views i views men alligevel ha en controller til at lave noget til den.

håber der er nogen der kender til det og vil tilkendegive sig :D
Avatar billede repox Seniormester
26. januar 2010 - 01:38 #1
Inden der er nogen grund til at tilkendegive sig, så ville det være meget nærliggende at vide hvad det er der gør at du føler et behov for at bruge et framework som CI (eller et hvilket som helst andet framework, hvis tråden skulle udvikle sig i den retning)?
Avatar billede g1mzee Nybegynder
26. januar 2010 - 10:01 #2
er ikk helt med ?
Det er fordi jeg her for nylig har set CI, og vil gerne lærer det at kende. men jeg har bare et problem som jeg godt vil have andre mening på, da jeg ved der er flere måder at gøre det på. Og jeg godt gad og se hvordan andre folk gør det.
Det er fordi jeg har flere forskellige views, som bliver included til 1 fil. Men hvordan får jeg indholdet til at komme til de includes via controllers. f.eks. et login sted, når man er logget ind, så vises informationer om dig, og hvis du ikke er , vises der en form. Dettte skal der jo en controller på helst, men det skal der jo også på selve indholdet .

Kunne være rart at se hvordan andre folk har lavet deres sider, da det ville være lettere at se hvordan og hvorledes nogen af tingene skal gøres irl, istedet på tutorials.

Håber ikke dette skræmmer dig fra at hjælpe :)
Avatar billede repox Seniormester
26. januar 2010 - 23:31 #3
Nåeh, kom da helt fra det her igen...
Altså, det er jo desværre sådan at vi ikke alle kan blive lige enige om hvilken kodestil der er den rigtige; på den anden side giver det jo naturligvis plads til forbedringer - men altså, min holdning er at dynamikken skal tilføjes til dit view.
Om du så vil autoloade et plugin, en model eller en helper, bestemmer du jo selv, men det er lidt nemmere at rådgive dig ud fra den user management løsning du har valgt at bruge?
Avatar billede g1mzee Nybegynder
27. januar 2010 - 09:30 #4
ja..
Men jeg  ved slet ikke hvad jeg skal vælge.
Syntes lidt jeg mangler at se et eksempel i action, altså se et fuldt eksempel hvordan en har sat siden op inkluderet sine ting osv.
Fordi det jeg jo gerne vil er at gøre det mest dynamisk som muligt, og ikke sådan at jeg skal til at lave hver side for sig selv, men kun det der skifter på hver side. Men det skal jo stadig ikke være noget problen at min login box får data fra en controller.
Nok det jeg skal have en åbenbaring om er at hvor jeg får data fra flere end 1 controller, ned i mine views.
Håber du kan følge mig :D
Avatar billede repox Seniormester
27. januar 2010 - 10:06 #5
Igen, jeg ved ikke hvilken løsning du har valgt, men hvis vi nu forestillede os at du bare anvender CI's eget Session Library, så ville jeg vælge at autoloade det.

Så ville jeg supplere med min egen Model (til at administrere mine brugerkonti).

Så forestil dig at du har en login controller som kontrollerer brugernavn og kodeord med din model og hvis du så er logget ind, redirecter du til brugerens personlige side, og ellers viser du et view (bad_login) som fortæller at de ikke kunne logge ind:



<?php

  class Login extends Controller
  {
    public function index()
    {
      $this->load->model("users");
      $this->load->helper("url");

      $username =  $this->input->post("username");
      $password =  $this->input->post("password");

      $res = $this->load->users->login($username, $password);
      if( $res )
      {
        $this->load->session->set_userdata($res);
        redirect("/user/personal/");
        exit;
      }
     
      $this->load->view("bad_login");
    }

  }

?>



Så kunne dit view se nogenlunde således ud:



  ... <!-- Menu, header alt det der.... -->
  <?php if( $this->load->session->userdata("userId") ): ?>
    her viser du informationerne fra din brugers data
  <?php else: ?>
    her kan du vise din loginform, hvis brugeren ikke er logget ind
  <?php endif; ?>
  ... <!-- resten af dit view -->



Det var et simpelt forslag der giver dynamik i dit view, sammen med lidt brug af autoload...
Avatar billede g1mzee Nybegynder
27. januar 2010 - 11:02 #6
MHhh..
Så det vil sige at du loader header view footer view ind på hver side side du har ?

men man har jo også ting der skal på 'main' siden . Hvordan vil du få det vidst også ?
Avatar billede repox Seniormester
27. januar 2010 - 11:20 #7
Jeg ved ikke hvad du mener med 'header view' og 'footer view' eller 'main' siden?
Nu skal du jo passe på du ikke gør det mere kompliceret end det i virkeligheden er... Idéen med CI var jo at gøre det nemt for dig...
Avatar billede g1mzee Nybegynder
27. januar 2010 - 11:28 #8
Ja det ved jeg godt.. Og har en fornemmelse på at det er det jeg gør.

Altså, har jo mit design der, hvor der er en header footer bottom, og dem har jeg delt op i views. og så loadet dem alle i en view der hedder site.php.

<?php $this->load->view('includes/header')?>
    <div id="content">
        <?php $this->load->view('includes/left')?>
        <?php $this->load->view('includes/mid', $data)?>
        <?php $this->load->view('includes/right')?>
    </div>
    <?php $this->load-view('includes/footer')?>

Så har jeg en controller der hedder site. Som så sender til site.php(view). hvor efter data kommer i mid,  for at få det indhold man nu vil have.
MEN. Jeg vil jo også godt ha' noget data fa login controlleren, men den skal jo kaldes via site controlleren, og så videre til left(view)

håber virkelig du kan følge mig :/
Avatar billede repox Seniormester
27. januar 2010 - 11:42 #9
Jeg kan ikke følge dig, for problematikken giver ikke så meget mening.
Du kan ikke (som udgangspunkt) få data fra to forskellige controllere - og det er bestemt heller ikke meningen med controllere - det er derfor jeg anbefaler dig at anvende Session Library'et til bibeholde data som du gerne vil anvende i dine views.
Avatar billede g1mzee Nybegynder
27. januar 2010 - 11:53 #10
mhh. Når.
Jeg ved ikke hvad jeg skal gøre så !
ARG!
Fordi i mit hoved tænker jeg at jeg skal have en controller til hver ting,
men det lyder ikke rigtig til at være sagen,
Men hvis jeg nu vil have mine personlige data i den box i left(view) og jeg stadig skal have det samme indhold på siden, som da jeg loggede ind. sådan at jeg ikke bliver smidt væk fra siden bare fordi jeg logger ind.
Avatar billede g1mzee Nybegynder
27. januar 2010 - 12:09 #11
Mhh har et eksempel.

Hvis jeg nu gerne vil have af ude i siden er der en box med overskriften: 5 nyeste artikler.
Men selve siden jeg er på er forsiden,

du ville vel have at der er en controller som styre indholdet af siden, ikk ?
Men hvordan vil du få dette til at virke ?
Avatar billede repox Seniormester
27. januar 2010 - 12:19 #12
Nej, min controller styrer ikke indholdet. Det gør mit view.
Mine controllere behandler eventuelle data og viser det mit view.

Men for at få dit eksempel til at virke (simpelt), ville jeg lave en model der kunne hente de seneste fem artikler. Autoloade den model og anvende den i mit view, uden at involvere mine controllere i det overhovedet.
Avatar billede g1mzee Nybegynder
27. januar 2010 - 12:23 #13
Ved ikk hvad der sker, syntes ikke at kunne finde hoved eller hale i hvordan og hvorledes. og jeg bliver tosset over det.!
Avatar billede repox Seniormester
27. januar 2010 - 12:31 #14
Altså, hvis du ikke har en generel forståelse for hvad MVC modellen er og hvordan den fungerer, får du det aldrig til at virke.
Så er det bedre hvis du ligger CI på hylden og laver noget selv.
Du er allerede i gang med at forvirre dig selv og overkomplicere problemet.

Dit problem er sandsynligvis at du forsøger at gabe over for mange problemstillinger ad gangen, hvilket gør at du gerne vil løse dem alle ad en gang. Det er umuligt; løs et problem ad gangen, refaktorer din kode og løs det næste.
Avatar billede g1mzee Nybegynder
27. januar 2010 - 13:44 #15
Det var også ment som en læringsfase af det. Og MVC..
Det er ikke fordi det er noget jeg skal have lavet nu, men syntes bare CI vikede meget spændende.
Avatar billede repox Seniormester
27. januar 2010 - 13:57 #16
Der er ingen tvivl om at at bruge CI kan tilbyde dig, som udvikler, nogle fordele i forbindelse med udvikling, vedligholdelse og det kan endda være tidsbesparende at anvende (ligesom andre frameworks end lige CI, men koncepterne er stort set de samme).

Der er bestemt ikke noget i vejen for at fortsætte med CI; jeg tror stadig at problemet ligger i at du ikke løser dine problemer i den rigtige rækkefølge, men sammenfatter en masse små til et stort som du gerne vil løse i en bid.

Jeg kan prøve at uddybe det...
Dit problem
At få en dynamisk boks i dit view, som kan bruges til login, som samtidig kan logge dig ind på den side du er på nu og brugerinfo-kasse.

De problemer jeg ser
Der skal være brugerfunktionalitet - løses med en Model
Brugerne skal kunne logge ind - løses med et view, som sender sender posts til en login controller
Når brugerne har logget, skal jeg gemme oplysninger som kan hentes frem i alle views - løses ved at autoloade session lib og gemme oplysningerne i den når brugeren logger ind
Mit view har en kasse, som i stedet for loginboksen, nu skal vise oplysninger om brugeren - løses ved at tilføje dynamik til mit view ud fra mit session lib
Brugeren skal helst blive på samme side, som de forsøger at logge ind på - løses ved at sende den nuværende URI med som en POST til min login controller, som jeg så redirecter efter.

Giver det mening?
Avatar billede g1mzee Nybegynder
27. januar 2010 - 15:26 #17
Det du skriver giver fuldkommen mening..
Og det rammer faktisk overraskende præcist på hvordan jeg sidder i det :p
hvilket egentlig også har fået mig til at se en mulighed for det eller 2 .
Men jeg kan stadig ikke helt forstå hvorfor du vil lagere det i sessions, da det er bare er informationer om brugeren,.
Eller er det bedre at havde det i session end at det bliver hentet fra databasen ?
Avatar billede repox Seniormester
27. januar 2010 - 15:38 #18
Uhm, nej? Ved du hvad sessions er?
Avatar billede g1mzee Nybegynder
27. januar 2010 - 15:45 #19
Ja det gør :)..
Men umildbart ville jeg da bare lagre et id på brugeren i session'en.
Avatar billede g1mzee Nybegynder
27. januar 2010 - 15:49 #20
Ja det gør jeg *
Avatar billede repox Seniormester
27. januar 2010 - 15:53 #21
Hvis det er din indgangsvinkel, så gør det.
Det ville så bare betyde at, hver gang du henter en side, og din brugers oplysninger skal vises i den omtalte boks i dit view, så skal du spørge databasen om det hver gang.
Hvis du nu bare gemte de oplysninger, som du gerne vil vise i din boks (lad det være sig brugernavn og muligvis en e-mail adresse), så gem dem, sammen med dit bruger ID i din session. Så slipper du for nogle liniers kode i dit view, samt et unødvendigt kald til din database for hver gang du loader en side.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester