PHP替换html文件中的“可编辑”区域

时间:2012-12-07 19:14:50

标签: php arrays forms template-engine

我正在开发一种工具来替换html文档中的标记区域。我已经看了几个php模板系统,但它们并不是我想要的,所以这就是我所追求的"引擎"系统的。模板本身没有php,我在文件中搜索关键字“可编辑”'设置可更新的区域。我不想使用数据库存储任何内容,而是从html文件本身读取所有内容。

它还有一些方面需要解决,但最重要的是,我需要在可编辑的数组中迭代的部分。区域并更新模板文件。

这是test.html(用于测试目的的模板文件):

<html>

<font class="editable">
This is editable section 1
</font>
<br><br><hr><br>
<font class="editable">
This is editable section 2
</font>

</html>

我希望能够更新可编辑的&#39;部分通过一组形式textareas。这还需要一些工作,但就我而言:

<?php

function g($string,$start,$end){ 
     preg_match_all('/' . preg_quote($start, '/') . '(.*?)'. preg_quote($end, '/').'/i', $string, $m); 
     $out = array(); 

     foreach($m[1] as $key => $value){ 
       $type = explode('::',$value); 
       if(sizeof($type)>1){ 
          if(!is_array($out[$type[0]])) 
             $out[$type[0]] = array(); 
          $out[$type[0]][] = $type[1]; 
       } else { 
          $out[] = $value; 
       } 
     } 
  return $out; 
}; 

// GET FILES IN DIR
   $directory="Templates/";
   // create a handler to the directory
    $dirhandler = opendir($directory);
    // read all the files from directory
    $i=0;
    while ($file = readdir($dirhandler)) {
        // if $file isn't this directory or its parent 
        //add to the $files array
        if ($file != '.' && $file != '..')
        {
                $files[$i]=$file; 
          //echo $files[$i]."<br>";
          $i++;                
        }   
    };
//echo $files[0];

?>

<div style="float:left; width:300px; height:100%; background-color:#252525; color:#cccccc;">
<form method="post" id="Form">
Choose a template:
<select>
<?php
// Dropdown of files in directory
foreach ($files as $file) {
  echo "<option>".$file."</option>"; // do somemething to make this $file on selection. Refresh page and populate fields below with the editable areas of the $file html
};
?>
</select>
<br> 
<hr>
Update these editable areas:<br>

<?php


$file = 'test.html';  // make this fed from form dropdown (list of files in $folder directory)
$html = file_get_contents($file);

$start = 'class="editable">';
$end = '<';

$oldText = g($html,$start,$end);

$i = 0;
foreach($oldText as $value){
  echo '<textarea value="" style="width: 60px; height:20px;">'.$oldText[$i].'</textarea>';  // create a <textarea> that will update the editable area with changes
  // something here
  $i++;
};

// On submit, update all $oldText values in test.html with new values.
?>
<br><hr>
&nbsp;<input type="submit" name="save" value="Save"/>  
</div>
<div style="float:left; width:300px;">
<?php include $file; // preview the file from dropdown. The editable areas should update when <textareas> are updated ?>
</div>
<div style="clear:both;"></div>

我知道这个答案有点复杂,但我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您想要实现的目标。但似乎我会在jquery中这样做。

您可以获取具有“editable”类的所有html元素,如下所示:

$(".editable")

您可以使用以下内容进行迭代:

$(".editable").each(function(index){
    alert($(this).text()); // or .html()
    // etc... do your stuff
});

如果您拥有php数组中的所有数据。您只需要使用json将其传递给客户端。在javascript标签中使用php print。

<?php

print "var phparray = " . json_encode($myphparray);

?>

我认为将工作放在客户端(javascript)会更好。它将降低服务器工作负载(PHP)。

但正如我所说,我不认为我已经掌握了你想要的一切。