Question

Last time I asked for help in PHP and I got great response. Thanks to all of you for that. Now I am learning and creating website using MVC PHP. I want to ask you that can I create a custom function to use html tags? I am trying to remember that where I saw an example of it. Actually I've seen it before in and open source project.

It was like something this:

htmltag(script(src=address, type=javascript))

Its output was in html like:

<script src="address" type="javascript"></script>

So can I create something like this? I am trying to do this way:

public function script($var1, $var2){
    $var1 = array(
                'type'=>'',
                'charset' => '',
                'src' => ''
            );
    $var2 = false;
    print("<script $var1>$var2</script>");
    }

So can anyone guide me with this? Do I need to create class first? I will be waiting for your reply friends.

Was it helpful?

Solution

Javascript works with DOM, see the reference

function htmltag(name,atts) {
    var tag = document.createElement(name);
    for(var i in atts) tag.setAttribute(i, atts[i]);
    return tag;
}

var img = htmltag("img", {
    src: "https://kevcom.com/images/linux/linux.logo.2gp.jpg",
    alt: "linux logo"
});

document.body.appendChild(img);

Note that img here is object (XML Node), not just plain text, so you can attach events on it etc. If you want to extract just the plain html code from it, use img.outerHTML. Test it on the fiddle.

Note: print is the equivalent of Ctrl+P in the browser :-) it is not the print equivalent in PHP.

In PHP you can use DOM::createElement and other methods from DOM which are quite similar to those from javascript. Personaly I prefer something more simple:

function tag($name,$atts="",$content="") {
    $str_atts = "";
    if(is_array($atts)) {
    foreach($atts as $key=>$val) if(!($val===null || $val===false)) $str_atts.= " $key=\"$val\"";
  } else $str_atts = " ".preg_replace("/=(?!\")(\S+)/m","=\"\\1\"",$atts);
    if($name=="img" && !strpos($str_atts,"alt=")) $str_atts.= " alt=\"\"";
    if(in_array($name,array("input","img","col","br","hr","meta"))) $name.= "/";
    if(substr($name,-1)=="/") { $name = substr($name,0,-1); return "<{$name}{$str_atts}/>"; }
    else return "<{$name}{$str_atts}>$content</$name>";
}

Examples

  echo tag("p","class=foo id=bar1","hello");
  echo tag("p",'class="foo" id="bar2"',"hey");
  echo tag("p",array("class"=>"foo","id"=>"bar3"),"heya");
  echo tag("img","src=https://kevcom.com/images/linux/linux.logo.2gp.jpg");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top