0

我正在开发一种工具来替换 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>

我希望能够通过一组表单文本区域更新“可编辑”部分。这仍然需要一些工作,但据我所知:

<?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>

我知道这个答案涉及更多,但我非常感谢任何帮助。

4

1 回答 1

1

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

您可以获得所有具有“可编辑”类的 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)。

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

于 2012-12-07T19:32:36.267 回答