[php] Weergeven van HTML-errors

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
Sorry voor de onduidelijke titel, maar ik kan het niet in 1 regel uitleggen.

Ik ben bezig om een site te bouwen in PHP en heb al mijn code in functies staan. Nu staat ook de HTML code in deze functies en echo ik deze. Doordat ik dit doe zie ik niet wat ik eventueel fout doe en het wil nog wel is gebeuren dat ik vergeet een tag af te sluiten of andere foutjes maak.

Nu is mijn vraag of er een simpele manier is om de output te controleren zonder dat ik dit voor iedere functie afzonderlijk moet gaan doen. Ik heb op internet gezocht, maar heb niet echt een oplossing kunnen vinden dus ik hoop dat jullie mij kunnen helpen.

PS. Ik gebruik zend studio 7, maar kan hier niets vinden wat kan wat ik wil. Het enige wat ik tot nu toe kan doen is de site bekijken en de broncode naar zend studio kopiëren.

Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 15-09 20:20
Gewoon systematisch werken of met template engines werken.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
http://validator.w3.org/ :z

Verder: Als je dan toch HTML in functies gaat uitpoepen dan zorg je dat elke functie zélf verantwoordelijk is voor het correct openen, sluiten en nesten van tags in de output. Het is niet bepaald rocket science tenzij je er zélf een puinhoop van maakt.

[ Voor 89% gewijzigd door RobIII op 14-05-2010 20:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

http://validator.w3.org ?

De html op deze manier in je functie zitten ipv. het gebruik van echo maakt het IMO ook een stukje duidelijker:

PHP:
1
2
3
4
5
6
7
8
<?php
function f()
{
   ?>
   <p>Html hier</p>
   <?php
}
?>

Acties:
  • 0 Henk 'm!

  • TheMe
  • Registratie: December 2006
  • Laatst online: 08-07 20:51
Misschien gewoon goed je scripts nalopen en controleren of je nergens een afsluitende tag bent vergeten. En gewoon je bouwsels uitgebreid testen op wat verschillende browsers, fouten in de html code zie je dan snel genoeg.

There is no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 16-09 02:11
Het netste wat ik weet is met Smarty: http://smarty.net.

Daarna bouw je elke pagina in principe zo op:

- Eventuele input van user bekijken, bijv een form of een GET-variabele
- A.d.h.v. die input data verzamelen, berekenen, opslaan, whatever.
- De uitkomst of info assignen aan Smarty
- Smarty een template laten weergeven, welke de HTML voor jou regelt aan de hand van een .tpl-bestand waar bijvoorbeeld dit in staat:

code:
1
2
3
4
5
<html>
<body>
Hoi, {$name|htmlentities}, welkom op mijn site
</body>
</html>


/edit

Waarom gebruik je als beginner eigenlijk niet gewoon Eclipse in plaats van het betaalde Zend Studio? :P Voor zover ik jou begrijp is dit best een - no flame intended - basisvraag dus volgens mij heb jij nog helemaal geen Zend Studio nodig :P

[ Voor 19% gewijzigd door _eXistenZ_ op 14-05-2010 20:27 ]

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 10:24
Begin alsjeblieft weer geen IDE oorlog; de huidige versie van Zend Studio is gebouwd op basis van Eclipse. Lekker laten werken met Zend.

Probeer idd een template engine of, als je dat liever hebt, php-bestanden die je als templates gebruikt. HTML vanuit functies uitpoepen is niet echt een goed begin. Je kan prima een php-bestand includen en zo toch een scheiding tussen je code- en presentatie-laag aan te brengen.

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
Bedankt voor de snelle reacties, ik denk dat ik is ga uitzoeken hoe een template engine in elkaar zit. En ik zal ook is naar clips kijken, want zendstudio werkt niet echt lekker voor mij.

Ps. Ik programmeertaal waarschijnlijk heel erg fout en zou graag is commentaar willen op mijn code, waar kan ik deze het beste posten?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
thriller schreef op vrijdag 14 mei 2010 @ 21:07:
Ps. Ik programmeertaal waarschijnlijk heel erg fout en zou graag is commentaar willen op mijn code, waar kan ik deze het beste posten?
Voor concrete vragen ben je van harte welkom in PRG; voor "kijk, dit is mijn code, wat vinden jullie er van" kun je beter "elders" terecht ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

thriller schreef op vrijdag 14 mei 2010 @ 21:07:
Bedankt voor de snelle reacties, ik denk dat ik is ga uitzoeken hoe een template engine in elkaar zit. En ik zal ook is naar clips kijken, want zendstudio werkt niet echt lekker voor mij.
Zoals hierboven al gezegd zijn de laatste nieuwe versies van Zend Studio allemaal op Eclipse gebaseerd dus overstappen op Eclipse gaat je bar weinig voordeel opleveren. Sowieso zonde van je duur betaalde Zend Studio-licentie. ;)
Ps. Ik programmeertaal waarschijnlijk heel erg fout en zou graag is commentaar willen op mijn code, waar kan ik deze het beste posten?
Je programmeert in elk geval fout als je uitvoer (echo, print, etc.) overal verspreid in je code hebt staan. Je wil dat zoveel mogelijk scheiden van elkaar, bijvoorbeeld met Smarty maar elk ander willekeurig templatingsysteem voldoet ook; zelfs simpele includes van PHP-files. Lees je eens in in de materie rond templates in PHP.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 24-08 19:45
Inderdaad ofwel met templates werken ofwel met een class/functie die HTML automatisch correct neerzet.

Het is heel eenvoudig te doen:

code:
1
2
3
function print_tag_img ($src, $alt) {
   echo '<img src="'.$src.'" alt="'.$alt.'" />';
}


Zie hier voor een voorbeeld met functies die verkeerde html tags uitfilteren:

http://atomicbackup.svn.s...p?revision=32&view=markup

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 10:20
NMe schreef op zaterdag 15 mei 2010 @ 02:21:
[...]
Zoals hierboven al gezegd zijn de laatste nieuwe versies van Zend Studio allemaal op Eclipse gebaseerd dus overstappen op Eclipse gaat je bar weinig voordeel opleveren. Sowieso zonde van je duur betaalde Zend Studio-licentie. ;)
Mocht je alsnog willen kijken naar een andere IDE kijk dan eens naar de volgende: PHPEdit, PHPDesigner en NetBeans.

Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
Guru Evi schreef op zaterdag 15 mei 2010 @ 02:47:
Inderdaad ofwel met templates werken ofwel met een class/functie die HTML automatisch correct neerzet.

Het is heel eenvoudig te doen:

code:
1
2
3
function print_tag_img ($src, $alt) {
   echo '<img src="'.$src.'" alt="'.$alt.'" />';
}


Zie hier voor een voorbeeld met functies die verkeerde html tags uitfilteren:

http://atomicbackup.svn.s...p?revision=32&view=markup
Dit klinkt wel leuk en moet goed uit te voeren zijn. Ik ga maar is functies maken die alle html afhandelen. Scheelt ook weer veel tabellen maken.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
thriller schreef op zaterdag 15 mei 2010 @ 10:56:
[...]


Dit klinkt wel leuk en moet goed uit te voeren zijn. Ik ga maar is functies maken die alle html afhandelen. Scheelt ook weer veel tabellen maken.
Je zou misschien beter kunnen kijken naar een systeem dat zoiets al regelt voor je, in plaats van zelf dat soort functies te schrijven.

Hierboven werd al Smarty genoemd, wat ik persoonlijk een beetje poep vind, maar aangezien je Zend Studio gebruikt zou je ook eens kunnen kijken naar Zend_View uit het Zend Framework. Daar zitten al dat soort mogelijkheden al in.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

thriller schreef op zaterdag 15 mei 2010 @ 10:56:
[...]

Dit klinkt wel leuk en moet goed uit te voeren zijn. Ik ga maar is functies maken die alle html afhandelen. Scheelt ook weer veel tabellen maken.
Waarom negeer je nou het templatingverhaal voor iets dat veel minder krachtig is? Alleen omdat hij een letterlijk voorbeeld geeft en de mensen die "templating" roepen niet? Ga je eens gewoon inlezen, want de suggestie waarvan je nu zegt dat je hem gaat proberen is bijna net zo erg als gewoon je code inline echoen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Als je de php extensie tidy gebruikt, kan je die inzetten om je html te controleren. In ZF heb ik een frontcontroller plugin geschreven welke op het einde de complete response in tidy zet en alle errors eruit vist, om die in een lijstje te tonen in de firebug console. Zie je precies waar problemen met malformed html zit :)

Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
NMe schreef op zaterdag 15 mei 2010 @ 12:36:
[...]

Waarom negeer je nou het templatingverhaal voor iets dat veel minder krachtig is? Alleen omdat hij een letterlijk voorbeeld geeft en de mensen die "templating" roepen niet? Ga je eens gewoon inlezen, want de suggestie waarvan je nu zegt dat je hem gaat proberen is bijna net zo erg als gewoon je code inline echoen. ;)
Ik negeer het eigenlijk omdat ik er weinig van snap. het voorbeeld is simpel en snap ik gewoon. Ik heb zend view gedownload en snap gewoon niet hoe dit werkt.

Daarbij heb ik voor dit project niet de tijd om mij weken lang te verdiepen in templates.

Zodra ik tijd heb ga ik dit zeker wel doen, maar voor nu wil ik gewoon zoiets als in het voorbeeld, waar ik een functie kan aanroepen met wat parameters die dan de rest voor mij doet.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dit is ook gewoon een template hoor, en daar hoef je echt geen weken in te stoppen om het te begrijpen. ;)
PHP: index.php
1
2
3
4
5
6
$template['title'] = 'Dit is mijn website';
$template['pageContents'] = '<p>Lorem ipsum dolor sit amet.</p>';

extract($template);

require 'index.template.php';

PHP: index.template.php
1
2
3
4
5
6
7
8
9
<html>
  <head>
    <title><?php echo $title; ?></title>
  </head>
  <body>
    <h1><?php echo $title; ?>
    <?php echo $pageContents; ?>
  </body>
</html>

Die functie-aanroepen zijn (no offense, Guru Evi) een waardeloos principe waarmee je alle kracht van HTML eigenlijk verliest omdat je totaal geen flexibiliteit meer hebt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
En nog een specifiek Zend_View voorbeeld:
PHP: script.php
1
2
3
4
5
6
$article = new Blog_Article;
$article = $article->find($id);

$view = new Zend_View();
$view->article = $article;
$view->render('template.phtml');

PHP: template.phtml
1
2
3
4
5
<h1><?= $this->article->title?></h1>

<p><?= $this->article->body?></p>

<div>Door <?= $this->article->author?> op <?= $this->article->datetime?></div>
Uiteindelijk verschilt het weinig, het principe blijft hetzelfde :)

Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 16-09 02:11
NMe schreef op zaterdag 15 mei 2010 @ 12:36:
[...]

Waarom negeer je nou het templatingverhaal voor iets dat veel minder krachtig is? Alleen omdat hij een letterlijk voorbeeld geeft en de mensen die "templating" roepen niet?
Ik wel ;)

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • SvMp
  • Registratie: September 2000
  • Niet online
Ik gebruik ook een soort template.
Ik ben geen fan van het gebruik van directe HTML-output met tussendoor stukjes PHP. Allemaal echo's komt de overzichtelijkheid ook niet ten goede.

Ik heb het opgelost met een Heredoc-string. Als je nog niet weet wat het is, het staat in de PHP manual en is soms verrekte handig.

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
      echo <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- (c)2010 Mijnwebsite -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>{$this->strTitel}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="mijnwebsite.css" type="text/css" />
  </head>
  <body>
    <div id="header">
      <div id="titel">Mijnwebsite</div>
    </div>
    <div id="minHeight"></div>
    <div id="outer">
      <div id="inner">
        <div id="menu">
{$this->strMenubalk}        </div>
        <div id="inhoud">
{$this->strInhoud}        </div>
      </div> <!-- end inner div -->
      <div id="clearfooter"></div> <!-- to clear footer -->
    </div> <!-- end outer div -->
    <div id="footer">{$this->strFooterLinks}
      <div style="margin: 4px; text-align: center; font-size: 16px;">(c)2010 Mijnwebsite</div>
    </div>
{$this->strDebug}
  </body>
</html>
EOT;


Zoals je ziet, net zo overzichtelijk als gewone HTML. De dynamische onderdelen worden er tussengezet. Ik heb van verschillende methodes (losse echo's, HTML met PHP-tags er tussen, template in string en met strreplace onderdelen invoegen) de performance gemeten, en deze werkwijze staat ook qua performance aan de top. Dit voorbeeld heb ik eenvoudig gehouden, maar je kunt er nog veel meer onderdelen aan toevoegen, bijv. JavaScript (dat dan gelijk mooi op één plek staat).

Dit garandeert echter nog geen perfecte uitvoer. Het geeft enkel een goede structuur om vanuit te werken. De onderdelen, in bovenstaande voorbeeld het menu en de hoofd-inhoud, bevatten ook tags. Regelmatig controleren met een validator of functies schrijven die de tags genereren. Houd het echter wel vooral simpel.

[ Voor 3% gewijzigd door SvMp op 16-05-2010 15:51 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb persoonlijk een beetje moeite met advies aannemen van iemand die <div id="titel">Mijnwebsite</div> schrijft in plaats van <h1>Mijnwebsite</h1>. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op zondag 16 mei 2010 @ 16:36:
Ik heb persoonlijk een beetje moeite met advies aannemen van iemand die <div id="titel">Mijnwebsite</div> schrijft in plaats van <h1>Mijnwebsite</h1>. ;)
Och, op zich valt het nog mee, een h1 moet je ook niet willen gebruiken voor de titel van de website ;)
Maar ik ben het eens met je punt, ik zie alleen maar <div><div><div> (waaronder 2 lege), en inline CSS waar dat totaal niet nodig is.
Voor een "menu div" hebben we al map.

Acties:
  • 0 Henk 'm!

  • afraca
  • Registratie: April 2009
  • Laatst online: 13-08 16:46

afraca

Open Source!

Als je echt zoveel moeite hebt met valid HTML schrijven kan je ook gebruiken van iets als Markdown (waar ik overigens nu van zie dat het misschien wat outdated is, maar er was een up-to-date fork érgens op internet, laatste update, 10-10-09). Als je dan nog fouten maakt... ;)

En ochja, eens met hierboven, templates :Y , Guru Evi Guru Evi's "oplossing" :N

[ Voor 21% gewijzigd door afraca op 16-05-2010 17:01 ]

IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB


Acties:
  • 0 Henk 'm!

Verwijderd

Guru Evi schreef op zaterdag 15 mei 2010 @ 02:47:
Inderdaad ofwel met templates werken ofwel met een class/functie die HTML automatisch correct neerzet.

Het is heel eenvoudig te doen:

code:
1
2
3
function print_tag_img ($src, $alt) {
   echo '<img src="'.$src.'" alt="'.$alt.'" />';
}


Zie hier voor een voorbeeld met functies die verkeerde html tags uitfilteren:

http://atomicbackup.svn.s...p?revision=32&view=markup
Dit kan zelfs iets netter :)
PHP:
1
2
3
function print_tag_img ($src, $alt="") {
   echo "<img src=\"$src\" alt=\"$alt\" />";
}


Natuurlijk zal je ook voor templates kunnen kiezen, maar ja, dat is nog altijd een keuze.

Heel handig lees-stuk: http://php.net/manual/en/language.types.string.php

[ Voor 10% gewijzigd door Verwijderd op 16-05-2010 17:16 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Kap eens met die vieze functie voorkauwen. Overigens vind ik de laatste codestyle niet netter (niet mijn pers voorkeur), en als je nou echt iets netter wilt doen, escape dan de variabelen, zodat een quoteje in de alt tekst niet je hele html verneukt. :z

{signature}


Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
Oke, maar wat is nou precies het voordeel van bijvoorbeeld zend view?

Zoals ik het zie in dit voorbeeld, moet je gewoon zelf iedere keer alle html schrijven en verspreidt je de code over 2 pagina's in plaats van 1.

Ik zal wel heel dom overkomen, maar ik zie hier niet echt het voordeel van in. Als ik ook naar smarty kijk dan zie ik dat het bedoelt is om php en html te scheiden van elkaar.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het scheiden van je code en je layout is het voordeel. Wat als je over 2 jaar je layout compleet overhoop wil gooien zodat je site er anders uitziet, wat is dan makkelijker? Een templatefile wijzigen waar je HTML bijna letterlijk in staat, of je complete PHP-code gaan doorstruinen op zoek naar de overal verspreide echo's? Je hoort je presentatie altijd van je logica te scheiden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • thriller
  • Registratie: Augustus 2003
  • Nu online
NMe schreef op zondag 16 mei 2010 @ 20:12:
Het scheiden van je code en je layout is het voordeel. Wat als je over 2 jaar je layout compleet overhoop wil gooien zodat je site er anders uitziet, wat is dan makkelijker? Een templatefile wijzigen waar je HTML bijna letterlijk in staat, of je complete PHP-code gaan doorstruinen op zoek naar de overal verspreide echo's? Je hoort je presentatie altijd van je logica te scheiden.
Oke dat is idd een hele goede reden. Zo had ik er nog niet naar gekeken. Ik ga er maar is mee aan de slag dan.

Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op zondag 16 mei 2010 @ 20:12:
Het scheiden van je code en je layout is het voordeel. Wat als je over 2 jaar je layout compleet overhoop wil gooien zodat je site er anders uitziet, wat is dan makkelijker? Een templatefile wijzigen waar je HTML bijna letterlijk in staat, of je complete PHP-code gaan doorstruinen op zoek naar de overal verspreide echo's? Je hoort je presentatie altijd van je logica te scheiden.
True, maar.. hele pijnlijke maar... wat als de techniek veranderd? Wat als je bv je site anders wil indelen? Dan moet je dus én je functies aanpassen én je template. En zo lever je dus dubbel werk. Op mijn site doe ik het iets anders, ik gebruik twee files met functies. File 1 met functies die de input verwerkt. File 2 die de uitvoer verzorgt. Beide bestanden worden door de uiteindelijke PHP pagina (index.php) aangeroepen om zo een werkend geheel te vormen.Wil ik de layout anders? Pas ik de index.php & layout_functies.php aan. Wil ik de techniek anders? Pas ik de index.php en de functies.php aan.

(Disclaimer alle functies geven een string variabele terug waarin de uitvoer staat. De uiteindelijke echo staat enkel in het index.php bestand)
Je hoort je presentatie altijd van je logica te scheiden.
Ook hier ben ik het radicaal niet mee eens. In OO behoort een object zijn eigen presentatie te verzorgen. Als je een object op een Form zet hoort dit object door het object getekend te worden op de canvas die het Form biedt. Het Form mag in geen geval gaan bepalen hoe het object getekend moet worden.
(Oké in PHP heb je zulke forms niet, maar ook in PHP kan je Object Oriented werken en dan gaat dit weer wel op)

Ik ben het wel met je eens dat een functie die data verwerkt in principe geen uitvoer mag hebben (muv het tonen van statusmeldingen)

[ Voor 25% gewijzigd door Verwijderd op 16-05-2010 22:09 ]


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
door de presentatie in een draw method te stoppen, per object, is ze nog steeds gescheiden van je logica.. amiright?

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Verwijderd schreef op zondag 16 mei 2010 @ 21:42:
[...]


[...]

Ook hier ben ik het radicaal niet mee eens.
Dat is zeker radicaal ja ;)
Je hebt verschillende soorten logica. Bijvoorbeeld display logica en business logica. NMe heeft het over business logica, die moet je wel zeker scheiden van de layout.

Verwijderd schreef op zondag 16 mei 2010 @ 21:42:
[...]

True, maar.. hele pijnlijke maar... wat als de techniek veranderd? Wat als je bv je site anders wil indelen?
Hoe bedoel je dat? Als in: HTML 5 vs HTML 4?

[ Voor 59% gewijzigd door Sebazzz op 16-05-2010 22:23 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:16

Creepy

Tactical Espionage Splatterer

@kaesve: Klopt ja. Of de scheiding nu over meerdere files plaats vindt, of over meerdere classes, of alleen over meerdere methodes: het is nog steeds een scheiding. sanderev66 is het stiekum dus gewoon toch eens met NMe ;)

@sanderev66: als jij je sites anders in wilt delen, dan zou het aanpassen van de templates alleen (alleen de presentatie) genoeg moeten zijn. Als je daarvoor ook wat logica in je site zou moeten aanpassen die niks met de presantatie te maken heeft dan heb je gewoon je presentatie en logica dus niet gescheiden. Als je overigens echt vindt dat alleen het object zelf zichzelf moet kunnen tekenen, dan zou voor de lol toch eens moeten kijken naar MVC (Model - View - Controller). Dan zijn de data (model), de presentatie (view) en logica (controller) volledig van elkaar gescheiden. Je zal bijv. dezelfde data de ene keer in een cirkel diagram willen weergeven en de volgende keer in een staafdiagram ;) Dus nee, ook in OO behoort een object lang niet altijd zijn eigen presentatie te verzorgen.

[ Voor 30% gewijzigd door Creepy op 16-05-2010 22:28 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • SvMp
  • Registratie: September 2000
  • Niet online
NMe schreef op zondag 16 mei 2010 @ 16:36:
Ik heb persoonlijk een beetje moeite met advies aannemen van iemand die <div id="titel">Mijnwebsite</div> schrijft in plaats van <h1>Mijnwebsite</h1>. ;)
Die conclusie kun je zonder de stylesheet niet trekken. In dit geval is het geen kop, maar een onderdeel dat de naam "titel" draagt omdat ik de naam van de website er in zit.

Dit is de CSS:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#titel {
    border: solid 2px #ffffff;
    color: #ffffff;
    background-color: #000070;
    font-size: 2em;
    font-weight: bold;
    width: 12em;
    text-align: center;
    margin: 8px;
    margin-left: 30px;
    padding: 7px;
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
/*  border-radius: 10px; CSS3 */
}


Daar vind ik een <div> meer passend dan een <h1>. De <h1> gebruik ik voor de kop van de hoofd-inhoud.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

SvMp schreef op zondag 16 mei 2010 @ 22:23:
[...]


Die conclusie kun je zonder de stylesheet niet trekken. In dit geval is het geen kop, maar een onderdeel dat de naam "titel" draagt omdat ik de naam van de website er in zit.
Oh maar dat is het wel. De inhoud van een stylesheet doet niets aan het wel of niet semantiek correct zijn van een element af. Ik denk dat een website met zo'n structuur wel beter is dan wat jij voorstelt:
[H1] Mijn Website
  [H2] Mijn menu
     [UL] ...

  [H2] Mijn artikel
    [H3] Mijn tussenkopje

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Sebazzz schreef op zondag 16 mei 2010 @ 22:21:
[...]

Dat is zeker radicaal ja ;)
Je hebt verschillende soorten logica. Bijvoorbeeld display logica en business logica. NMe heeft het over business logica, die moet je wel zeker scheiden van de layout.
Als je het zo uitlegt klinkt mijn opmerking nogal dom. :$
[...]
Hoe bedoel je dat? Als in: HTML 5 vs HTML 4?
Kan maar bv ook als je naar een mobile versie gaat kijken. Dan heb je ineens 2 layouts. Waardoor ik mijn anti-layout stelling weer geheel onderuit haal XD

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op zondag 16 mei 2010 @ 21:42:
[...]

True, maar.. hele pijnlijke maar... wat als de techniek veranderd? Wat als je bv je site anders wil indelen? Dan moet je dus én je functies aanpassen én je template.
Hoezo? Wanneer je de verschillende verantwoordelijkheden goed gescheiden hebt dan maakt het anders indelen van de site nauwelijks uit. En mocht je daadwerkelijk overal aanpassingen nodig hebben dan zorgen de gescheiden delen ervoor dat je aanpassingen telkens een overzichtelijke scope houden. Hierdoor zijn de aanpassignen te overzien, beter testbaar en uiteindelijk is de kans op fouten kleiner.
En zo lever je dus dubbel werk. Op mijn site doe ik het iets anders, ik gebruik twee files met functies. File 1 met functies die de input verwerkt. File 2 die de uitvoer verzorgt. Beide bestanden worden door de uiteindelijke PHP pagina (index.php) aangeroepen om zo een werkend geheel te vormen.Wil ik de layout anders? Pas ik de index.php & layout_functies.php aan. Wil ik de techniek anders? Pas ik de index.php en de functies.php aan.
Maar eigenlijk heb je dan al een scheiding van presentatie en business logic, mits je het uit de database uitlezen in functies.php hebt staan. Het lijkt me dat dit in jou geval ook zo is, anders is je laatste opmerking gelogen. Het aanpassen van wat jij 'techniek' noemt zou immers ook een database wijziging in kunnen houden (en volgens jou was er geen aanpassing in layout_functions.php nodig).

Ik moet echter wel zeggen dat het mij nogal een onoverzichtelijk gebeuren lijkt wanneer je je complete site in 3 bestanden hebt zitten. Dat lijkt me behoorlijk heen en weer scrollen tijdens het ontwikkelen.
(Disclaimer alle functies geven een string variabele terug waarin de uitvoer staat. De uiteindelijke echo staat enkel in het index.php bestand)
Oh wacht. Als het hier om ALLE functies gaat dan zul jij voor een simpele database wijziging ALLE bestanden aan moeten passen.
[...]
Ook hier ben ik het radicaal niet mee eens. In OO behoort een object zijn eigen presentatie te verzorgen.
Onzin. Het is ten sterkste af te raden om een object alles zelf te laten doen. Dat zou immers betekenen dat een object zou moeten weten hoe hij exact in elke database opgeslagen zou moeten worden, hoe hij geserialiseerd zou moeten worden middels xml, json en binair, en hoe hij zichzelf op een console, in html en op een form weer zou moeten geven. Je zou dan wel van zulke enorme god objecten hebben.

Het hele doel van object georienteerd programmeren is juist om ervoor te zorgen dat de verantwoordelijkheid van een enkel object zo duidelijk mogelijk begrensd zijn.
Als je een object op een Form zet hoort dit object door het object getekend te worden op de canvas die het Form biedt. Het Form mag in geen geval gaan bepalen hoe het object getekend moet worden.
(Oké in PHP heb je zulke forms niet, maar ook in PHP kan je Object Oriented werken en dan gaat dit weer wel op)
Het form is daar inderdaad niet verantwoordelijk voor. Die is alleen verantwoordelijk voor het vragen hoeveel ruimte het getekende nodig heeft en vervolgens ook teruggeven hoeveel ruimte het krijgt en waar het getekend mag worden. Het is echter ook niet zo dat het object zelf bepaald hoe het gerenderd wordt. Wanneer jij een object 'gebruiker' hebt zou het wel erg onhandig worden wanneer daarin alle rendercode (voor kleine weergave als listitem, detailview, editscherm enz enz), persisteercode en wat voor code dan ook zit. Je zult eerder nog een object GebruikerPanel en/of GebruikerListItemRenderer (oid) hebben die die specifieke taken doet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 16 mei 2010 @ 21:42:
[...]

True, maar.. hele pijnlijke maar... wat als de techniek veranderd? Wat als je bv je site anders wil indelen? Dan moet je dus én je functies aanpassen én je template. En zo lever je dus dubbel werk. Op mijn site doe ik het iets anders, ik gebruik twee files met functies. File 1 met functies die de input verwerkt. File 2 die de uitvoer verzorgt. Beide bestanden worden door de uiteindelijke PHP pagina (index.php) aangeroepen om zo een werkend geheel te vormen.Wil ik de layout anders? Pas ik de index.php & layout_functies.php aan. Wil ik de techniek anders? Pas ik de index.php en de functies.php aan.
Dat moet je lekker zelf weten, maar het klinkt behalve vaag ook nog eens als overbodig veel werk. Het is niet voor niks dat MVC zoveel gebruikt wordt, en jij verzint er nu spontaan nog een extra laag bij.
Ook hier ben ik het radicaal niet mee eens. In OO behoort een object zijn eigen presentatie te verzorgen. Als je een object op een Form zet hoort dit object door het object getekend te worden op de canvas die het Form biedt. Het Form mag in geen geval gaan bepalen hoe het object getekend moet worden.
(Oké in PHP heb je zulke forms niet, maar ook in PHP kan je Object Oriented werken en dan gaat dit weer wel op)
Ik heb geen idee waar je nu precies heen wil, maar een form heeft doorgaans een canvas "in" zich waarvan hij de interface kan aanspreken. De code in je form heeft daarbij alleen layout-logica, geen business logic. Als je die vergelijking dan toch zo wil maken met PHP, dan is het form je template en het canvas waar het form op getekend wordt je templating engine.

Business logic en layout hoor je gescheiden te houden. Met die functie die hierboven genoemd wordt heb je dat ook wel, maar daarbij heb je alsnog amper overzicht, je verliest aan flexibiliteit omdat je niet meer kan dan wat de parameters van je functie toestaan en erger nog: als je dit in een gecompileerde omgeving op die functie-manier zou doen, dan moet je voor elke layoutwijziging je halve project opnieuw compileren.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1