OOP HTML library

Ex7erm1na7oR

Registered
PHP:
<?php if(!defined('BASE')){ header('location:index.php'); }

	class HTML{
		
		private static $config;
		private static $output;
		//Top of the file
		private static function checkAtt($id="", $class=""){
			$re = "";
			if($id != ""){
				$re = ' id="' . $id . '"';
			}
			if($class != ""){
				$re .= ' class="' . $class . '"';
			}
			
			return $re;
		}
		public static function xHTML(){
		
			self::$output .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml">';
		
		}
		
		public static function closeHTML(){
			self::$output .= '</body>
					</html>';
		}
		
		public static function openHead(){
			self::$output .= '<head>';
		}
		
		public static function closeHead($bodyId="", $bodyClass=""){
			self::$output .= '</head>
					<body id="' . $bodyId . '" class="' . $bodyClass . '">';
		}
		
		public static function title($title){
		
			self::$output .= '<title>' . $title . '</title>';
		
		}
		
		
		public static function Meta($name="", $content=""){
			if($name == "encoding"){
				$res = '<meta http-equiv="Content-Type" content="text/html; charset=' . $content . '" />';
			}else{
				$res = '<meta name="' . $name . '" content="' . $content . '" />';
			}
			self::$output .= $res;
		}
		
		public static function loadJS(){
			$this->config = Config::getInstance();
			if($this->config->JSEnabled == true){
				foreach($this->config->JSLibs as $key => $value){
					$res .= '<script src="' . $this->config->BasePath . '/' . $this->config->ThemePath . '/' . $this->config->ActiveTheme . '/js/' . $value . '.js" type="text/javascript"></script>';
				}
			}else{
				$res = "";
			}
			
			self::$output .= $res;
		}
		
		public static function loadCSS($cssName, $media="screen"){
		$this->config = Config::getInstance();
			if(is_array($cssName)){
				foreach($cssName as $key => $fileCSS){
					$res .= '<link rel="stylesheet" type="text/css" href="' . $this->config->BasePath . '/' . $this->config->ThemePath . '/' . $this->config->ActiveTheme . '/css/' . $fileCSS . '.css" media="' . $media . '" />';
				}
			}else{
				$res = '<link rel="stylesheet" type="text/css" href="' . $this->config->BasePath . '/' . $this->config->ThemePath . '/' . $this->config->ActiveTheme . '/css/' . $cssName . '.css" media="' . $media . '" />';
			}
			self::$output .= $res;
		}
		//End of Top of file
		//Divs
		public static function Div($content, $id="", $class="")
			$res = '<div';
			$res .= self::checkAtt($id, $class);
			$res .= '>' . $content . '</div>';
			
			self::$output .= $res;
		}
		
		public static function openDiv($id="", $class=""){
			$res = '<div';
			$res .= self::checkAtt($id, $class);
			$res .= '>';
			self::$output .= $res;
		}
		
		public static function closeDiv(){
			self::$output .= '</div>';
		}
		//End of Divs
		
		//Content
			public static function p($content, $id="", $class=""){
				$res = '<p';
				$res .= self::checkAtt($id, $class);
				$res .= '>' . $content . '</p>';
				
				self::$output .= $res;
			}
			
			public static function img($path, $alt="", $title=""){
				self::$output .= '<img src="' . $path . '" alt="' . $alt . '" title="' . $title . '" />';
			}
			
			public static function h($content, $size="1"){
				if($size < 1){
					$size = 1;
				}
				if($size > 6){
					$size = 6;
				}
				
				self::$output .= '<h' . $size . '>' . $content . '</h' . $size . '>';
				
			}
			
			public static function label($content, $id="", $class=""){
				$res = '<label';
				$res .= self::checkAtt($id, $class);
				$res .= '>' . $content . '</label>';
				
				self::$output .= $res;
			}
			
			public static function openList($type="0", $id="", $class=""){
				/*
					0 for unordered list(ul)
					1 for ordered list(ol)
				*/
				if($type == 0){
					$res = '<ul';
				}
				elseif($type == 1){
					$res = '<ol';
				}
				
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				
				self::$output .= $res;
			}
			
			public static function li($content, $id="", $class="", $link=""){
				$res = '<li';
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				if($link != ""){
					$res .= '<a href="' . $link . '">' . $content . '</a></li>';
				}else{
					$res .= $content.'</li>';
				}
				
				self::$output .= $res;
			}
			
			public static function closeList($type="0"){
				if($type == 0){
					$res = '</ul>';
				}
				elseif($type == 1){
					$res = '</ol>';
				}
				self::$output .= $res;
			}
			
			public static function link($loc, $content, $id="", $class=""){
				$res = '<a href="' . $loc . '"';
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				$res .= '' . $content . '</a>';
				
				self::$output .= $res;
			}
		//End of content
		
		public static function parse(){
			//Some logic
			echo self::$output;
		}
	
	}
	
?>

удачно ли е да ползвам ехо или трябва да ползвам return?

И ако ползвам return това означава че трябва да подавам функцията към променлива а моята цел е нещо от сорта да ми е темплейт.

PHP:
	HTML::xHtml();
	HTML::openHead();
		HTML::title("Simple Title");
		html::meta("encoding", "utf8");
		html::meta("keywords", "some, keywords");
	HTML::closeHead();
	HTML::openDiv("SimpleDivID", "SimpleDivClass");
			HTML::link('#', 'SimpleLink');
			HTML::p('Some Simple Paragraph');
			HTML::h('Simple Heading');
			HTML::label('simpleLabel');
			HTML::openList();
				html::li("Apple");
				html::li("Apricot", "", "", "#");
			HTML::closeList();
			html::div(html::p('Some paragraph in div'), "SimpleID2");
	HTML::closeDiv();
	HTML::closeHTML();

Някой от разбиращите да си каже мнението.
Също така начин да форматирам извикания код
 
Оправих се с html tidy и напуцах целия html в една променлива само незнам дали няма да е по бавно така?

PHP:
<?php if(!defined('BASE')){ header('location:index.php'); }

	class HTML{
		
		private static $config;
		private static $output;
		//Top of the file
		private static function checkAtt($id="", $class=""){
			$re = "";
			if($id != ""){
				$re = ' id="' . $id . '"';
			}
			if($class != ""){
				$re .= ' class="' . $class . '"';
			}
			
			return $re;
		}
		public static function xHTML(){
		
			self::$output .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml">';
		
		}
		
		public static function closeHTML(){
			self::$output .= '</body>
					</html>';
		}
		
		public static function openHead(){
			self::$output .= '<head>';
		}
		
		public static function closeHead($bodyId="", $bodyClass=""){
			self::$output .= '</head>
					<body id="' . $bodyId . '" class="' . $bodyClass . '">';
		}
		
		public static function title($title){
		
			self::$output .= '<title>' . $title . '</title>';
		
		}
		
		
		public static function Meta($name="", $content=""){
			if($name == "encoding"){
				$res = '<meta http-equiv="Content-Type" content="text/html; charset=' . $content . '" />';
			}else{
				$res = '<meta name="' . $name . '" content="' . $content . '" />';
			}
			self::$output .= $res;
		}
		
		public static function loadJS(){
			self::$config = Config::getInstance();
			$res = "";
			if(self::$config->JSEnabled == true){
				foreach(self::$config->JSLibs as $key => $value){
					$res .= '<script src="' . self::$config->BasePath . '/' . self::$config->ThemePath . '/' . self::$config->ActiveTheme . '/js/' . $value . '.js" type="text/javascript"></script>';
				}
			}else{
				$res = "";
			}
			
			self::$output .= $res;
		}
		
		public static function loadCSS($cssName, $media="screen"){
			self::$config = Config::getInstance();
			$res = "";
			if(is_array($cssName)){
				foreach($cssName as $key => $fileCSS){
					$res .= '<link rel="stylesheet" type="text/css" href="' . self::$config->BasePath . '/' . self::$config->ThemePath . '/' . self::$config->ActiveTheme . '/css/' . $fileCSS . '.css" media="' . $media . '" />';
				}
			}else{
				$res = '<link rel="stylesheet" type="text/css" href="' . self::$config->BasePath . '/' . self::$config->ThemePath . '/' . self::$config->ActiveTheme . '/css/' . $cssName . '.css" media="' . $media . '" />';
			}
			self::$output .= $res;
		}
		//End of Top of file
		//Divs
		public static function Div($content, $id="", $class=""){
			$res = '<div';
			$res .= self::checkAtt($id, $class);
			$res .= '>' . $content . '</div>';
			
			self::$output .= $res;
		}
		
		public static function openDiv($id="", $class=""){
			$res = '<div';
			$res .= self::checkAtt($id, $class);
			$res .= '>';
			self::$output .= $res;
		}
		
		public static function closeDiv(){
			self::$output .= '</div>';
		}
		//End of Divs
		
		//Content
			public static function p($content, $id="", $class=""){
				$res = '<p';
				$res .= self::checkAtt($id, $class);
				$res .= '>' . $content . '</p>';
				
				self::$output .= $res;
			}
			
			public static function img($path, $alt="", $title=""){
				self::$output .= '<img src="' . $path . '" alt="' . $alt . '" title="' . $title . '" />';
			}
			
			public static function h($content, $size="1"){
				if($size < 1){
					$size = 1;
				}
				if($size > 6){
					$size = 6;
				}
				
				self::$output .= '<h' . $size . '>' . $content . '</h' . $size . '>';
				
			}
			
			public static function label($content, $id="", $class=""){
				$res = '<label';
				$res .= self::checkAtt($id, $class);
				$res .= '>' . $content . '</label>';
				
				self::$output .= $res;
			}
			
			public static function openList($type="0", $id="", $class=""){
				/*
					0 for unordered list(ul)
					1 for ordered list(ol)
				*/
				if($type == 0){
					$res = '<ul';
				}
				elseif($type == 1){
					$res = '<ol';
				}
				
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				
				self::$output .= $res;
			}
			
			public static function li($content, $id="", $class="", $link=""){
				$res = '<li';
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				if($link != ""){
					$res .= '<a href="' . $link . '">' . $content . '</a></li>';
				}else{
					$res .= $content.'</li>';
				}
				
				self::$output .= $res;
			}
			
			public static function closeList($type="0"){
				if($type == 0){
					$res = '</ul>';
				}
				elseif($type == 1){
					$res = '</ol>';
				}
				self::$output .= $res;
			}
			
			public static function link($loc, $content, $id="", $class=""){
				$res = '<a href="' . $loc . '"';
				$res .= self::checkAtt($id, $class);
				$res .= '>';
				$res .= '' . $content . '</a>';
				
				self::$output .= $res;
			}
		//End of content
		
		public static function parse(){
			$config = array(
			'clean'          =>    true, 
            'indent'         => true,
            'output-html'     => true,
            'wrap'         => '1000');
			$tidy = tidy_parse_string(self::$output, $config, 'UTF8');

			$tidy->cleanRepair();
			echo $tidy;
		}
	
	}
	
?>
 
По бързо изграждане на хтмл и по нагледен код + това после мога лесно да си го разширявам.Това ми е идеята като цяло няма да забравям <><''' и т.н. :?:

+ това ще има и още според браузъра ще предлага xHTML или HTML5
 
StormBreaker каза:
А какъв изобщо е смисъла от това според теб? :?

Напълно подкрепям, че няма смисъл. :)))

До автора: разучи принципа на MVC (model, view, controller). :)))
 
eddyy93 каза:
StormBreaker каза:
А какъв изобщо е смисъла от това според теб? :?

Напълно подкрепям, че няма смисъл. :)))

До автора: разучи принципа на MVC (model, view, controller). :)))

аз го знам просто не искам да гo използвам.

По тая логика какъв е смисъла от ДБ wrapper и Session handler
 
Ex7erm1na7oR каза:
По бързо изграждане на хтмл и по нагледен код + това после мога лесно да си го разширявам.Това ми е идеята като цяло няма да забравям <><''' и т.н. :?:

+ това ще има и още според браузъра ще предлага xHTML или HTML5

За кой е по-бързо? На мен не би ми било по-бързо да научавам нова библиотека, за да отворя няколко html тага. Ами ако искам атрибути, които не ги поддържаш? Ами ако искам тагове, които ги нямаш като методи? Всичко, което мога да взема като html от интернет ще трябва да го пренаписвам, за да работи с това
Редактора няма да може да ти помогне с HTML-a (подсказки, затваряне на тагове и т.н.)

Много си усложняваш живота. Искаш да не забравяш <>"', но ще помниш имена на методи, подредба на параметри и други детайли по твоята библиотека?

Не виждам основателна причина това нещо да съществува, честно. :)
 
Е добре де аз виждам :D.
По бързо ще си конструктирам темплейтите в системата и няма какво да уча като аз съм си написал всичко.

Също така атрибутите се добавят лесно на това ниво това ми трябва това правя не искам да пиша на 10 езика когато градя един сайт а само на PHP.

Какъв е смисъла от jquery библиотеката на CI и в нея ли не виждаш смисъл?

Ползвам N++ така че той не помага с таговете :)

По същата ти логика защо има толкова PHP frameworks, като може да има само 1?
 
Замисли се за възможността да "развиваш" 2 хтмл страници заедно. Тогава тези статични методи не ти вършат много работа.
 
Index ако може пример че не схванах.
А и в момента си измислих друга структура на самата библиотека.

Вместо да правя отделна функция за всичко мога да си направя просто 1 в която ще кажа какво да отваря и така нататак
 
Ex7erm1na7oR каза:
Е добре де аз виждам :D.
По бързо ще си конструктирам темплейтите в системата и няма какво да уча като аз съм си написал всичко.

Също така атрибутите се добавят лесно на това ниво това ми трябва това правя не искам да пиша на 10 езика когато градя един сайт а само на PHP.

Какъв е смисъла от jquery библиотеката на CI и в нея ли не виждаш смисъл?

Ползвам N++ така че той не помага с таговете :)

По същата ти логика защо има толкова PHP frameworks, като може да има само 1?

Има PHP frameworks защото правят нещо много по-добре отколкото чист PHP код, спестяват ти много писане и правят много неща вместо теб.

Това не прави по-добър HTML, не ти спестява писане (HTML::openHead(); vs <head>) и не прави нищо вместо теб, освен да обърква другите хора дето ще ти гледат кода.

Не знам каква е jquery библиотеката за CI, но не вярвам да е нещо много използвано. А ако говориш за самото jquery то е коренно различно нещо :)

По тази логика направи си и CSS такова нещо. Имаш само ей толкова методи да направиш :)

Ти реално не пишеш на PHP, а на HTML. Имената на таговете са същите, трябва да ги отваряш и затваряш, имаш IDта и атрибути, влагаш тагове в друг таг и т.н. Единствената разлика е, че освен да знаеш HTML трябва да знаеш и твоята библиотека наизуст (подредба на параметри например).

Може би е по-добре да си намериш редактор, който ти помага с таговете, отколкото да пренаписваш синтаксиса на HTML :)

Не се опитвам да те обидя или нещо подобно - просто излагам мнение.

Ако все пак решиш това да го ползваш - направи методите да не са статични щом ще го ползваш като темплейт. Нека да може всяка инстанция на класа да генерира отделен, независим темплейт.

$html = new HTML();

$html->body();
$html->li(); и т.н.

echo $html->parse();
 
Дам разбирам те напълно.

Но тази част от кода е просто някъкви основи.

и Всъщност го измислих по различен начин.

PHP:
class HTML{

public static function open($tag, $attributs){
//разрязване на атрибутите
return '<$tag ...
}

}

мисля че така ще е много по удачно отколкото да пренаписвам HTML
 

Back
Горе