将HTML开始和结束标记转换为函数的最佳方法是什么?

时间:2016-09-21 07:44:41

标签: php html

我有一个复杂的HTML标记,有许多属性,它出现在代码的不同部分。

示例:

<div class="blabla" data-test="blablabla" ... data-another-attribute="blabla" >
    <some complex html code ... >
</div>

我不想在代码的不同部分重复此<div></div>及其所有属性,因为它在开发过程中经常发生变化。

如果我创建这样的函数(PHP中的示例):

function myDivStart() { ?>
    <div class="blabla" data-attribute="blablabla" data-another-attribute="blabla">
<?php }

然后我的结果代码看起来像

<?php myDivStart(); ?>
    <some html code ... >
</div>

并且整理</div>看起来有点不合适,因为没有视觉开始<div>。我的文本编辑器也没有正确解析它,语法高亮显示混乱。

然后,如果我为结束</div>创建另一个函数,它确实是一个非常愚蠢的函数:

function myDivEnd() { ?>
    </div>
<?php }

并将原始代码转换为

<?php myDivStart(); ?>
    <some html code ... >
<?php myDivEnd(); ?>

这可以解决语法高亮问题,但是关闭这样一个愚蠢的函数仍然感觉非常不洁净。

UPDATE:将HTML代码存储在变量中并将其传递给函数并不能真正解决问题,因为变量中的HTML无法通过语法高亮显示正确解析。

$myHTML = '<a href="...">A very long and complex piece of html</a>';
<?php myDiv($myHTML); ?>

我的文本编辑器没有语法高亮显示。 并且执行以下操作也会使代码无序,因为$ myHTML代码出现在<div>之前,实际上在逻辑上属于它之后。

$myHTML = ?>
    <a href="...">A very long and complex piece of html</a>
<?php ;
myDiv($myHTML);

是否有任何模式可以解决这个问题?

3 个答案:

答案 0 :(得分:1)

如果它始终是相同的标记,则可以使用变量或常量而不是函数。

E.g。

$openTag = "<div class=\"blabla\" data-test=\"blablabla\" ... data-another-attribute=\"blabla\" >";
$closeTag = "</div>";

如果您拥有该标签的不同部分,那么您可以确实创建一个函数,例如:

function openingDiv($class) {
     return "<div class=\"$class\" data-test=\"blablabla\" ... data-another-attribute=\"blabla\" >"
}

function closingDiv() {
      return "</div>";
}

你也可以让它变得更复杂:

function wrapContentInDiv($content) {
     return "<div class=\"$class\" data-test=\"blablabla\" ... data-another-attribute=\"blabla\" >$content</div>";
}

示例用途:

<?php 
$openTag = "<div class=\"blabla\" data-test=\"blablabla\" ... data-another-attribute=\"blabla\" >";
$closeTag = "</div>";
 ?>
 <leading html>
  ....

  <?php echo $openTag ?>
  <some html here> 
  <?php echo $closeTag ?>
  ...
  <?php echo $openTag ?>
  <some other html here> 
  <?php echo $closeTag ?>
  <trailing html>

您可以更进一步,并在单独的php文件中定义您的代码:

e.g。的的config.php

然后你可以:

  <?php 
  require_once("config.php") 
  ?>
  ...

更新:

您还可以使用模板,例如档案 complexDiv.php

<div class="blabla" data-test="blablabla" ... data-another-attribute="blabla" >

使用如下:

 <leading html>
  ....

  <?php //Set any parameters that complexDiv.php needs here
  include 'complexDiv.php' 
   ?>
  <some html here> 
  </div>
  ...
  <?php include 'complexDiv.php' ?>
  <some other html here> 
  </div>
  <trailing html>

我怀疑,不久之后你会意识到它值得切换到模板引擎,就像聪明的刀片一样。

答案 1 :(得分:0)

这取决于some HTML code是什么,但你可以做这样的伪代码

$some_html=''; //your html code goes here as a string

myDiv($some_html);

function myDiv( $arg ){
 echo <div class="blabla" data-attribute="blablabla" data-another-attribute="blabla">
  echo $arg;
 echo </div>
}

答案 2 :(得分:0)

您可以先在另一个文件上准备HTML,并将该文件包含在div标签等待它们包装您的内容的函数中。希望能帮助到你。

function wrapperDiv() {
     $html = '';
     $html .= '<div class="blabla" data-test="blablabla" ... data-another-attribute="blabla" >';
     $html .= include_once 'body.php';
     $html .= '</div>';
     return $html;
}

wrapperDiv();