Avatar billede LilleUdvikler Nybegynder
10. juni 2011 - 18:18 Der er 9 kommentarer og
1 løsning

CodeIgniter - Template

Hejsa.

Jeg er i en tidligere tråd i dag, blevet opfordret til, at bruge CodeIgniter - og indtil videre må jeg sige, at jeg er vild med det.

Det første jeg jo godt kunne tænke mig, at finde ud af er, hvordan man laver et template, som skal bruges igen og igen og igen på ens hjemmeside. Ideen er jo selvfølgelig at, hvis man vil lave nogle ændringer i ens design, så skal man kun ændre det i en fil.

Er der en måde at gøre dette på i CodeIgniter? :o)

På Forhånd, mange tak, og go' weekend :)
Avatar billede repox Seniormester
10. juni 2011 - 19:34 #1
Du skal fokusere lidt på views: http://codeigniter.com/user_guide/general/views.html

Dine views skal jo så vises af din controller - men der er ikke noget der forhindrer dig i at kalde et view, i dine views.

Typisk har jeg tre kald til views i en controller:
<?php

  class Nyheder extends CI_Controller
  {
    public function index()
    {
      $data['news'] = $this->news_model->get_top_news();
      $this->load->vars($data);
     
      $this->load->view('html_header');
      $this->load->view('nyhedsside');
      $this->load->view('html_footer');
    }

    public function rss()
    {
      $data['news'] = $this->news_model->get_latest_news(10);
     
      $this->output->set_content_type('application/rss+xml');
      $this->load->view('nyheder_rss_xml', $data);
    }
  }

?>


I ovenstående controller har jeg to metoder - den ene er min standardside når jeg rammer http://example.org/nyheder - der henter jeg mine top-nyheder ud, sender dem til mine views.

Den anden metode bruges til RSS klienter - som kan nås på http://example.org/nyheder/rss - hvor jeg bare bruger et view som skaber et RSS XML output.
Avatar billede LilleUdvikler Nybegynder
12. juni 2011 - 13:12 #2
Hej igen Repox,

Håber du følger med i tråden her, selvom den er lidt gammel :o)

Jeg har kigget på det link du sendte mig. Og begyndte at designe min hjemmeside, sådan som jeg synes den skulle se ud.

Men jeg har nogle problemet med at gøre det med CodeIgniter. Fordi - sådan som de viser det i guiden, så skriver du hvad du vil have udført like:

<?php

class Site extends CI_Controller{
   
    function index()
    {
        $data['menu'] = "Hejsa";
       
        $this->load->view('siteview', $data);
           
    }
   
}

?>

Hvor min "siteview" så er mit fulde design, sådan som man ville gøre normalt med divs osv osv.

-------
Mine problemer er følgende:

- Hvor har jeg min CSS fil?
- Kan det være rigtigt at jeg skal skrive html inde i fx $data['menu'] = "MinMenu"; ?? Kan man ikke bare lave det sådan så den henter det ud man har lavet?
- Skal jeg netop IKKE lave hele mit design først?
Avatar billede repox Seniormester
12. juni 2011 - 13:30 #3
- Hvor har jeg min CSS fil?
Det nemmeste er at sige der hvor du plejer - i en undermappe til roden eller hvor det nu passer dig og referere til din i dine views med <link> elementer.

Alternativet er naturligvis at lave dem som views. Det er der nogle der vælger at gøre. Jeg gør det ikke så meget selv, men det afhænger af opgaven.

- Kan det være rigtigt at jeg skal skrive html inde i fx $data['menu'] = "MinMenu"; ??
Mit umiddelbare svar ville være nej, men ligesom med alt andet afhænger det jo af situationen.

Kan man ikke bare lave det sådan så den henter det ud man har lavet?
Ikke forstået? Normalt ville man jo lave sin menu i HTML'en (i CI vil det sige i sit view) og elementerne til sin menu får man jo fra sin database (som i CI vil være en model).

- Skal jeg netop IKKE lave hele mit design først?
Det er et vist et spørgsmål om vaner og holdning.

Normalt bygger jeg bare en HTML skal med det mest nødvendige for at få designet til at virke.
Når jeg så har bygget min skal, min menu, min footer og så videre, er det meget naturligt for mig at pille disse elementer ud i mindre stykker og loade dem individuelt. Et view kan jo sagtens loade et andet view. se f.eks. CI's wiki her: http://codeigniter.com/wiki/Displaying_Multiple_Views/
Der er også en forum tråd her - http://codeigniter.com/forums/viewthread/88335/ - som beskriver nogle alternativer.
Avatar billede LilleUdvikler Nybegynder
12. juni 2011 - 13:36 #4
Okay, jeg skal lige have noget på det rene:

Så i min view fil: siteview.php har jeg alt mit html, så designet kan fungere. Så henter jeg tekst osv ud fra min database? Altså, alt indholdet til min hjemmeside osv osv?

Så i min siteview ville jeg altså lave mine menu således:

<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

Også trækker jeg de forskellige punkter ud fra databasen? Eller skal jeg have min UL html fra et andet view?

Jeg er helt blank med det her må jeg være ærlig og indrømme.
Avatar billede repox Seniormester
12. juni 2011 - 13:51 #5
Det bestemmer du jo heldigvis selv.

Om du vil dele det op i et nyt view for at holde det adskilt eller om du vil beholde det i det samme view for at holde det samlet, bestemmer du jo helt selv.

Men ja, idéen er jo så at hvis du har din menu i databasen, så henter du dem ud fra databasen med en model og sender dem via din controller til dit view.
Avatar billede LilleUdvikler Nybegynder
12. juni 2011 - 13:55 #6
Okay.

Jeg har bare altid haft en ide om, at en php database kun blev brugt til brugernavne, passwords osv osv. Det er måske helt forkert forstået? :)
Avatar billede repox Seniormester
12. juni 2011 - 14:06 #7
Hvordan tror du at online webshops adminstrerer deres varer og bestillinger? Generelt CMS'er gemmer jo også indholdet af deres sider og andet CMS baseret indhold i databasen.

Du kan gemme ALT hvad du har lyst til i en database. Så længe det giver mening, kan du ligeså godt bruge databasen.
Avatar billede LilleUdvikler Nybegynder
12. juni 2011 - 14:11 #8
Oki Doki :o) Så blev jeg det klogere.

Nu tænker jeg jo så bare mht. hvad vi oprindeligt snakkede om: Hvad så når jeg har flere sider på min hjemmeside. Hvordan skal jeg så linke til dem nu? Hvordan skal jeg strukturere mine links. Og hvordan får jeg CI til at skifte indhold alt efter hvilken side man er på?
Avatar billede LilleUdvikler Nybegynder
12. juni 2011 - 15:36 #9
Ser ud til jeg har løst mit #8 problem.

Repox, er du sød at ligge et svar?

PS. Tak fordi du har vist mig CodeIgniter. Det er virkelig effektivt bare til det jeg har prøvet indtil videre. Super! :o)
Avatar billede repox Seniormester
12. juni 2011 - 16:52 #10
Du fik et svar her...

Jamen, selv tak - jeg håber da at du får lige så meget ud af det som jeg selv har gjort :)
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
Kurser inden for grundlæggende programmering

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