【问题标题】:display php echo output in popup window在弹出窗口中显示 php echo 输出
【发布时间】:2018-06-29 13:08:43
【问题描述】:

我有以下代码,在弹出窗口中使用 php echo 为特定供应商输出条款和条件数据 (agb)。只要只有一个供应商,这就可以正常工作。当列出其他供应商时,新窗口中显示的数据与第一个供应商的数据相同。

据我了解,javascript 是在 PHP 之外执行的,因此字符串输出的值不会更新(因为缺少目标?)并且始终引用第一个供应商,即 JavaScript 代码将始终填充新窗口具有相同的内容。

我想我需要传递一个供应商 ID 或类似于 javascript 函数。但我怎样才能做到这一点?

PHP

<?php if ($_v->getId()): ?>  
<p>Seller: <?php echo $_v->getVendorName() ?> </p>  
<a href="" class="new-window">terms & conditions</a> 

<div style="display:none;">
    <div id="agb-text"><?php echo $_v->getData('agb')?></div>
</div>

JS:

<script type='text/javascript'>    
    jQuery(function($) {
        $('a.new-window').click(function(){

        var recipe =  window.open('','PrintWindow','width=600,height=600');
        var html = '<html><head><title>AGB</title></head><body><div id="my-id">' + $('<div />').append($('#agb-text').clone()).html() + '</div></body></html>';
        recipe.document.open();
        recipe.document.write(html);
        recipe.document.close();

    return false;
    });
});
</script>

【问题讨论】:

  • 好的,看起来您正在预先构建弹出内容,然后使用 javascript 简单地将预先构建的子 html 传送到窗口中。由于您使用的是 window.open (而不是模式)...您可以改为针对内容的 php url,而不是穿梭。
  • 另一种方法是使用 modal 和 ajax,然后使用传递的 id 为新的 html 内容点击 php。涉及更多一点,但在演示中更“精明”。
  • @IncredibleHat,感谢您提供的替代方案!

标签: javascript php echo window.open


【解决方案1】:

您总是在弹出窗口中看到相同文本的原因是因为您保存文本的 div 具有相同的 ID 为agb-text,并且只能设置 1 个具有该名称的 ID,其他 ID 将被忽略。所以你最好使用类和数据属性。

你可以这样做:

<?php if ($_v->getId()): ?>  
<p>Seller: <?php echo $_v->getVendorName() ?> </p>  
<a href="" class="new-window" data-vendor="<?php echo $_v->getVendorID();?>">terms & conditions</a> 

<div style="display:none;">
    <div id="agb-text-<?php echo $_v->getVendorID();?>"><?php echo $_v->getData('agb')?></div>
</div>

<script type='text/javascript'>    

    jQuery(function($) {
        $('a.new-window').click(function(){
            var vendorID = $(this).data("vendor");
            var recipe =  window.open('','PrintWindow','width=600,height=600');
            var html = '<html><head><title>AGB</title></head><body><div id="my-id">' + $('<div />').append($('#agb-text-' + vendorID).clone()).html() + '</div></body></html>';
            recipe.document.open();
            recipe.document.write(html);
            recipe.document.close();

            return false;

        });
    });

</script>

我假设您拥有$_v-&gt;getVendorID() 功能,但如果您没有,请创建一个或使用更适合您的东西来为每个供应商生成独特的价值。

Sretno :)

【讨论】:

  • 这正是解决方案!非常感谢,对你有很大帮助。
  • 我对这种方法唯一关心的是,系统中的每个供应商都会在页面上隐藏生成 html。如果每个块都有每个供应商的敏感信息,那么“查看源代码”的任何人都可以看到它;)但如果该信息不是那么具体,则此方法有效。
  • @IncredibleHat 我同意,我个人会使用 ajax 来执行此操作,特别是如果单个页面上将有多个供应商,因此它不会增加加载时间页面必须呈现大量协议。
  • 好点。我需要在开发过程中考虑它。据我判断,这些信息不会是敏感的。
  • @Igor Ilic,另一个好点,每次只有少数供应商,所以这似乎是一个可行的解决方案。
【解决方案2】:

尝试使用 ajax 请求来获取您的数据,并使用 onclick=&lt;?php echo $_v-&gt;getId(); ?&gt; 传递您的 id。

但是,你需要制作控制器来获取ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多