[ALG] Modules van een CMS

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik ben nu al een tijdje bezig met mijn eigen cms. In heb mezelf goed ingelezen, en heb ook veel open-source cms'en bekeken voordat ik zelf begon te bouwen.

In het begin denk je "alles moet zo flexibel mogelijk zijn". Maar gaandeweg heb ik bewust flexibiliteit ingeleverd voor gebruiksvriendelijkheid. En daar ben ik tevreden over.

Momenteel zit mijn cms zo in elkaar, dat je alle "modules" (weblog, forum, statistieken, gastenboek, etc.) op elke gewenste plek binnen de website kunt zetten. Je kunt het forum dus plaatsen op website.com/forum of bijvoorbeeld website.com/bedrijf/support/forum.

Een van de cms'en waar ik vooral wat betreft gebruiksvriendelijkheid een groot voorbeeld aan genomen heb, is Manila van het bedrijf Userland. Eigenlijk is hun product meer een weblog dan cms, maar het is vooral de intuitiviteit van het systeem dat ik wilde "kopieren".

Bij Userland zijn ze heel eenvoudig: alle extra modules zitten bij hen op vaste plaatsen: de statistieken op website.com/stats, het forum op /discuss, de surveys op /surveys, de search op /search. Op deze manier is dat weer iets waar de gebruiker niet naar om hoeft te kijken.

Nu begin ik er steeds meer voor te voelen om mijn cms in gebruiksvriendelijkheid aan te passen om ook de eventuele modules op vaste url's te zetten. De belangrijkste redenen hiervoor zijn:
  • hoeveel "modules" gebruikt een gemiddelde website nu eenmaal?
  • waarom zou je een forum eigenlijk op een of andere diepe url willen wegstoppen?
Mijn vragen aan jullie:
  • wat is jouw mening hierover?
  • welke "modules" ondersteunt jouw cms en zijn er modules die je logischerwijs niet in de root van de website kunt zetten?
  • hoe werkt jouw cms op dit gebied?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • littledreamer
  • Registratie: Juni 2002
  • Laatst online: 15-08-2025

littledreamer

Dingen enzo!

hoeveel "modules" gebruikt een gemiddelde website nu eenmaal?
Dat hangt volledig van de grootte van de website af, maar gemiddeld genomen is het in mijn geval een nieuwsmodule, een module om pdf'jes online te zetten (nieuwsbrieven of notules) en forum en een fotoboek worden wel steeds iets populairder.
waarom zou je een forum eigenlijk op een of andere diepe url willen wegstoppen?
Omdat dat gezien de opbouw van de website eventueel handig zou kunnen zijn. Bijvoorbeeld, www.naam.com/support/forum of www.naam.com/products/support/forum.

Mijn eigen mening, ik zet het liefste de modules op een vaste plek, dit is het meest handige vindt ik.
Mocht het in een project anders nodig zijn, dan pas ik dat aan :)

Mijn cms staat nog in de kinderschoenen zullen we maar zeggen ;)
Ik heb een fotoboekje, een nieuwsmodule, pdf-upload module en een klein simpel forumpje. Dit ga ik allemaal uitbreiden. Er zijn op dit moment geen modules die logischerwij niet in de root van mijn website kunnen staan.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017

Parcye

Mr C

De laatste CMS die ik heb gemaakt heeft 'pure' teksts pagina's als basis. Je kunt per pagina echter instellen dat je niet de tekst pagina wil laten zien maar een module of tekst gevolgd door module.

Voorbeeld:
Gastenboek module kun je dus onder ieder menuitem hangen.
Stel je wilt een introductie tekst gebruiken dan maak je een tekstpagina aan gevuld met tekst, stelt deze in ook gastenboek in te laden.

Zo kun je iedere module overal onder hangen.

Zelf ben ik geen voorstander van al die algemene modules om zoveel mogelijk mensen tevreden te stellen. Voor mijzelf werk ik altijd graag met aanpassingen aan standaarden die dichterbij mijn wensen komen.

Simpel voorbeeld is een shop/artikel database. Deze zijn voor mij vaak te algemeen of te uitgebreid en zelden echt passend bij mijn wensen.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Reveller schreef op dinsdag 02 augustus 2005 @ 09:18:
Ik ben nu al een tijdje bezig met mijn eigen cms. In heb mezelf goed ingelezen, en heb ook veel open-source cms'en bekeken voordat ik zelf begon te bouwen.

In het begin denk je "alles moet zo flexibel mogelijk zijn". Maar gaandeweg heb ik bewust flexibiliteit ingeleverd voor gebruiksvriendelijkheid. En daar ben ik tevreden over.

Momenteel zit mijn cms zo in elkaar, dat je alle "modules" (weblog, forum, statistieken, gastenboek, etc.) op elke gewenste plek binnen de website kunt zetten. Je kunt het forum dus plaatsen op website.com/forum of bijvoorbeeld website.com/bedrijf/support/forum.

Een van de cms'en waar ik vooral wat betreft gebruiksvriendelijkheid een groot voorbeeld aan genomen heb, is Manila van het bedrijf Userland. Eigenlijk is hun product meer een weblog dan cms, maar het is vooral de intuitiviteit van het systeem dat ik wilde "kopieren".

Bij Userland zijn ze heel eenvoudig: alle extra modules zitten bij hen op vaste plaatsen: de statistieken op website.com/stats, het forum op /discuss, de surveys op /surveys, de search op /search. Op deze manier is dat weer iets waar de gebruiker niet naar om hoeft te kijken.

Nu begin ik er steeds meer voor te voelen om mijn cms in gebruiksvriendelijkheid aan te passen om ook de eventuele modules op vaste url's te zetten. De belangrijkste redenen hiervoor zijn:
  • hoeveel "modules" gebruikt een gemiddelde website nu eenmaal?
  • waarom zou je een forum eigenlijk op een of andere diepe url willen wegstoppen?
Mijn vragen aan jullie:
  • wat is jouw mening hierover?
  • welke "modules" ondersteunt jouw cms en zijn er modules die je logischerwijs niet in de root van de website kunt zetten?
  • hoe werkt jouw cms op dit gebied?
Wil niet vervelend zijn maar die modules die je gemaakt hebt zijn vrij standaar en worden door door professionele bedrijven cq klanten niet vaak meer gebruikt of zijn daar standaardfunctionaliteit. Eigenlijk zijn er dus nog geen echte modules. Maar als dit gewoon bedoeld is voor jan met de pet en een eigen website dan is dit een leuk projectje

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017

Parcye

Mr C

Verwijderd schreef op dinsdag 02 augustus 2005 @ 09:59:
[...]


Wil niet vervelend zijn maar die modules die je gemaakt hebt zijn vrij standaar en worden door door professionele bedrijven cq klanten niet vaak meer gebruikt of zijn daar standaardfunctionaliteit. Eigenlijk zijn er dus nog geen echte modules. Maar als dit gewoon bedoeld is voor jan met de pet en een eigen website dan is dit een leuk projectje
Hier kan ik het op geen enkele manier in vinden. Ik denk dat ruim 50% misschien zelfs 70% van de MKB zeer goed geholpen is met een 'jan met de pet' oplossing. Bedrijven die standaardfunctionaliteit niet gebruiken hebben daarom vaak een veel te dure oplossing waardoor een site nooit echt van de grond komt omdat ze het ervaren als slechte inverstering.

Als je met professionele bedrijven het grote segment bedoelt (philips, shell, kpn etc), is het inderdaad zo dat ze met maatwerk beter geholpen zijn

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Parcye schreef op dinsdag 02 augustus 2005 @ 10:05:
[...]


Hier kan ik het op geen enkele manier in vinden. Ik denk dat ruim 50% misschien zelfs 70% van de MKB zeer goed geholpen is met een 'jan met de pet' oplossing. Bedrijven die standaardfunctionaliteit niet gebruiken hebben daarom vaak een veel te dure oplossing waardoor een site nooit echt van de grond komt omdat ze het ervaren als slechte inverstering.

Als je met professionele bedrijven het grote segment bedoelt (philips, shell, kpn etc), is het inderdaad zo dat ze met maatwerk beter geholpen zijn
Kan wel zo zijn, maar dit bestaat al in honderden vormen...

Maar even ontopic, ik zou categorieen aanmaken voor modules en ze daar plaatsen. Ook zou ik de modules op in- en uitvoer categoriseren (en de invoer modules fysiek scheiden van de uitvoer om beveiligingsproblemen te voorkomen)....

Iets leuks om trouwens bij te bouwen is het printen van brochures (html -> PDF ofzoiets) die gepersonaliseerd zijn (op naam van de ingelogde persoon)

[ Voor 23% gewijzigd door Verwijderd op 02-08-2005 10:14 ]


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017

Parcye

Mr C

Dat er al duizende CMS systemen zijn is daarom ook niet de discussie. Het gaat om modules van een CMS, hoe, wie wat er waarom.

Ik zelf snap de wens ook niet van nieuwe CMS systemen, toch is en blijft deze.

Maar hoe een ieder met modules om gaat is wel een boeiende discussie.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • littledreamer
  • Registratie: Juni 2002
  • Laatst online: 15-08-2025

littledreamer

Dingen enzo!

Verwijderd schreef op dinsdag 02 augustus 2005 @ 10:07:
[...]


Kan wel zo zijn, maar dit bestaat al in honderden vormen...
Ja, en zolang het werkt is er naar mijn mening niets mis mee. Als een bedrijf er goed mee kan werken en het is wat ze willen ben je toch klaar? Zoals Parcye als zei, het grootste deel van het MKB kan hier prima mee uit de voeten.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Reveller schreef op dinsdag 02 augustus 2005 @ 09:18:
  • waarom zou je een forum eigenlijk op een of andere diepe url willen wegstoppen?
Waarom zou je de mogenlijkheid weghalen als je die er in hebt zitten?

Wat je wel zou kunnen doen is een cms standaart opleveren met alles op een vaste plek en dan kan de gebruiker het op een later tijdstip verplatsen naar een plek wat deze mooi vind of aan de standaard houden. Maar dan zie ik nog niet waarom de mogenlijkheid van dynamiek weggehaald zou moeten worden ;)

disjfa - disj·fa (meneer)
disjfa.nl


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 03-05 19:19

TheDane

1.618

Ik snap je concept "Elke willekeurige plek binnen de website" icm met padnamen niet. Een padnaam is niet meer dan een "gebruiksvriendelijke" representatie, in dit geval om een pseudo structuur aan te geven binnen je site/cms.

Kijk eens naar Drupal, een modulair cms wat ook met eigengemaakte modules uit te breiden is.

Dit cms maakt gebruik van bepaalde nodes om naar modules binnen je site te navigeren, bijvoorbeeld site.org/?q=node/1 of site.org/?q=node/2

Daarnaast kun je deze nodes zelf namen geven waardoor je iets krijgt als: site.org/?q=archive of site.org/?q=mycontentitem

Zo geef je je users dus zelf de mogelijkheid om hun 'structuur' te bepalen en namen voor content te kiezen.

  • littledreamer
  • Registratie: Juni 2002
  • Laatst online: 15-08-2025

littledreamer

Dingen enzo!

TheDane schreef op dinsdag 02 augustus 2005 @ 10:13:
Ik snap je concept "Elke willekeurige plek binnen de website" icm met padnamen niet. Een padnaam is niet meer dan een "gebruiksvriendelijke" representatie, in dit geval om een pseudo structuur aan te geven binnen je site/cms.

Kijk eens naar Drupal, een modulair cms wat ook met eigengemaakte modules uit te breiden is.

Dit cms maakt gebruik van bepaalde nodes om naar modules binnen je site te navigeren, bijvoorbeeld site.org/?q=node/1 of site.org/?q=node/2

Daarnaast kun je deze nodes zelf namen geven waardoor je iets krijgt als: site.org/?q=archive of site.org/?q=mycontentitem

Zo geef je je users dus zelf de mogelijkheid om hun 'structuur' te bepalen en namen voor content te kiezen.
Drupal ziet er leuk uit, goede tip! Vooral kijkend naar de module opbouw.
Het lijkt alleen meer een weblog vindt ik.

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verwijderd schreef op dinsdag 02 augustus 2005 @ 10:07:
[...]Iets leuks om trouwens bij te bouwen is het printen van brochures (html -> PDF ofzoiets) die gepersonaliseerd zijn (op naam van de ingelogde persoon)
Leuk idee, dank je! Verder ben ik het met je eens dat er al honderden cms'en zijn die jij ws. als net-niet ervaart (want: niet enterprise class). Maar zoals gezegd, 70% van de MKB bedrijven kan zeker met een Manila-achtige oplossing uit de voeten. Ik denk nog wel meer - onder andere de Erasmus Universiteit (RSM) heeft een tijd met succes op Manila gedraaid. En laat van alle bedrijven nu 95% onder het MKB vallen :)

En bij grotere bedrijven wordt ook nog steeds vaak met verschillende systemen naast elkaar gewerkt - voor het bedrijf van mijn vriendin (grote multinational in olie / steenkolen) heb ik een klein intranet neergezet voor alle nederlandse juristen van een bepaalde tak. Je hebt het dan over plm. 100 man en dat valt prima op te vangen met met een zelfgeknutseld php systeempje.

Terugkomend op Drupal - dat systeem is gebouwd vanuit een "alles-is-een-node"-visie. Met andere woorden: zowel weblog posts als "gewone" verhalen als bestanden als plaatjes als [etc] wordt in 1 tabel opgeslagen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  `nid` int(10) unsigned NOT NULL auto_increment,
  `type` varchar(16) NOT NULL default '',
  `title` varchar(128) NOT NULL default '',
  `uid` int(10) NOT NULL default '0',
  `status` int(4) NOT NULL default '1',
  `created` int(11) NOT NULL default '0',
  `changed` int(11) NOT NULL default '0',
  `comment` int(2) NOT NULL default '0',
  `promote` int(2) NOT NULL default '0',
  `moderate` int(2) NOT NULL default '0',
  `teaser` longtext NOT NULL,
  `body` longtext NOT NULL,
  `revisions` longtext NOT NULL,
  `sticky` int(2) NOT NULL default '0',
  `format` int(4) NOT NULL default '0',

Opzich is het wel helder, maar ga je dan uiteindelijk niet een node in die tabel "proppen" en laat je extra properties weg die eigenlijk wel nodig zijn? Bij mij kun je een weblog-post aan een categorie toekennen. Je kent dat wel: "gepost op datum door die in categorie". Ik zie meteen al geen "category" kolom in Drupals node tabel staan. Die kan ik dan wel toevoegen, maar als ik in de node tabel bv. een verhaal opsla, wil ik die weer niet toe te kennen aan een categorie. Dan laat ik die kolom dus leeg. Er vallen dan wel gaten...

Ik ben blij dat iemand Drupal noemde, want na wat nadere beschouwing blijkt dat Manila ook zo werkt: het format van een "news", "story" of "image" post is hetzelfde. Zijn er meer mensen die op deze manier werken in plaats van voor elk content type een aparte tabel aan te leggen? Ik ben heel benieuwd!

[ Voor 51% gewijzigd door Reveller op 03-08-2005 10:59 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
* bescheiden kick * :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

Reveller schreef op dinsdag 02 augustus 2005 @ 19:15:
[...]

Leuk idee, dank je! Verder ben ik het met je eens dat er al honderden cms'en zijn die jij ws. als net-niet ervaart (want: niet enterprise class). Maar zoals gezegd, 70% van de MKB bedrijven kan zeker met een Manila-achtige oplossing uit de voeten. Ik denk nog wel meer - onder andere de Erasmus Universiteit (RSM) heeft een tijd met succes op Manila gedraaid. En laat van alle bedrijven nu 95% onder het MKB vallen :)

En bij grotere bedrijven wordt ook nog steeds vaak met verschillende systemen naast elkaar gewerkt - voor het bedrijf van mijn vriendin (grote multinational in olie / steenkolen) heb ik een klein intranet neergezet voor alle nederlandse juristen van een bepaalde tak. Je hebt het dan over plm. 100 man en dat valt prima op te vangen met met een zelfgeknutseld php systeempje.

Terugkomend op Drupal - dat systeem is gebouwd vanuit een "alles-is-een-node"-visie. Met andere woorden: zowel weblog posts als "gewone" verhalen als bestanden als plaatjes als [etc] wordt in 1 tabel opgeslagen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  `nid` int(10) unsigned NOT NULL auto_increment,
  `type` varchar(16) NOT NULL default '',
  `title` varchar(128) NOT NULL default '',
  `uid` int(10) NOT NULL default '0',
  `status` int(4) NOT NULL default '1',
  `created` int(11) NOT NULL default '0',
  `changed` int(11) NOT NULL default '0',
  `comment` int(2) NOT NULL default '0',
  `promote` int(2) NOT NULL default '0',
  `moderate` int(2) NOT NULL default '0',
  `teaser` longtext NOT NULL,
  `body` longtext NOT NULL,
  `revisions` longtext NOT NULL,
  `sticky` int(2) NOT NULL default '0',
  `format` int(4) NOT NULL default '0',

Opzich is het wel helder, maar ga je dan uiteindelijk niet een node in die tabel "proppen" en laat je extra properties weg die eigenlijk wel nodig zijn? Bij mij kun je een weblog-post aan een categorie toekennen. Je kent dat wel: "gepost op datum door die in categorie". Ik zie meteen al geen "category" kolom in Drupals node tabel staan. Die kan ik dan wel toevoegen, maar als ik in de node tabel bv. een verhaal opsla, wil ik die weer niet toe te kennen aan een categorie. Dan laat ik die kolom dus leeg. Er vallen dan wel gaten...

Ik ben blij dat iemand Drupal noemde, want na wat nadere beschouwing blijkt dat Manila ook zo werkt: het format van een "news", "story" of "image" post is hetzelfde. Zijn er meer mensen die op deze manier werken in plaats van voor elk content type een aparte tabel aan te leggen? Ik ben heel benieuwd!
Ik neem aan dat je een DB per module gebruikt en een overkoepelende DB?

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verwijderd schreef op woensdag 03 augustus 2005 @ 16:54:
[...]
Ik neem aan dat je een DB per module gebruikt en een overkoepelende DB?
Ik heb nu een aparte tabel voor elke content type, bijvoorbeeld een tabel "stories":
code:
1
2
3
4
5
6
  `sid` int(3) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL default '',
  `body` longtext NOT NULL,
  `created` int(10) NOT NULL default '0',
  `changed` int(10) NOT NULL default '0',
  `uid` int(2) NOT NULL default '0',

een story is een pagina met daarop alleen tekst. Daarnaast heb ik bv. een tabel weblog_posts:
code:
1
2
3
4
5
6
7
8
9
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `body` longtext NOT NULL,
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `t_created` int(10) NOT NULL default '0',
  `modified` timestamp(14) NOT NULL,
  `category` int(3) NOT NULL default '1',
  `uid` int(2) NOT NULL default '0',

Wat Drupal doet is 1 tabel "nodes" aanmaken, waarin je met "type" aangeeft of de node een "story" of een "weblog_post" is. Vervolgens kun je een reeks properties van zo'n node invullen: body, created, uid (user id), etc. Je maakt van je content types een soort eenheidsworst. Bij Drupal worden zelfs files en images in diezelfde nodes-tabel opgeslagen.

Mijn vraag is dus of dit een gangbare manier van werken is. Ik snap overigens niet precies wat je bedoelt met een overkoepelende DB? Niet-content tabellen zoals een settings-tabel en een user-tabel?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

Over URL's: Het achterliggende systeem mag ABSOLUUT niet de beslissende vorm van de URL zijn:
Standaard regel voor URL: Deze mag NOOIT veranderen, omdat dat problemen kan meebrengen. En verder mag de URL geen beschrijving van het achterliggende systeem zijn (CMS) maar moet het een beschrijving zijn van wat er te vinden is. Het achterliggende systeem kan namelijk nogal vlug veranderen, maar een categorizering zal niet zo snel veranderen (bijvoorbeeld, een document over een zaak voor de juristen die over bouwvergining ging en in 2005 afgesloten werd: kan zijn als: http://site/doc?id=3445 maar kan ook: http://site/juristen/2005/document/bouwvergunning_plaats.

Verder zal ik ook extensies weglaten: .php, .pl, .htm zecht iets over het systeem, mischien verandert ooit het systeem, maar blijft het document gewoon bereikbaar: toch zal niemand het vinden als jij het document.htm noemt, en het nu voort document.php heet.

Verder:
Dus als bij een bedrijf het beter past om het forum bij juristen/forum te plaatsen (of mischien wel meerdere fora: juristen/forum, productie/forum bijvoorbeeld) dan is het jouw taak om dat om te vormen naar 1 url waar jouw CMS iets mee kent. Elke server kan dat wel (bijvoorbeeld mod_rewrite voor Apache).

Dan krijg je zoiets intern: juristen/forum word forum/cat/1 en productie/forum word forum/cat/2.

Mocht dat bedrijf ooit overstappen: dan kan dat, en verder is een juristen/forum meer zeggend als forum/cat/1. Daarboven komt dat forum/cat/1 iets zecht over de werking van het forum (namelijk ingedeeld in deelforums). Nou zal dat achterliggende systeem altijd min of meer zichtbaar blijven (denk bijvoorbeeld aan juristen/forum/topic/1234, die 1234 zal waarschijnlijk een tabel-id zijn, maar dat soort dingen zijn niet te verschuilen, dat gaat wel heel ver).


Klintk msichien verwarrend, maar ik heb ook meerdere verhalen door elkaar verteld.

*Is ook bezig met CMS, maar houd zich niet zo bezig met uitwerking CMS maar vooral met de core, de frameworks worden steeds verbeterd en aangescherpt. En evrder houd ik me veel bezig met design van alles, overdenken. :) En dan is het proggen een eitje, gewoon even je gedachten uittypen, beetje debuggen klaar is Hel Gast.


Over databases: mja, nodes is niet echt efficient en flexibel, ik houd het gewoon op enkele systeemtabellen (user, en wat errortabellen voor mij als devver), verder kan elke module eigen tabellen aanmaken (bijvoorbeeld een profiel tabel, tabelletje voor een gastenboek en dergelijke). Verder worden bestanden (binary) opgeslagen in een aparte directory. (met technisch egzien: Nieuwe bestandsnaam, en in een tabel de eggevens van het bestand (bescrhijving, type, van welke user ed) opgeslagen).

[ Voor 11% gewijzigd door Verwijderd op 03-08-2005 22:00 ]


  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 21-04 16:00
In een CMS (mag de naam CMS eigenlijk niet dragen) dat ik ooit heb gemaakt heb ik gekozen om alles via een "module loader" te laten lopen.
De fysieke locaties van de modules zijn daar bij niet van belang en kunnen zelfs op een remote server staan. De modules zelf worden gebouwd mbv de api de loader levert. Een beetje op de PHP-Nuke ( :r ) manier dus.

De loader handelt een request ala loader.php?module=moduleName&param=value&.....
De juiste bestanden worden geinclude en de extra get parameters ongecontroleerd door gestuurd naar de module, deze handelt de rest af.

Omdat de locatie van de modules-vergaar-bak (ze staan wel allemaal in een directory) in een variable wordt opgeslagen is de locatie te wijzigen. Waardoor je modules ook prima buiten je docRoot kan plaatsen.

De modules worden geregistreerd in een database, de loader kijkt in de database of een module bestaat en welke rechten de gebruiker daarop heeft. Een voordeel hier van is dat je meerdere installaties naast elkaar kan draaien die gebruik maken van de zelfde modules.

Mod_rewrite zorgt voor mooie en duidelijke urls

[ Voor 4% gewijzigd door Suepahfly op 03-08-2005 22:28 ]


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 28-04 21:25

Wacky

Dr. Lektroluv \o/

Ik ben ook bezig met de laatste puntjes van mijn CMS. Dit CMS bevat naast het paginabeheer ook een activiteitenkalender en een fotoalbum module (en nog een 3-tal andere die niet door de gebruiker te beheren zijn). Door tijdsdruk heb ik het modulaire systeem opgebouwd met includes:

code:
1
 include("/$module_naam/index.php");


Maar hoe ik dit nu netter kan oplossen .. wat meer OO gericht zeg maar :?

Nu ook met Flickr account


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verwijderd schreef op woensdag 03 augustus 2005 @ 21:54:
[...]
Standaard regel voor URL: Deze mag NOOIT veranderen, omdat dat problemen kan meebrengen. En verder mag de URL geen beschrijving van het achterliggende systeem zijn (CMS) maar moet het een beschrijving zijn van wat er te vinden is.
[...]
Dus als bij een bedrijf het beter past om het forum bij juristen/forum te plaatsen (of mischien wel meerdere fora: juristen/forum, productie/forum bijvoorbeeld) dan is het jouw taak om dat om te vormen naar 1 url waar jouw CMS iets mee kent. Elke server kan dat wel (bijvoorbeeld mod_rewrite voor Apache).

Dan krijg je zoiets intern: juristen/forum word forum/cat/1 en productie/forum word forum/cat/2.
[...]
En evrder houd ik me veel bezig met design van alles, overdenken. :) En dan is het proggen een eitje, gewoon even je gedachten uittypen, beetje debuggen klaar is Hel Gast.

Over databases: mja, nodes is niet echt efficient en flexibel, ik houd het gewoon op enkele systeemtabellen (user, en wat errortabellen voor mij als devver), verder kan elke module eigen tabellen aanmaken (bijvoorbeeld een profiel tabel, tabelletje voor een gastenboek en dergelijke). Verder worden bestanden (binary) opgeslagen in een aparte directory. (met technisch egzien: Nieuwe bestandsnaam, en in een tabel de eggevens van het bestand (bescrhijving, type, van welke user ed) opgeslagen).
Dank je wel voor een heel goede uitleg :) Vooral je twee url-argumenten hebben bij mij de twijfel weg genomen.

Ik werk op het moment ook met interne paden. Je kunt dus zowel site.com/juristen/forum als site.com/forum/cat/1 bij mij intikken om naar dezelfde pagina te gaan. Nu zit ik erover te denken om het direct intikken van systeem-paden in de URL afgesloten wordt: site.com/forum/cat/1 zal dus tot een error pagina leiden. Ik weet alleen niet wat dit zou toevoegen behalve dat de achterliggende werking nog beter van de buitenwereld wordt afgescheiden. Wat is jouw mening hierover?

Ik denk dat ik ook maar bij aparte tabellen voor elk content-type (forum item, guestbook entry, ...) ga. Ze verschillen qua properties toch te veel van elkaar om in een generieke tabel te proppen. Al heeft het wel voordelen als alles in 1 tabel staat: "SELECT * FROM nodes WHERE uid = 1" geeft je dan bijvoorbeeld alle content die ooit door user 1 aangemaakt is: dus alle plaatjes, guestbook entries, weblog posts, stories, etc. Dat is veel moeilijker als je alles in aparte tabellen hebt staan. Bovendien: als je een tabel "guestbook" zou aanmaken (de site had eerder nog geen guestbook), moet je al dat soort statistieken-queries ook gaan aanpassen. In het geval dat ik alles in 1 tabel plemp, hoeft dat niet. De nieuwe node types "guestbook-entry" worden door de * in de query gewoon meegenomen. Heeft iemand hier een mening over?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 03-05 23:13

alienfruit

the alien you never expected

Standaard regel voor URL: Deze mag NOOIT veranderen, omdat dat problemen kan meebrengen.
URL mogen gewoon worden veranderd hoor, zolang de oude urls maar ook blijven werken. Anders zit je met een probleem bij sommige websites waarbij gebruiken van nummers ipv teksten.

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
alienfruit schreef op donderdag 04 augustus 2005 @ 12:05:
[...]
URL mogen gewoon worden veranderd hoor, zolang de oude urls maar ook blijven werken. Anders zit je met een probleem bij sommige websites waarbij gebruiken van nummers ipv teksten.
Cool URIs don't change ;)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

Reveller schreef op woensdag 03 augustus 2005 @ 17:33:
[...]

Ik heb nu een aparte tabel voor elke content type, bijvoorbeeld een tabel "stories":
code:
1
2
3
4
5
6
  `sid` int(3) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL default '',
  `body` longtext NOT NULL,
  `created` int(10) NOT NULL default '0',
  `changed` int(10) NOT NULL default '0',
  `uid` int(2) NOT NULL default '0',

een story is een pagina met daarop alleen tekst. Daarnaast heb ik bv. een tabel weblog_posts:
code:
1
2
3
4
5
6
7
8
9
  `id` int(6) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `body` longtext NOT NULL,
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `t_created` int(10) NOT NULL default '0',
  `modified` timestamp(14) NOT NULL,
  `category` int(3) NOT NULL default '1',
  `uid` int(2) NOT NULL default '0',

Wat Drupal doet is 1 tabel "nodes" aanmaken, waarin je met "type" aangeeft of de node een "story" of een "weblog_post" is. Vervolgens kun je een reeks properties van zo'n node invullen: body, created, uid (user id), etc. Je maakt van je content types een soort eenheidsworst. Bij Drupal worden zelfs files en images in diezelfde nodes-tabel opgeslagen.

Mijn vraag is dus of dit een gangbare manier van werken is. Ik snap overigens niet precies wat je bedoelt met een overkoepelende DB? Niet-content tabellen zoals een settings-tabel en een user-tabel?
Ja das precies wat ik bedoel...

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verwijderd schreef op donderdag 04 augustus 2005 @ 12:15:
[...]
Ja das precies wat ik bedoel...
Betekent dat ook dat jij gebruik maakt van een generieke tabel waar alle content in opgeslagen wordt? Wat zijn daarvan de voordelen? Ben je ook nadelen tegen gekomen (zoals: niet elk content type zal een property "category" hebben en die kolom is dan leeg - is dat niet slordig?)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 01-05 17:36
Wat je wel kunt doen is gebruik maken van een soort van 'decorator pattern'. Wat je doet is een tabel met nodes waarin alle nodes worden toegevoegd. Alle extra velden, die specifiek zijn voor een bepaalde soort nodes, gooi je niet in dezelfde tabel maar daar maak je een extra tabel voor aan.

Je krijgt dan dus meerdere tabellen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Nodes
nodeId nodeType ... etc
1      blogPost
2      story
3      plaatje
4      blogPost

BlogPosts
nodeId postContent ... etc
1      Blaat test spef melp
4      Test melp spef blaat

Plaatjes
nodeId plaatjeUrl ... etc
3      weetikveel/spef.jpg

Stories
nodeId storyContent ... etc 
2      Dit is een verhaal spef.


Maar ik verwacht eigenlijk dat ze daar ook al gebruik van maken eigenlijk. (.edit: bij drupal dus)

[ Voor 5% gewijzigd door Mithrandir op 04-08-2005 13:06 ]

Verbouwing


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 03-05 23:13

alienfruit

the alien you never expected

Op die manier kan je dus nooit de URI wijzigen van bestaande systemen <g>
Als je URI niet kan wijzigen zit je dus met het probleem als je de site click2music.nl heb en URIs wilt wijzigen naar: www.click2music/artiest/christinaaguilera. Dat je dan een probleem omdat dus volgens jou niet mag cq kan. Onzin natuurlijk je moet een brug kunnen slaan tussen de nieuwe URIs en de oude URIs van de oude systemen.

[ Voor 70% gewijzigd door alienfruit op 04-08-2005 13:30 ]


Verwijderd

Reveller schreef op donderdag 04 augustus 2005 @ 12:27:
[...]

Betekent dat ook dat jij gebruik maakt van een generieke tabel waar alle content in opgeslagen wordt? Wat zijn daarvan de voordelen? Ben je ook nadelen tegen gekomen (zoals: niet elk content type zal een property "category" hebben en die kolom is dan leeg - is dat niet slordig?)
Ik heb een admin database die CMS overkoepelend is, en per contenttype (bv, forum of chat) een database, die link ik met een indeling tabel in de admin base.
Nee, ik gebruik per soort element (ik werk met elementen) een aparte tabel. (een element is dan weer een onderdeel van een contenttype).

De contenttypes zelf staan in een tabel (tblContentTypes) in de admin base en hebben een id, een naam, een technaam en een beschrijving. De onderliggende tabel (tblContentElements) linkt dan weer naar die tabel. enz.

[ Voor 15% gewijzigd door Verwijderd op 04-08-2005 13:46 ]


Verwijderd

alienfruit schreef op donderdag 04 augustus 2005 @ 13:25:
Op die manier kan je dus nooit de URI wijzigen van bestaande systemen <g>
Als je URI niet kan wijzigen zit je dus met het probleem als je de site click2music.nl heb en URIs wilt wijzigen naar: www.click2music/artiest/christinaaguilera. Dat je dan een probleem omdat dus volgens jou niet mag cq kan. Onzin natuurlijk je moet een brug kunnen slaan tussen de nieuwe URIs en de oude URIs van de oude systemen.
Maar als je bij opzetten nieuw systeem de keuze hebt, kun je beter een zo systeem-onafhankelijke URI-Schema bedenken. (en zorgen dat je oude URLS ergens uitkomen, want niets is irritanter als je zoekt naar bijvoorbeeld een product te kopen en je komt via Google op een dode link op de site van jouw winkel, daar onder staat een werkende link van de concurrent: Dan ga ik kopen bij de concurrent als zijnde niet verzoekende consument)


Hoe ik Databases doe:

Grofweg:
- Systeem tabellen
bestaande uit:
- bantabel
- user tabel (permissies, wachtwoord, gebruikersnaam, primair email en ID)
- content: Alle systeemcontent
- systemerror: Alle waarschuwingen van het systeem ("onmogelijke foutmeldingen")
- usererror: Fouten van gebruikers (bijvoorbeeld forms verkeerd ingevuld, kan eigenlijk niet voorkomen, maar voor hackersattempts op te vangen word met behulp van deze tabel auto-bans gedaan).

In content bevat zich de raportage van de foutmeldingen die zijn gelogd in systemalert, systemerror en useralert. Ook kunnen daar comments worden gemaakt bij deze fouten (bijvoorbeeld een developer die een opmerking maaakt over de oorzaak van een systemerror), en kan de status verandert worden.

Het mooie: Met de tabel content kan ik bij elke bewerking een eventueel commentaar plaatsen/meerdere commentaars plaatsen.

- Beheertabellen
- content
- message
- que
- bin
Voor moderators, nieuwsposters, admins (en dergelijke functies bij andere CMS toepassingen.
Content bevat alle "tekst", Que is de rij van niet opgepakte berichten (bijvoorbeeld een topic report, een nieuwspost of een bericht van de moderators tot blokkade van een persoon naar de admins. Verder vallen hier ook featurerequests en user bugreports onder voor de devvers.). Bin is een 'bak' die bijhoud wie met welk bericht bezig is. Verder kan aan elk bericht comments gehangen worden en kunnen ze van status veranderen.

- Usertabellen
- puser: Profiel user
- content
- gb
- forums
- fthreads
- fposts

Bij usertabellen word alle data in content opgeslagen met een Module ID (zodat alle gegevens tegelijkertijd doorzoekbaar zijn). Verder bevatten de apparte tabellen voor de modules (GB voor gastenboek, forum, fthreads en fpost voor forums) alleen maar Gelinkte ID's die uiteindelijk aankomen bij een enthry in de content-tabel. Maar aan een content-entry kan je ook denken aan een beschrijving van een document voor een documetnbeheersfunctie op een intranet.

Dus kort gezecht:
- Elk deel van mijn CMS heeft een eigen content-tabel, dus drie tabellen: Systeemcontent, Beheerscontent en usercontent. Dit om te zorgen dat alles netjes doorzoekbaar is, en een ruwe filter tussen de user, beheer en systeem-deleb van het CMS.
- De weergave, structuur, en relaties van een content-entry word bepaald door een berg andere tabellen. Denk bijvoorbeeld:

relaties:
content: heeft een user ID -> verbonden aan de systemuser tabel
content: heeft een module ID -> geeft aan welke module
content: heeft een timestamp: voor relaties met betrefende de tijd
content heeft een content ID -> daar kan naar verwezen worden in een tabel fposts: welke posts horen er in thread x
content heeft een reverse ID: Voor versie opslag: als bijvoorbeeld in een forum het bericht #3334 word geedit dan blijft de huidige content bestaan, en word er een nieuwe content aangemaakt. Het forum verwijst naar de nieuwe ID, maar als men de content doorzoekt naar forum post #3334 zal men dus meerdere posts vinden, dat is vooral handig voor de beheerders

Verder heeft content een permissie (nu nog 32 bit integer, geeft aan voor wie hij bekijkbaar is)

en heeft content een element: text: om de uiteindelijke text in op te slaan


(Noot: er zijn wel enkele andere tabellen met 'content', denk aan een puser: een userprofiel tabel, of in mijn documentenopslagtabel voor op intranet:
die heeft een link naar content en zelf de text naar het interne pad in het systeem voor het document).

[ Voor 9% gewijzigd door Verwijderd op 05-08-2005 00:28 ]


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mithrandir schreef op donderdag 04 augustus 2005 @ 12:42:
Wat je wel kunt doen is gebruik maken van een soort van 'decorator pattern'. Wat je doet is een tabel met nodes waarin alle nodes worden toegevoegd. Alle extra velden, die specifiek zijn voor een bepaalde soort nodes, gooi je niet in dezelfde tabel maar daar maak je een extra tabel voor aan.
Dank je wel voor een perfecte uitleg. Ik snap nu veel beter hoe het toch kan dat bij sommige CMS'en alles met maar 1 node_id wordt aangeduid :)
Maar ik verwacht eigenlijk dat ze daar ook al gebruik van maken eigenlijk. (.edit: bij drupal dus)
Ben net eens in Drupal gedoken, en idd - niet-algemene velden staan in aparte tabellen.

Hel Gast, deze gast die even zijn hele CMS uit de doeken doet _/-\o_ Ik ga het eens goed nalopen.

offtopic:
"Rij" = queue, niet que :)

[ Voor 11% gewijzigd door Reveller op 05-08-2005 16:07 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

Reveller schreef op vrijdag 05 augustus 2005 @ 16:04:
Ben net eens in Drupal gedoken, en idd - niet-algemene velden staan in aparte tabellen.

Hel Gast, deze gast die even zijn hele CMS uit de doeken doet _/-\o_ Ik ga het eens goed nalopen.

offtopic:
"Rij" = queue, niet que :)
Mja allemaal voorbeeldjes, in me CMS heet het toch allemaal anders, en zit wet net wat anders in elkaar :) maarja, gewoon het idee achter vrij geven mag toh best wel?

Maar het contentsysteem komt in de buurt van dat ding van Mithrandir

Ik zeg ook niet dat mijn opbouw voor jouw toerijkend is of compleet of mischien te uitgebreid, maar het eenigste wat echt belangrijk is bij het maken van een CMS is natuurlijk het complete design, het coden. Das piece-of-cake, maar als je een ondoordacht uitgangspunt/design hebt, dan blijf je hacken op hacken, en worden uitbreidingen hacks op je bestaande systeem (bijvoorbeeld bij veel phpBB based website-CMS'jes die zijn gehackt om de phpBB tabel), mischien wel werkzaam, maar uitbreidbaar?

Dus, voordat je echt gaat werken: Maak een zo compleet mogelijk design, bedenk hoe je de basisdingen gaat doen (Invoer, verwerking, uitvoer >> Template systeem? Database Systeem? Sessies? Foutafhandelingen? Opslag bestanden? Opbouw modules?... enz, enz), Ga daarna voor basisdingen een standaard API schrijven (denk bijvoorbeeld aan een sessiehandler die alle checks doet, een databasehandler die zorgt dat jouw gegevens veilig in de DB komen, als je gaat templaten een goede template-beest). Ga daarna pas echt coden, en daarna optimizen, testen en dergelijke.

[ Voor 49% gewijzigd door Verwijderd op 05-08-2005 16:16 ]

Pagina: 1