VPNwelt.com sucht Feedback Wie der Name schon sagt handelt es sich um eine Review Website für…
von: florian.berg.privat
Versuch Backlinks oder Keywords zu erstellen. Dein Content muss auch gut sein. Hier ein Artikel das…
von: welkercarmen5
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;
}
}
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>\';
}
}
?>
Auch von mir ein Beitrag dazu (siehe Anhang), für Erklärungen reicht es heute allerdings nicht mehr.
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
if (strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)if (isset(($_SERVER[\'HTTP_ACCEPT\']) and strpos($_SERVER[\'HTTP_ACCEPT\'], \'application/xhtml+xml\')!==false)
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;
}
}
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
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
<?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;
}
?>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;
}
}
?>
Beitrag erstellen
EinloggenKostenlos registrieren