Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito Henri Kinnunen, Seppo Tompuri, Tero Malkki, Matti Heiskanen, Tommi Rönkönharju, Tuomas Valkeapää Sisällysluettelo 1. Alkusanat.2 2. Asennusohje..2 3. Tietokantayhteyden määrittely..2 4. Tietokantapalvelin 2 5. CakePHP:n tiedostorakenne..2 6. Sivujen luominen CakePHP:llä.3 7. Staattisten sivujen muokkaaminen ja lisääminen.5
1. Alkusanat Trojan projekti suoritettiin Helsingin yliopiston Tietojenkäsittelytieteiden laitoksen Ohjelmistoprojekti kurssin yhteydessä. Projektin tavoite oli toteuttaa jäsenrekisterijärjestelmä ja tapahtumakalenteri Troijan Hevonen ratsastusseuran verkkosivuille. Tämä dokumentti on tarkoitettu järjestelmän ylläpitäjälle ja jatkokehittäjille ja sen tarkoitus on kertoa kuinka Troijan verkkojärjestelmää ylläpidetään, ja kuinka mahdollisista ongelmatilanteissa toimitaan. 2. Asennusohje 1. Kopioi asennuspaketti sivujen juurihakemistoon ja pura se siellä: tar zxf trojan_jarjestelma.tar.gz 2. Varmista, että hakemistojen ja tiedostojen lukuoikeudet on säädetty oikein hakemistoilla on execute-oikeus kaikille, tiedostoilla read: find./ -type d -exec chmod 0711 { \; && find./ -type f -exec chmod 0644 { \; 3. Varmista, että hakemistoon /app/tmp voi kirjoittaa. 4. Määrittele tietokantayhteys /app/config/database.php 5. Mene sivuille ja kirjaudu sisään adminina käyttäjätunnus: admin, salasana: 12345678. Vaihda adminin salasana pois oletusarvoisesta. 3. Tietokantayhteyden määrittely Avaa tiedosto /app/config/database.php ja muokkaa tietokantayhteyden asetukset serveri, tunnus, salasana, tietokanta vastaamaan palvelimesi tietoja. 4. Tietokantapalvelin Tietokantaan tallennetut tiedot pitää joissain tilanteissa ottaa talteen, joko palvelimen vaihtoa tai varmuuskopiointia varten. Linuxissa tämän voi tehdä työkaluilla: mysqldump ja mysqladmin. Otetaan ensin tietokantaan tallennetut tiedot talteen ja pakataan ne: mysqldump --quick trojan gzip > tietokanta.gz Tämän jälkeen tietokanta.gz siirretään uudelle palvelimelle tai varmuuskopioidaan. Tietojen palautus tästä tiedostosta tapahtuu seuraavasti: mysqladmin create trojan gunzip < tietokanta.gz mysql trojan 5. CakePHP:n tiedostorakenne Juurihakemistossa on mm. seuraavat alihakemistot: /www_root /app /cake App: Tämä hakemisto sisältää projektissa luodun järjestelmän, muutokset tulisi tehdä
tänne. Cake: Tämä hakemisto sisältää CakePHP:n perustoiminnallisuuden. Tässä hakemistossa olevia tiedostoja ei tulisi muokata, koska seuraukset saattavat olla arvaamattomia. Edelleen app-hakemistossa on mm. seuraavat alihakemistot: /app /config konfiguraatiotiedostot, mm. tietokantayhteyden määrittely /models mallit, joissa esitetään tietokannan rakenne /controllers kontrollerit, joissa esim. määritellään tietokantahaut /views näkymät, jotka käyttäjä näkee /webroot css-tyylitiedostot, javascriptit, kuvat /tmp CakePHP tallentaa tänne väliaikaisia tiedostoja On tärkeää, että tmp-hakemisto on olemassa ja sinne voi kirjoittaa, muuten järjestelmän suorituskyky saattaa laskea rajusti. 6. Sivujen luominen CakePHP:llä Aivan ensiksi luodaan malli hakemistoon /app/models. Malli vastaa jotain tietokannan taulua ja luomalla mallin CakePHP tietää mitä taulua käsitellä. Taulut tulisivat olla monikossa ja pienellä, mallit yksikössä ja pienellä, ja luokat yksikössä ja IsollaKirjaimilla. Esim. taulun "users" malli on luokka "User" tiedostossa user.php. Tiedostojen, taulujen ja luokkien nimeäminen on tärkeää, jotta CakePHP osaa yhdistää ne oikein. Antamalla luokalle nimeksi "User", CakePHP osaa automaattisesti yhdistää sen kontrolleriin UsersController ja tietää, että sen pitää käsitellä taulua "users". Mallin luominen ei ole pakollista ja CakePHP osaakin generoida puuttuvan mallin, mutta tällöin käytössä ovat oletusasetukset. Yksinkertainen määrittely mallille on esim. seuraava: class User extends AppModel { var $name = 'User'; Seuraavaksi luodaan kontrolleri, joka sijoitetaan hakemistoon /app/controllers. Kontrollerissa määritellään tietokantahaut, jotka suoritetaan yleensä kontrolleria vastaavassa mallissa. Saadut tiedot asetetaan muuttujiin, jotka välitetään edelleen näkymälle. Mallia User vastaava kontrolleriluokka on CakePHP:n nimeämiskäytäntöjen mukaan UsersController, joka sijaitsee tiedostossa /app/controllers/users_controller.php. Luokkanimessä sanat erotellaan siis isoilla kirjaimilla ja tiedoston nimessä alaviivalla. Yksinkertainen määrittely kontrollerille on esim. seuraava: class UsersController extends AppController { var $name = 'Users'; function index { $this->set'users', $this->user->find'all'; Tässä kontrollerissa on määritelty yksi funktio nimeltään index, joka on myös kontrollerin
oletusfunktio, jos kontrolleria kutsutaan toimintoa tarkentamatta. $this->set'users', $this->user->find'all'; Tämä komento hakee mallista User kaikki tiedot ja tallettaa ne muuttujaan "users", jota voimme käyttää näkymässä. Lopuksi luodaan näkymä, jossa kontrollerin hakemat tiedot esitetään. Näkymät luodaan /app/view hakemistoon, jossa ne tallennetaan kontrollerinsa nimeä kantavaan alihakemistoon. Esimerkkimme tapauksessa siis /app/view/users hakemistoon. Tiedoston nimeksi tulee toiminnon nimi ja tiedostopäätteeksi.ctp tässä tapauksessa siis index.ctp. Kun käyttäjä menee selaimellaan osoitteeseen http://www.esimerkki.fi/kontrolleri/toiminto näytetään kyseinen näkymä. Tässä tapauksessa siis www.esimerkki.fi/users/index riittäis myös pelkkä /users, koska index on oletustoiminto. Äskeisen esimerkin "users"-muuttujassa voisi olla tallennettuna taulukko, jonka muoto järjestelmän users-taulua mukaillen olisi: Array [0] => Array [1] => Array [User] => Array [User] => Array [id] => 1 [firstname] => Teppo [surname] => Testaaja [id] => 2 [firstname] => Tiina [surname] => Toimihenkilö Koska välitimme tämän parametrina näkymälle, meillä on nyt käytössä muuttuja $users ja voimme käydä taulukon läpi ja tulostaa sen tietoja käyttäjälle: foreach $users as $user: echo $user['user']['firstname']. $user['user']['surname']. <br>; endforeach; Tulostaisi listan: Teppo Testaaja Tiina Toimihenkilö
Ongelmatilanteessa komennosta pr$muuttuja voi olla apua. Sen avulla voi tulostaa ylläolevan kaltaisia esityksiä taulukkomuotoisista muuttujista. Näin voi selvittää CakePHP:n välittämien tietojen rakenteen. Tarkempaa tietoa CakePHP:n toiminnasta löytyy CakePHP:n dokumentaatiosta: http://book.cakephp.org/ CakePHP:n nimeämiskäytännöt pähkinänkuoressa: Tietokannan taulu: "users" Mallin luokka: "User", joka on tiedostossa /app/models/user.php Kontrollerin luokka: "UsersController", joka on tiedostossa /app/controllers/users_controller.php Näkymän malline, joka on tiedostossa /app/views/users/index.ctp 7. Staattisten sivujen muokkaaminen ja lisääminen Staattiset sivut ovat hakemistossa /app/views/pages, jonne voi lisätä uusia sivuja. Tiedostopäätteiden tulee olla.ctp, mutta näihin voi kirjoittaa normaalia html-koodia. Sivuihin pääsee käsiksi polusta www.esimerkki.fi/pages/display/sivun_nimi. Sivun runko mm. ylämenu on määritelty CakePHP:n layoutissa: /app/views/layouts/default.ctp. Tänne tehdyt muutokset näkyvät kaikilla sivuilla, koska näkymät rakennetaan tämän layoutin sisään. Hakemiston /app/webroot sisältö näkyy suoraan ulospäin juurihakemistona www.esimerkki.fi/ ja esimerkiksi kuvat on sijoitettu hakemistoon /app/webroot/img.