php en html door elkaar

Status
Niet open voor verdere reacties.

fsasfsas

Gebruiker
Lid geworden
11 sep 2006
Berichten
429
Dag

Ik lees op internet veel tegenstrijdige meningen. Soms wordt geadviseerd om php zo weining mogelijk te gebruiken om html code te genereren maar van de andere kant wordt ook geadviseerd geen mengelmoesje te maken omdat dat onoverzichtelijk wordt. En met dat laatste ben ik het erg eens.

Wat is jullie mening?

dit (dus zoveel mogelijk "origineel" HTML gebruiken:)
Code:
<?php
/* bladiebla */
?>
<div class="nogwat">
    <?php
    /* en nog meer code */
    ?>
</div>
<?php
/* en verder met code */

of dit (wat ik een stuk overzichtelijker vindt):
Code:
<?php
echo '<div class=\"nogwat\">';
    /* en nog meer code */
echo '</div>';
/* en verder met code */

groetjes, Anjo
 
Het netste is om een template engine te gebruiken zodat je de PHP en HTML kan scheiden.
 
Dat adviseer ik ook als je een redelijk project hebt met meerdere scripts en een hoop HTML.
Kijk dan eens naar Smarty en Twig, dat zijn beide goede template-parsers.

Als je een simpel script maakt, dan is het best bloated om een hele template-parser toe te voegen, dan volstaat het om eerst de uitvoer van het script te starten, en daarna de HTML. Zo houd je alles ook gescheiden, en kom je nooit in de problemen met header()'s halverwege je HTML wat natuurlijk niet mag.
 
Dank jullie wel

Ik gebruik wel al redelijk wat templates maar heb toch ook nog php en html door elkaar zitten.
Het zal aan het feit liggen dat ik een leek ben, maar hoe moet ik dit voor me zien?

De extra div die met php er tussen gefrot wordt zit eigenlijk in een "if-statement" (dat had ik in het voorbeeld er uit gelaten omdat het voorbeeld naar mijn idee al aangaf wat ik bedoelde).

Begrijp ik het goed dat ik dan zoiets moet doen:

Code:
<?php
if (conditie is true) {
    include bestand1 met code waar ook de extra div in zit 
}
else {
    include bestand2 met code waar de div niet in zit
}

en in die beide te includen bestanden (bestand1 en bestand2) kan ik dan de overlappende code weer uit een ander te includen bestand (bestand3) halen zodat daar geen redundancy in zit?

Het wordt geen grote site en ik wil graag dingen van scratch leren, vandaar dat ik (nog) geen bestaande template-parser gebruik.

Ik hoor graag of ik het zo goed begrijp.

groetjes, Anjo
 
Aanvulling.

concreet: in onderstaande code is php en html gemixed. Hoe zou ik onderstaande via templates het beste op kunnen lossen?

Code:
<div class="container-fluid">
   <div class="vlak-tekst-anjo"> 
         <?php
         if (strlen($row['img_wit']) > 0){ // alleen plaatje als er eentje is.
         ?>
            <img src="<?php echo $row['img_wit']; ?>" align="left" class="img-wrap-aroud">
         <?php
         }
         ?>
         bladiebla
   </div>
</div>

groetjes, Anjo
 
Laatst bewerkt:
Dat ligt aan welke template-parser je gebruikt ;)

Maar als je zonder template-parser werkt, is beste om de PHP-als eerste uit te voeren. En alles wat in je HTML maar ge-cho'ed moet worden, in het begin al te defineren in een variabele

PHP:
<?php
// eerst voeren we de PHP-zaken uit.
if(isset($_GET['title']) && $_GET['title'] == "opmerking") {
 $title = "opmerking";
}

// mooi, we hebben nu dus $title beschikbaar als $_GET['title'] de waarde opmerking heeft.
//Dus kunnen we deze variabele gaan uitputten.
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $title; ?></title>
</head>

<body>
Blaaah!
</body>
</html>
 
dank je wel! heel erg mee geholpen.
Waarom is overigens die tweede regel? is het niet voldoende om gewoon title te vullen zoals in de derde regel gebeurt?

groetjes, Anjo
 
Puur een leuk voorbeeldje in het 'business'-gedeelte van je script. Je kan er van alles in uitvoeren.
Het ging puur om het voorbeeld hoe je de business en de view gescheiden kan houden.

En ja, die isset() is in dit voorbeeld bedoeld omdat je anders 'Undifined index'-errors krijgt.
 
Dat ligt aan welke template-parser je gebruikt ;)

Maar als je zonder template-parser werkt, is beste om de PHP-als eerste uit te voeren. En alles wat in je HTML maar ge-cho'ed moet worden, in het begin al te defineren in een variabele

PHP:
<?php
/...
?>
...
dit is geen template voor mij maar gewoon php file nu wat ik template noem is

<!DOCTYPE html>
<html lang="%locale->value%">
<head>
<title>%title->value%</title>
<meta charset="UTF-8">
<script type="text/javascript" src="%path.layout->value%js/wa.ajax"></script>
<link rel="stylesheet" type="text/css" href="%path.layout->value%bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="%path.layout->value%Xdebug.css">
<link rel="SHORTCUT ICON" href="%path.layout->value%logo.ico">
<link rel="stylesheet" type="text/css" href="%path.layout->value%%basic.css->value%">
<link rel="stylesheet" type="text/css" href="%path.layout->value%style.css">
<link rel="stylesheet" type="text/css" href="%path.layout->value%specials.css">
<link rel="stylesheet" type="text/css" href="%path.layout->value%constantes.css">
<meta name="robots" content="index, follow">
<meta name="googlebot" content="index,follow,archive" />
<meta name="keywords" content="%keywords->value%" >
<link rel="canonical" href="%URL_SELF->value%"/>
%location.css->value%
<script type="text/javascript" src="%path.layout->value%jquery/jquery.min.js"></script>
<script type="text/javascript" src="%path.layout->value%bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<div id="topimg"><!----%title->value%--></div>
<header id="tophead">
<nav id="myNavbar" class="%collapse->value%">
<ul>
%nav->value%
</ul>
</nav>
%menutypes->value%
%find->value%
<div id="langbar" >
<a data-toggle="collapse" data-target="#myNavbar,#flags"><img class="icon" src="%path.layout->value%img/icons/m/menu.svg" alt="%collapse%"></a>

</div>
</header>
<section id="container">
<!--article id="content"-->

<a class="mysqlitem %row->value% col-xs-12" href="./?view=%help_topic_id->value%">
<span class="col-lg-8 col-md-8 col-sm-9 col-xs-9">
<p class="attention">%parentcategoryname->value%|%categoryname->value% </p>
<p> %name->value% </p>
<span class=" col-sm-10 hidden-xs">*</span>
</span>
</a>

de code zit iets complexer dan afgebeeld maar het is het idee dat telt (om niet met vertalingen en cach en clonen af te komen en het een beetje eenvoudig te houden)
PHP:
                    $x = $this->cancreatetemplate;
                    $view =  Properties::get_Qtemplate($location,$name,$x);
                    preg_match_all('|'.$this->delimiter.'(.*)'.$this->delimiter.'|',$view,$keys);
                    $keys=$this->array_keyfinder($keys[1]);
                    $this->template = new Qtemplate($view);
                    $this->template->translate($this->translatekeys($keys));
                    if($this->cachIT){
                        $html=$this->template->gethtml();
                        $this->makecach($location,$name,$html);
                    }
                }
                $values['i'] = ++$this->i;
                array_pop($path);
                $values['path.layout']=$this->getLayoutPath();
                $values['path.module']=$this->locationpath;
                 $this->template->setvalues($values);
                return  $this->template->gethtml();
            



<?php
/**
* @copyright 2009
* @CMS autosite
*/
class Qtemplate{
	private $template;
	private $html;
	private $taglist=array();
	private $htmltag;
	private $tagnotfound=array();
	private $toolsbar='';
    private $y=0;
	/**
	* @param var $html
	 */
	function __construct(&$html){	    	$this->html=$html;		}
	public function reset($html){			$this->html=$html;		}
	/**
     * @onerror if an error array to string convertion yo can give any array to the $value
	 * @param mixed $key
	 * @param mixed $value
	 * @return
	 */
	function toreplace($key,$value){
	  $this->html=str_replace('%'.$key.'%',$value,$this->html);
	}
	public function translate($asoarr){
	    if(!is_array($asoarr)){return; }
        foreach($asoarr as $key => $value){
            if($key!='toolbar'){
               	if ($value !=' '){           	$this->toreplace($key,$value);             	}
            }else{                          	$this->toreplace($key,$this->toolsbar);     } 	
        }
	}
	function settoolbar($toolbar,$link){		$this->toolsbar=$toolbar;              		}
	public function setvalues($asoarr){
	  if(is_array($asoarr)){
	  	 foreach ($asoarr as $key=>$value){   $this->toreplace($key.'->value',$value);	}
	  }
	}
	/**
	 * @return translated data 
	 */
	public function gethtml(){
		return $this->html;
	}
}
?>
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan