-1

我使用记录不同实体的 CMS ELGG (http://www.elgg.org),我创建了一个页面,列出了所有的海报和带有一些 javascript 的 html,以允许内部用户打印预先格式化的列表,但也可以选择 javascript 打印或不打印这些实体

所以我想保存这个页面,可能在一个 textarea 字段中,所以用户可以检索这个页面。如果我在 textarea 标记内运行所有函数,php 变量可以工作,但不允许 javascript 设置表单,则与我在这些实体前面插入的复选框也有冲突,允许选择打印或不打印,这样做在文本区域内不起作用...

所以我不知道如何保存这个页面并允许用户保存多个这种类型的页面,以便它可以使用多个模型。

我已经阅读了几个此类关于 php 函数 ob ob flush start 的问题......但我没有找到任何适合我的东西

如果有人对我有什么想法...

谢谢 ;)

来自 php 文件的示例

<div id="engagements" class="blockcv">
    <div class="comptitrecv"><input type="checkbox" value="" id="printengagements" class="checkprint" checked="checked"/> Engagement citoyen</div>
   <script type="text/javascript">
function sortDescending(a, b) {
     var date1  = $(a).find("span").text();
       date1 = date1.split('/');
     date1 = new Date(date1[1], date1[0] -1, 1);
     var date2  = $(b).find("span").text();
       date2= date2.split('/');
     date2 = new Date(date2[1], date2[0] -1, 1);

     return date1 < date2 ? 1 : -1;
    };
    $(document).ready(function() {
        $('.shakeengagements .elementengagements').sort(sortDescending).appendTo('.shakeengagements');
    }); 
</script>
<div class="shakeengagements">
     <?php
$user = $_SESSION['user'];
$count_experiences = count_user_objects($user->guid, "experience");
$experiences = get_user_objects($user->guid, "experience", 99);
foreach ($experiences as $ent) { 
 ?>
  <script type="text/javascript">  
 $(document).ready(function() {
  $('#hide<?php echo $ent->guid; ?>').change(function(){
    if($(this).is(":checked")) {
        $('div#hidediv<?php echo $ent->guid; ?>').removeClass("noprint");
    } else {
        $('div#hidediv<?php echo $ent->guid; ?>').addClass("noprint");
    }
});
});
  </script>
<div class="elementengagements" id="hidediv<?php echo $ent->guid; ?>">
<div class="cvelleft">
<p><span><input type="checkbox" value="" id="hide<?php echo $ent->guid; ?>" class="checkprint" checked="checked"/>
<?php 
    $classementdates = $ent->ongoing;
    $enddate = $ent->enddate;
    if ($classementdates == 'ongoing') {
     echo '<span class="date">'; 
     echo $ent->startdate; 
     echo '<font style="display:none">9</font></span> - ';
     echo elgg_echo('resume:acejour');
     } else {
            if(empty($enddate)) {
                     echo '<span class="date">'; 
     echo $ent->startdate; 
     echo '<font style="display:none">9</font></span>';

            } else {
         echo $ent->startdate;
         echo ' - <span>';
         echo  $ent->enddate;
         echo '</span>';
     } 

     }
     ?> </span>:</p>
</div>
<div class="cvelright"> 
<p><?php echo $ent->heading; ?> - <?php echo $ent->structure; ?></p>
<p><?php echo $ent->remarques; ?></p>
</div>
</div>
<?php   } ?>
</div>
</div>
4

1 回答 1

0

不太清楚你到底想做什么,但对我来说,听起来你想要渲染上面的内容,然后出现在textarea?

如果你想这样做,那么我不明白为什么 ob_start 如果它在同一页面上将不起作用:

ob_start();
//your code that you want to appear in the textarea
$output = ob_get_clean();

echo "<textarea>".$output."</textarea>";

如果它是一个单独的页面,那么你总是可以这样做:

$output = file_get_contents("/path/to/php_file.php");
echo "<textarea>".$output."</textarea>";

如果您希望能够以textareaHTML 格式阅读,那么我还可以htmlentities($output)textarea标签中提出建议,即:

echo "<textarea>".htmlentities($output)."</textarea>";

但请注意,如果您将 textarea 提交到要保存的表单,您会看到很多 HTML 实体,例如,版权符号 - © - 将转换为 & 复制;(注意:我必须在 & 和副本之间放置一个空格;否则你看不到我的意思) - 但显然它是一样的。

更新

您可以为此使用 jQuery,它应该可以工作 - 首先在div with id:参与will get copied into thetextarea . If you don't want the javascript (or anything else) to appear in thetextarea , then don't put it wihin thediv . I'd keep the below out of thatdiv` 中的所有内容...

<input type="checkbox" id="form_submit" name="form_submit" value="yes">
<textarea id="output"></textarea>
<script>
    $(document).read(function(){
        $("#form_submit").click(function(){
            if($(this).checked){
                $("#output").val($("#engagements").text());
            }
        }
    });
</script>

以上内容未经测试,但理论上应该有效!

于 2012-02-11T12:46:18.550 回答