Avatar billede skizo_someone Nybegynder
05. april 2006 - 00:21 Der er 8 kommentarer og
1 løsning

Tanker ang. udvikling af CMS mht. moduler, indholdsredigering osv

Godaften eksperter.

Sagen er den, at for at holde mit PHP ved lige og for at udforske nye områder af PHP arbejder jeg i ny og næ på et CMS - sådan bare for sjovt - men jeg føler jeg mangler nogle tanker bag min udvikling idet jeg har det med bare at gå igang med at programmere men mangler nogle gange tankerne og struktureringen bag.

Det som jeg godt kunne tænke mig med denne tråd er at få noget feedback fra nogle personer som har noget erfaring med denne slags arbejde og som kan give mig nogle gode råd, både rent projektmæssigt men også programmeringsmæssigt idet jeg reelt ingen uddannelser har indenfor dette.

Programmeringsmæssige råd, kræver jo lidt at I kender til hvad jeg jeg gerne vil opnå. Jeg vil gerne lave et lille CMS der er nemt at have med at gøre og hvor der nemt kan tilføjes nye funktioner i form af moduler der kan tilføjes til CMS'et. Jeg vil gerne opnår så stor abstraktion mellem design og kode som muligt og kigger derfor på at integrere Smarty i systemet. Kodemæssigt er jeg blevet ret hooked på at arbejde objekt-orienteret og er her bleven introduceret for konceptet MVC (Model View Controller) men det er ikke rigtigt lykkedes for mig at nogle gode artikler omkring dette der forklarer det på en måde så jeg kan se hvordan jeg bruge dette hos mig.

Det som jeg også godt kunne tænke mig lidt feedback omkring, er mht. udviklingen af moduler til CMS'et. Hvordan gøres dette smartest og hvilke hensyn skal man tage for at undgå at sikkerheden bliver kompromiteret?

Ja, generelt savner jeg bare noget information fra folk der har lidt erfaring indenfor området - alt er velkomment :)

På forhånd tak
Christian
Avatar billede fangel Nybegynder
05. april 2006 - 10:23 #1
Ja, at starte med at sige at det skal være OOP og MVC er en god start - det vil spare dig for en del senere..

Normalt når man laver noget modul-installation har man en mappe til moduler, og så en under-mappe for hvert modul. Denne mappe skal så indeholde en bestemt fil, fx "main.php", "module.php" eller lignene.
Denne fil så skal indeholde noget der beskriver modulet, om man gør det via variabler eller en klasse er sådan set lige meget. En ide kan være at lave en abstrakt klasse, og der i modul-info-siden så er en underklasse der nedarver fra denne. Den abstrakte klasse skal så have en masse properties og metoder som skal nedarves der kan bruges til beskrivelse, installation, opdatering og afinstallation af moduler.

--

En anden ting du vil blive glad for i længden er hvis du udvikler frameworks til
- database-behandling. noget til at beskrive alle tabeller i din database og til at behandle data fra disse tabeller via nedarvning.
- logning. så du kan logge alle database-kald, template-kald osv. Skal holde styr på ting som hvor lang tid de forskellige ting tager, om de var successfulde etc..
- event-styring. et system så man kan registrer events, og funktioner der skal kaldes når disse events kaldes. godt når moduler skal kunne arbejde sammen, uden at hårdkode samlinger.

--

hvis du ikke lige fangede alt, eller er i tvivl - så bare skriv løs.. jeg har selv leget meget med at lave noget lignene - for at se om jeg kunne, og for at finde den bedste måde.. ;)

Morten
Avatar billede skizo_someone Nybegynder
05. april 2006 - 20:32 #2
Tak for feedbacken, jeg har da også lige et par spørgsmål til det.

For at starte et sted, MVC - har du kendskab til noget godt læsestof tilgængelig 'derude'?
Jeg må indrømme at min idé om hvad et framework er, er meget vag, kan du uddybe dine tanker omkring dette lidt?

Det du skriver omkring modul opbygningen finder jeg interssant og jeg tror jeg er med på hvad du mener. Min tanke var at lave en hoved klasse som var i CMS'et der styrede hvordan moduler fungerede og hvilke informationer de har adgang til, nå et nyt modul så skal vises, nedarver denne informatione fra hoved klassen - men igen synes jeg har jeg har svært ved at strukturere mine tanker præcist og overskue hvordan det i praksis skal designes - kender du til nogle eksempler man kan tage en kigger på og lade sig inspirere af?

Med hensyn til 'event-styringen' er jeg overhovedet ikke med, hvad præcist mener du med et event osv. osv.?

Inspireret af din respons, gav jeg mig til at browse rundt efter inspiration og faldt over projektet: http://framework.zend.com som jeg endnu ikke er sikker på kan bruges til noget for mig, men spændende ser det helt sikkert ud :) Der er hvertfald nogle programmerings rutiner, notationer og definitioner jeg lige skal have styr på før jeg kan gennemskue det helt.

Men du skal i hvertfald have tak for feedbacken, det har virkelig gjort mig hooked på at udforske disse nye elementer og jeg håber du vil tage dig tid til at kigge på mine uddybende spørgsmål.
Avatar billede fangel Nybegynder
06. april 2006 - 11:25 #3
Hmm, jeg har ikke nogle helt vildt gode læsestof-links om MVC, men kort set så er det noget ala dette

-- M(odel) --
Rutiner til at hente data ud af storage (fx database) og vise det på en context-ligegyldig måde. Altså fx som nogle generiske klasser eller arrays.

-- C(ontroller) --
Kigger på parametre, og afgører derfra hvilke data der skal hentes via deres respektive M(odels) og laver data om så formattet passer til det valgte V(iew)

-- V(iew) --
Templates (kan slf. være andet) til at tage specifikt formatteret data og viser det på en bestemt måde.

-- Eksempel --
Vi har et nyheds-system, dvs vi har en M(odel) der står for at hente nyheder ud af databasen, vi har en C(ontroller) der bedømmer ud fra sti eller parametre om det er en oversigt eller en liste der vises, og tre V(iews): et der viser oversigt som html, et der viser oversigt som rss og et der viser en enkelt nyhed som html.

---

Et lille pseudo-kode eksempel af et event system kan være noget ala
--
<?php

bind_event('modul_slettes', $en_klasse, 'funktion_der_skal_kaldes');
bind_event('modul_slettes', $en_anden_klasse, 'funktion_der_skal_kaldes');

call_event('modul_slettes', $det_modul_der_slettes);

?>
--

Her vil $en_klasse->funktion_der_skal_kaldes og $en_anden_klasse->funktion_der_skal_kaldes blive kaldt med $det_modul_der_skal_slettes som parameter. På den måde kan andre moduler fx få af vide når et modul bliver slettet, uden at dette skal hard-codes ind i en eller anden fil.

---

Et lille eksempel på _en_ måde at lave en modul-beskrivelses-klasse kan være
<?php
abstract class Module {
  abstract public function describe_module();
  abstract public function install_module();
  abstract public function update_module($version);
  abstract public function remove_module();
}
?>

hvor hvert modul så skal nedarve, altså ligesom dette
<?php
class NewsModule extends Module {
  public function describe_module() {
    return array('lavet_af'=>'Mig', 'modul_navn'=>'Nyheds modul', 'blah'=>'blah');
  }
  public function install_module() {
    // opret database-tabeller
    // opret evt. mapper
    call_event('modul_installeret', $this);
  }
  public function update_module($version) {
    if($version == 1) {
      // opdater fra version 1
    } elseif( $version == 2) {
      // opdater fra version 2
    }
  }
  public function remove_module() {
    // slet database-tabeller
    // evt slet mapper
    call_event('modul_slettet', $this);
  }
}
?>


Hvis du fanget det.. ;)

---

Zend's framework ser ganske lovende ud på rigtigt mange punkter ja - jeg har selv overvejet at bruge nogle af dets funktioner..
Kort fortalt så er et framework bare en "uafhængig" del af et system som kan genbruges mange steder, hvor inplementation i ets eget system normalt foregår ved at lave nogle specifikke klasser der nedarver fra frameworkets klasser.. Nogle frameworks er dog udelukkende funktionalitet og man kan derfor bare kalde dets funktioner direkte uden at lave egne nedarvnings-klasser..

---

Hvis du har meget, så bare fortsæt her - eller se om du kan finde min mail. (Hint: mailto:ZmFuZ2VsQG5hYmxlLmRr) og skriv til mig der..

---

Standard disclaimer: jeg er selvlært, så det kan ske jeg har fanget enkelte koncepter forkert.. ;)

Morten
Avatar billede skizo_someone Nybegynder
09. april 2006 - 18:48 #4
Hej igen Morten.

Af hensyn til andre brugere om muligvis kan finde denne information brugbar, vil jeg fortsætte min spørgen her, men bare lige for at hævde mig selv vil jeg godt lige sige at jeg har luret din email :)

Jeg har, indtil videre, et sidste spørgsmål, stadig angående event systemet. Da jeg kiggede dine eksempler igennem, tog jeg call_event og bind_event som 2 standard funktioner i php, men dette måtte jeg sande ikke var sagen. Jeg tror jeg har fanget konceptet i det med events, men har bare et problem med, kodemæssigt, at se hvordan det hænger sammen.

Inden jeg slutter, vil jeg godt takke for din tid og dine gode eksempler.

Christian
Avatar billede fangel Nybegynder
12. april 2006 - 13:54 #5
hæhæ, nej - det var lidt pseudo-kode det m call- og bind_event... jeg ville nok lave det som en klasse (evt statisk, men nok mere som singleton, evt m. statiske call og bind funktioner) der gemte events som et associativt array m. callbacks til funktioner som indholdet af arrayet.. ;)

Hvis du i fremtiden har andre spm. så kan du også bare skrive en mail til mig - eller skrive en mail og bede om en messenger-adr. eller anden im-form.. ;)

Morten
Avatar billede skizo_someone Nybegynder
23. oktober 2006 - 16:07 #6
Jeg takker mange gange for inspirationen. Er det muligt at få et svar?
Avatar billede fangel Nybegynder
23. oktober 2006 - 16:12 #7
Jah.. hvorfor ik.. ;)
Avatar billede skizo_someone Nybegynder
21. november 2006 - 15:19 #8
Jamen så kom da med det :)
Avatar billede fangel Nybegynder
22. november 2006 - 08:01 #9
Der var vidst lige noget jeg havde glemt, hva..

-fangel
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