joerg
Avatar joerg
Themenersteller
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)

Wie baue ich meine Klasse für meinen XHTML5 Head besser

am 17.04.2012, 10:51 Uhr eröffnete joerg folgenden Thread
PHP & MySQL    1864 mal gelesen    6 Antwort(en).

Hallo

So ihr müsst das alle jetzt mal ertragen weil Thomas ja der Meinung war er müsste mich anspornen OOP mir anzueignen.

Also das Teil funktioniert zwar so wie ich möchte und erzeugt halt eben auf einem Rutsch den ganzen Kopf meiner Datei.

Okay dann mal ein herzliches Danke an alle die von mir im Chat gepeinigt worden sind mit meinen Fragen in den letzten Tagen.

Mir geht es jetzt darum ob ich diese Klasse wesentlich besser gestalten könnte.
Mehr Variablen wären immer möglich aber momentan sind viele Punkte davon eher als statisch anzusehen.

Der einzige Punkt der mir momentan einfällt wäre halt eben eine Option noch einzurichten dafür eines Tages mehr Javascript Dateien einzubinden.

Gruß
Jörg


class Xhtml5
{
private $titel;
private $beschreibung;
private $keyword;
private $cssangabe;

public function __construct($titel,$beschreibung,$keyword,array $cssangabe)
{
$this->titel=$titel;
$this->beschreibung=$beschreibung;
$this->keyword=$keyword;
foreach ($cssangabe as $wert)
{
$this->cssangabe[]= $wert;
}
}

public function erstellexhtml5()
{
if (strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')!==false)
{
$xhtml = '<?xml version="1.0" encoding="UTF-8"?>';
$htmljs = '';
}
else
{
$xhtml = '';
$htmljs = '<script src="/js/html.php"></script>';
}

$xhtml .= '<!DOCTYPE html>';
$xhtml .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">';
$xhtml .= '<head>';
$xhtml .= '';
$xhtml .= '<title>Jörg Hülsermann</title>';
$xhtml .= '<base href="http://'.$_SERVER['SERVER_NAME'].'" />';
foreach ($this->cssangabe as $tmp)
{
$xhtml .= '<link rel="stylesheet" href="'.$tmp.'">';
}
if (!empty($this->beschreibung)) { $xhtml .= '';
$xhtml .= '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">';
$xhtml .= '<link rel="alternate" type="application/rss+xml" title="Aktuelle Seiten" href="/feed/rss.php">';
$xhtml .= '<link rel="P3Pv1" href="/w3c/p3p.xml">';
$xhtml .= $htmljs;
$xhtml .= '</head><body>';
return $xhtml;
}
}


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 17.04.2012, 13:25 Uhr schrieb

Hi Joerg,

deine Klasse ist noch recht unflexibel. Hier mal ein Beispiel das zu Umgehen. Achja bei XHTML5 kommt kein !DOCTYPE html

<?php
class Xhtml5{
private $metas;
private $script;
private $style;
private $link;
private $lang;

private $content;

public function __construct($lang=\'de-DE\'){
$this->lang=$lang;
$this->metas=array();
$this->script=array();
$this->style=array();
}

public function addScript($url){
$this->script[]=$url;
}
public function addStyle($url,$media=null){
$this->style[]=array($url,$media);
}
/* ... */

public setContent($html){
$this->content=$html
}

public function get(){
$xhtml=(string)null;
if (strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)
$xhtml .= \'<?xml version="1.0" encoding="UTF-8"?\'.\'>\';

$xhtml.=\'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="\'.$this->lang.\'" lang="\'.$this->lang.\'"><head>\';

foreach($this->script as $sc)
$html.=\'<script src="\'.$sc.\'"></script>\';

foreach($this->style as $st)
$html.=\'<link rel="stylesheet" href="\'.$st[0].\'" media="\'.$st[1].\'">\';

return $xhtml.\'</head><body>\'.$this->content.\'</body></html>\';
}
}

?>


UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 18.04.2012, 00:34 Uhr schrieb UFOMelkor

Auch von mir ein Beitrag dazu (siehe Anhang), für Erklärungen reicht es heute allerdings nicht mehr.


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 18.04.2012, 12:13 Uhr schrieb joerg

Hallo Thomas

Ja die Klasse ist noch recht unflexibel. Mehr oder weniger aber auch bewusst weil ich davon ausgehen werde nur den Kopf und den Fuss jeder Datei per Klasse dann einzubinden.

Ich gehe in diesem Fall nicht von einer Datenbank aus die ich auch zur Verfügung habe.

Die Zeile die du da ansprichst kannst du optional in XHTML5 auch setzen. Genauer ich könnte auch auf die XML Deklaration verzichten weil sie dem Standard UTF-8 entspricht in XHTML5. Wenn muss man sie aber halt eben für XHTML5 case sensitive angeben.

Die Unterscheide hatte ich mir hier mal aufgeschrieben.

joerghuelsermann.de/artikel/xhtml5-html5.php



Okay zumindest hatte ich jetzt bei aktivem Error Reporting bei den Versuchen mit meiner Testseite mnit dieser Klasse ein kleines Problem mit dem Validator vom W3C. Okay das Error Reporting habe ich jetzt wenn ich auf die Klassen umstelle bestimmt immer aktiviert.

Deshalb würde ich

if (strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)

auf

if (isset(($_SERVER[\'HTTP_ACCEPT\']) and strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)

abändern.

Hallo Oskar

Du ich verstehe anhand deines Beispieles schon mehr in welche Richtung ich müsste allgemein.

Aber ich habe hier bei dem Beispiel keine Datenbank für jede Seite dahinter und möchte den Rest des Kodes nicht über OOP generieren.

Ist aber keine schlechte Idee einfach mal einen Bereich aufzubauen wo ich halt eben mehr OOP zum Aufbau der Seite einsetze.

Wenn ich dein Beispiel richtig verstehe ist es nicht in der Lage anhand des Benutzeragenten auch eine XHTML5 Version auszugeben.

Also ich habe halt eben für meine Verhältnisse jetzt die ganze Klasse etwas weiter angepasst um immer vorhandene Bereiche einzubinden darüber.

Wahrscheinlich ist das nicht OOP im Sinne von dem was ihr versteht.

Deshalb jetzt hier an der Stelle meine momentane Version.

Gruß
Jörg


class Xhtml5
{
private $titel;
private $beschreibung;
private $keyword;
private $cssangabe;

public function __construct($titel,$beschreibung,$keyword,array $cssangabe)
{
$this->page = $_SERVER[\'REQUEST_URI\'];
$this->titel=$titel;
$this->beschreibung=$beschreibung;
$this->keyword=$keyword;
foreach ($cssangabe as $wert)
{
$this->cssangabe[]= $wert;
}
}

public function erstellexhtml5()
{

ob_start();
if (isset($_SERVER[\'HTTP_ACCEPT\']) and strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)
{
$x = \'<?xml version="1.0" encoding="UTF-8"?>\';
$js = \'\';
$s = \'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 20 20" xml:lang="de">\';
$s .= \'<defs><linearGradient id="regenbogen" x1="0" y1="0" x2="0" y2="1">\';
$s .= \'<stop offset="0%" stop-color="red" />\';
$s .= \'<stop offset="20%" stop-color="yellow" />\';
$s .= \'<stop offset="40%" stop-color="lime" />\';
$s .= \'<stop offset="60%" stop-color="aqua" />\';
$s .= \'<stop offset="80%" stop-color="blue" />\';
$s .= \'<stop offset="100%" stop-color="fuchsia" />\';
$s .= \'</linearGradient></defs>\';
$s .= \'<circle cx="10" cy="10" r="10" fill="white" />\';
$s .= \'<circle cx="10" cy="10" r="10" fill="url(#regenbogen)" opacity="0.7"></circle>\';
$s .= \'<text x="6" y="15" fill="black">?</text>\';
$s .= \'</svg>\';}
else
{
$x = \'\';
$js = \'<script src="/js/html.php"></script>\';
$s = \'\';
}

$x .= \'<!DOCTYPE html>\';
$x .= \'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">\';
$x .= \'<head>\';
$x .= \'\';
$x .= \'<title>Jörg Hülsermann</title>\';
$x .= \'<base href="http://\'.$_SERVER[\'SERVER_NAME\'].\'" />\';
foreach ($this->cssangabe as $tmp)
{
$x .= \'<link rel="stylesheet" href="\'.$tmp.\'">\';
}
if (!empty($this->beschreibung)) { $x .= \'\';
$x .= \'<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">\';
$x .= \'<link rel="alternate" type="application/rss+xml" title="Aktuelle Seiten" href="/feed/rss.php">\';
$x .= \'<link rel="P3Pv1" href="/w3c/p3p.xml">\';
$x .= $js;
$x .= \'</head><body>\';
//header Bereich

$x .= \'

\';
$x .= \'

\';
$x .= \'

\';

$x .= \'

\';
$x .= \'

\';

return $x;
}

public function footerxhtml5()
{
$w3cunicorn = rawurlencode($_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\']);
$xf = \'

\';
$xf .= \'

\';
$xf .= \'</body></html>\';
return $xf;
}

}


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 18.04.2012, 14:49 Uhr schrieb UFOMelkor

Hallo Jörg,

Ziel meines Beispiels war es nicht, ein nutzbares Framework zu entwerfen, sondern ein Design-Beispiel zu geben. Ich bin sicher, dass es neben der fehlenden Benutzeragentenprüfung noch weitere, fachliche Fehler und Unzulänglichkeiten gibt, aber in der Beziehung hast du selbst mehr als genug Erfahrung

Was ich hervorheben wollte: Jede Klasse sollte nur eine Aufgabe übernehmen (Single Responsibility Prinzip). Verstößt man dagegen, hat man schnell riesengroße Klassen und ist wieder so unflexibel wie zu prozeduralen Zeiten.
Beste Grüße

Oskar


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 18.04.2012, 15:52 Uhr schrieb joerg

Hallo Oskar

Du ich bin mir sicher das ich im Moment noch zu sehr den prozeduralen Stil fahre und vermutlich gedanklich da auch noch gefangen bin.

Ich bin dir auch äusserst dankbar für das Beispiel weil ich damit vieles nachvollziehen werde. Auch wenn ich momentan deine Gedanken auch nur teilweise nachvollziehen kann. Das liegt das aber mehr daran das mein Wissen noch sehr lückenhaft ist.

Wahrscheinlich werde ich mir die Dateien noch häufiger herrauskramen.

Dazu weiss ich halt eben noch zu wenig über das ganze Thema OOP.

Ich bin aber auch froh das ich weitaus mehr verstehe als vor einer Woche.

Wahrscheinlich werde ich auch sehr viel Bockmist bauen bis ich in diesem Thema überhaupt etwas kompetenter bin.

Andererseits denk ich das man viele dadurch ermuntern kann die nur den prozeduralen Gedanken kennen mit diesem Thema auch anzufangen.

Deshalb werde ich auch weiter in meiner bevorzugten Quelle weiter mich informieren. Wirklich mal etwas verständlich meiner Ansicht nach geschrieben.

www.peterkropff.de/site/php/oop.htm



Neben den Fragen die ich im Chat mal stellen werde wahrscheinlich.

Achja zur Information wenn ich mir dein Skript anschaue das type Attribut wird bei Javascript und CSS nicht mehr unter HTML5 benötigt. Kann man zwar optinal noch setzen ist aber nicht im Sinne der Entwickler.

So langsam wird mir aber auch bewusst warum mich Thomas gestern auf eine bestimmte Sache angesprochen hat. Ja wegen deinem Beispiel.

Da kann man zwar noch viel dran machen wie eine Ausnahme für das script Element setzen das es sich noch selbst schliesst und ob ich wirklich heute noch ein mehrdimensionales Array für die Attribute und Werte der Attribute setzen würde weiss ich auch nicht. Also das erste für die Attribute und das zweite dann für die Werte der Attribute.

Und getestet habe ich das Ganze auch noch nicht ob es überhaupt funktioniert.
Kann sein das da an einigen kleinen Stellen was fehlt oder zuviel ist.

Aber die Grundidee da das für HTML5, XHTML5, SVG, RSS, XML also allgemein nützlich wäre kann ich besser nachvollziehen durch deinen Code als gestern.

Da wären auch noch so Feinheiten wie zu unterscheiden ob ich htmlspecialchars in einem Attribut einsetze oder nicht.

Ja und ich müsste jetzt um das von dir erwähnte Prinzip zu berücksichtigen das zusammensetzen der Attribute und Werte in eine separate Klasse setzen. Soweit hoffentlich richtig.

Okay dann an der Stelle die Frage wenn ich ein eindimensionales Array als Ãœbergabe nutzen würde wäre es besser die Attribute und Werte abwechseln zu setzen oder erst nur die Attribute und dann die Werte?

<?php

class Xmlelement {
private $element;
private $xml;
private $inhalt;

public function __construct($element,array $attribut,$inhalt){
$i = 0;

$this-xml = \'<\'.$element;

foreach ($attribut[0] as $wert)
{
$this->xml .= \' \'.$wert.\'="\'.htmlspecialschars($attribut[1][$i]).\'"\';
$i++;
}

if (empty($inhalt)) {$this->xml .= \' /\';}

$this->xml .= \'>\';$wert.\'="\'.htmlspecialschars($attribut[1]).\'"\';
if (!empty($inhalt)) {$this->xml .= htmlspecialschars($inhalt).\'</\'.$element.\'>\';
return $xml;
}
?>


Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 18.04.2012, 17:45 Uhr schrieb

Hi Joerg,

ein XML-Element würde ich mir eher so vorstellen:

<?php
class XmlElement{
private $_type;
private $_parent;
private $_childeNodes;
private $_attributes;

public function __construct($type,$parent=null){
$this->_type=$type;
$this->_parent=$parent;
$this->_childeNodes=array();
$this->_arrtibutes=array();
if($parent){$parent->addChild($this);}
}
public function addAttribute($name, $value){
$this->_attributes[strToLower(trim($name))]=$value;
}
public function removeAttribute($name){
$name=strToLower(trim($name));
if(isset($this->_attributes[$name]))unset $this->_attributes[$name];
}
public function getAttribute($name){
$name=strToLower(trim($name));
if(isset($this->_attributes[$name])) return $this->_attributes[$name];
else return null;
}
public function addChild($child){
$this->_childNodes[]=$child;
}
}
?>


  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.