[PHP] Hoe zetten jullie bij voorkeur een dyn site op?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 22-06 16:52
Hoe zetten jullie bij voorkeur een dynamische website op, evt met extra functionaliteit (scripts die niet vanuit een browser worden aangeroepen maar b.v. vanuit een applicatie om iets door te geven aan de site)?

Zelf gebruik ik vaak objecten die overeenkomen met de dataklasses. Uiteraard kennen deze extra functie om b.v. checks te doen etc.

Daarnaast maak ik dan vaak de template feeders, deze halen de gegeven uit de bovengenoemde objecten zodat ze kunnen worden getoond dmv een template.

Het afhandelen van navigatie requests (b.v. een menu) doe ik d.m.v. een divider. Deze kijkt naar het gekozen menu item en geeft de daarbij behorende pagina terug voor verdere verwerking (b.v. home geeft de homepage terug in het daarvoor behorende frame).

Verder heb ik nog de interface files, deze gebruik ik om data van andere applicaties op te halen. B.v. een export van administratieve gegevens uit een ander pakket.

Dit werkt voor mij op dit moment prima.

Toch ben ik erg nieuwsgierig hoe jullie een "standaar" dynamische website opzetten.

If you are not wiping out you are nog pushing enough...


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Mijn dynamische site is niet echt standaard:
Alles werkt door middel van een object die een object type heeft die aanduid welke code aangesproken moet worden en welke functionaliteit het heeft. Deze functionaliteit haalt vervolgens de bijbehorende templates op (werkt hetzelfde als TemplateToolkit in Perl) en zet de data hier in. Er wordt hiervoor gebruik gemaakt van multiple inheritance (langzaam!) en autoloading.

De objecten kunnen dus zowel content zijn, maar ook navigatieobjecten, interfaces of een combinatie van meerdere van deze.

Voordelen: alles is dynamisch, 80% van de code is opnieuw te gebruiken voor nieuwe typen (scheelt achteraf development), nieuwe functionaliteit werkt als een "plugin" :)
Nadelen: niet echt makkelijk overzicht te houden, code soms niet leesbaar, opzet is een lang traject, parsetijden zijn niet verschrikkelijk snel en werkt alleen goed onder PHP5

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Ik maak systemen die bestaan uit een aantal modules. Deze modules zijn eigenlijk min of meer op zichzelf staande scriptjes, maar dan met een omgeving aan standaard-klassen, -objecten en -functies die al klaar staan. Per module wordt of output gebouwd in XML die vervolgens aan het eind van de module via XSLT wordt getransformeerd naar XHTML, of (na het verwerken van een database update) wordt je meteen doorgestuurd naar een andere module (voorkomt dubbele database updates door reload in de browser).

Rustacean


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Manuzhai schreef op 11 juni 2004 @ 17:15:
Ik maak systemen die bestaan uit een aantal modules. Deze modules zijn eigenlijk min of meer op zichzelf staande scriptjes, maar dan met een omgeving aan standaard-klassen, -objecten en -functies die al klaar staan. Per module wordt of output gebouwd in XML die vervolgens aan het eind van de module via XSLT wordt getransformeerd naar XHTML, of (na het verwerken van een database update) wordt je meteen doorgestuurd naar een andere module (voorkomt dubbele database updates door reload in de browser).
Ik heb iets vergelijkbaars: ik heb 1 modules/ map, waarin allemaal mappen met modules staan. Modules kunnen dan via een URL of vanuit een andere module worden gebruikt (handig als je bijvoorbeeld een BBParser-module oid hebt). Alle modules gebruiken dezelfde template-class, die X(HT)ML uitpoept aan de hand van XSLT-templates. Ook heb ik extra tags 'toegevoegd' in de XSLT, wat wil zeggen dat je in de XSLT gewoon <pnp:widget name="naamvanmodule" .../> kunt gebruiken om iets uit een module op te halen (denk aan tijd/datum, etc..).

Voor database gebruik ik 1 (abstract) class, en die heeft op dit moment MySQL en SQLite als implementaties. Addslashes zut en dergelijke wordt volledig door het 'framework' geregeld, een SQL-query ziet er dan ook zo uit:

PHP:
1
$db->Query("INSERT INTO `adressen` VALUES(?, ?, ?)",array("Jan","Klaassen","Amsterdam"));


Dat is het wel zo ongeveer... werkt wel lekker :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Erg leuke implementatie van je query! Dat heeft me weer op wat ideeën gebracht! Vraagje: zou je niet beter iets als: {int} {string} kunnen gebruiken? Dan kun je daar ook nog op checken.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
djluc schreef op 11 juni 2004 @ 18:28:
Erg leuke implementatie van je query! Dat heeft me weer op wat ideeën gebracht! Vraagje: zou je niet beter iets als: {int} {string} kunnen gebruiken? Dan kun je daar ook nog op checken.
Wat loop jij achter zeg :p de PEAR::DB class heeft dit al ages. {int} ed. zou je ook kunnen gebruiken, maar wat is er mis met sprintf? Die doet dat soort dingen ook allemaal (met een, voor de leek, iets minder goed leesbare syntax).

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
djluc schreef op 11 juni 2004 @ 18:28:
Erg leuke implementatie van je query! Dat heeft me weer op wat ideeën gebracht! Vraagje: zou je niet beter iets als: {int} {string} kunnen gebruiken? Dan kun je daar ook nog op checken.
Dat is teveel typwerk :) Doordat dit zo simpel werkt is het lekker makkelijk en gebruik ik het ook met plezier :)
PrisonerOfPain schreef op 11 juni 2004 @ 19:11:
[...]

Wat loop jij achter zeg :p de PEAR::DB class heeft dit al ages. {int} ed. zou je ook kunnen gebruiken, maar wat is er mis met sprintf? Die doet dat soort dingen ook allemaal (met een, voor de leek, iets minder goed leesbare syntax).
Ja, ik heb het idee zelf uit Java gejat, die gebruikt dat bij java.sql.PreparedStatement :)

[ Voor 40% gewijzigd door MisterData op 11-06-2004 19:25 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
PrisonerOfPain schreef op 11 juni 2004 @ 19:11:[...]Wat loop jij achter zeg :p de PEAR::DB class heeft dit al ages. {int} ed. zou je ook kunnen gebruiken, maar wat is er mis met sprintf? Die doet dat soort dingen ook allemaal (met een, voor de leek, iets minder goed leesbare syntax).
Ik gebruik geen PEAR:DB ;) Wat bedoel je verder met die sprint_f?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
djluc schreef op 11 juni 2004 @ 19:34:
[...]
Ik gebruik geen PEAR:DB ;)
Ik gebruik het niet meer, is mee veel te log ;)
Wat bedoel je verder met die sprint_f?
http://php.net/sprintf en dan example 3.

[ Voor 3% gewijzigd door PrisonerOfPain op 11-06-2004 19:40 ]


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Ohja, nog een 'framework-ding' waar ik erg veel plezier van heb gehad zijn de volgende functies:

PHP:
1
2
3
4
5
6
requireNumericInput('leeftijd');
requireInput('naam');
requireOneInput('geslacht',array('man','vrouw'));
requireInput('postcode',"/([0-9]){4}( ?)([a-zA-Z]{2})/");

notRequiredInput('hobbies','Geen hobbies');


Deze regelen automagisch addslashes/stripslashes voor je, doen ook valideren en geven netjes een error als er een bepaalde parameter niet is meegegeven.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
PrisonerOfPain schreef op 11 juni 2004 @ 19:39:[...]Ik gebruik het niet meer, is mee veel te log ;)[...]http://php.net/sprintf en dan example 3.
Interessant, daar ga ik eens naar kijken.
MisterData schreef op 11 juni 2004 @ 19:43:Ohja, nog een 'framework-ding' waar ik erg veel plezier van heb gehad zijn de volgende functies:
PHP:
1
2
3
4
5
requireNumericInput('leeftijd');
requireInput('naam');
requireOneInput('geslacht',array('man','vrouw'));
requireInput('postcode',"/([0-9]){4}( ?)([a-zA-Z]{2})/");
notRequiredInput('hobbies','Geen hobbies');
Deze regelen automagisch addslashes/stripslashes voor je, doen ook valideren en geven netjes een error als er een bepaalde parameter niet is meegegeven.
Wat doen die functies dan? Checken die de POST data of die velden binnen zijn gekomen? Of zit er nog meer code achter die op een standaard manier een form genereerd?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
MisterData schreef op 11 juni 2004 @ 19:43:
Deze regelen automagisch addslashes/stripslashes voor je, doen ook valideren en geven netjes een error als er een bepaalde parameter niet is meegegeven.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
interface IValidatable
{
         public function Validate ();
}

class ValidateNumber implements IValidatable
{
         private $Number;
         public function __construct ($Number)
         {
                  $this->Number = $Number;
         }

         public function Validate ()
         {
                  if (!is_Numeric ($this->Number))
                  {
                           return "Geen nummer";
                  }
                  return true;
         }
}

class ValidatePostcode implements IValidatable
{
         private $Postcode;
         public function __construct ($Postcode)
         {
                  $this->Postcode = $Postcode;
         }

         public function Validate ()
         {
                  if (!is_numeric (substr ($this->Postcode, 0, 4)) &&
                      !ctype_alpha( substr ($this->Postcode, -2)) &&
                      strlen ($this->Postcode) != 7)
                  {
                           return "Geen postcode";
                  }
                  return true;
         }
}

$ToValidate['id'] = new ValidateNumber ($_GET['id']);
$ToValidate['postcode'] = new ValidatePostcode ($_POST['postcode']);

foreach ($ToValidate as $Field => $Value)
{
         echo $Value->Validate();
}
?> 

Even een snel voorbeeldje ;)
Zo doe ik dat meestal.

[ Voor 5% gewijzigd door PrisonerOfPain op 11-06-2004 20:05 ]


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
PrisonerOfPain schreef op 11 juni 2004 @ 20:02:
[...]

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
interface IValidatable
{
         public function Validate ();
}

class ValidateNumber implements IValidatable
{
         private $Number;
         public function __construct ($Number)
         {
                  $this->Number = $Number;
         }

         public function Validate ()
         {
                  if (!is_Numeric ($this->Number))
                  {
                           return "Geen nummer";
                  }
                  return true;
         }
}

class ValidatePostcode implements IValidatable
{
         private $Postcode;
         public function __construct ($Postcode)
         {
                  $this->Postcode = $Postcode;
         }

         public function Validate ()
         {
                  if (!is_numeric (substr ($this->Postcode, 0, 4)) &&
                      !ctype_alpha( substr ($this->Postcode, -2)) &&
                      strlen ($this->Postcode) != 7)
                  {
                           return "Geen postcode";
                  }
                  return true;
         }
}

$ToValidate['id'] = new ValidateNumber ($_GET['id']);
$ToValidate['postcode'] = new ValidatePostcode ($_POST['postcode']);

foreach ($ToValidate as $Field => $Value)
{
         echo $Value->Validate();
}
?> 

Even een snel voorbeeldje ;)
Zo doe ik dat meestal.
Ja, dat is de meer 'OO'-manier. Mijn functies zijn iets korter en makkelijker misschien :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//ik doe niet zo leuk met oop e.d.:
//handle userinput for mysql
function ui($input, $type=''){
  switch($type){
    case 'int':
      if($input){
        $input=(is_numeric($input) ? $input : e('NO_INT'));
      }else{
        $input=0;
      }
      break;
  }
  return addslashes($input);
}

$query="SELECT id FROM table WHERE id='".ui($_POST['nummertje'], 'int')."'";

Het origineel is alleen wat uitgebreider een stuurt meteen een error naar de error handler.

[ Voor 22% gewijzigd door djluc op 11-06-2004 21:05 ]

Pagina: 1