如何将php内容放入javascript标记中


How to put php content into javascript markup?

我有一个视频库,所有的标题都是由php生成的。然而,这些视频的灯箱是用javascript定制的。如何将php标题放在iframe markup中?

请参阅此处:

    $('.video').Lightbox({
      type: 'iframe'
      iframe: {
         markup: '<div class="lightbox_container">'+
                    '<iframe class="iframe" frameborder="0" allowfullscreen></iframe>'+
                    '<div class="title"> <?php the_title();?> </div>'+
                  '</div>',
callbacks: {
    markupParse: function(template, values, item) {
     values.title = item.el.attr('title');
    }
    });

编辑

为了参考,我需要下面提到的javascript部分(markup)中的附件标题($attachment_data['title'])。

  <?php 
   $the_query = new WP_Query(array(
    'post_type' => 'attachment',
    'category_name' => 'video'
    )); 
   while ( $the_query->have_posts() ) : 
   $the_query->the_post();
  ?>
    <?php
 $attachment_data = wp_prepare_attachment_for_js( $attachment->ID );
      echo'<figure><a class="video" href="'.get_post_meta($post->ID, 'credit_url', true).'">';
      echo''.the_post_thumbnail ('medium').'';
      echo'<div class="photo-title"><h2>'.$attachment_data['title'].'</h2></div></a></figure>';?>
   <?php 
   endwhile; 
   wp_reset_postdata();
  ?>  

试试这个:

  $('.video').Lightbox({
  type: 'iframe'
  iframe: {
     markup: '<div class="lightbox_container">'+
                '<iframe class="iframe" frameborder="0" allowfullscreen></iframe>'+
                '<div class="title"> <?=the_title()?> </div>'+
              '</div>',
callbacks: {
markupParse: function(template, values, item) {
 values.title = item.el.attr('title');
}
});

注意<?=echo的简写。(阅读更多信息)

有几种方法可以让javascript和PHP进行交互。您可以使用ajax调用从客户端提取。如果您需要异步地获取一堆数据,那么可能就是这样。如果你要有这个iframe的20个副本,你可以考虑使用AJAX调用来用JSON提取一整列值/对象,然后你可以随心所欲地使用它们。

但是。。。我怀疑你每页只会用一次这个iframe。为每页一次的事情装配一些ajax可能有点过头了。

如果你把javascript放在你的页面上,你可以按照IzzEps的建议,简单地把php值直接回显到iFrame中。但我知道大多数人喜欢在.js文件中将javascript与html内容分开。这使它更易于维护。虽然并非不可能,但php最容易将内容放在.php文件中,而不是像js这样的文件。我没有任何让浏览器使用php文件作为脚本源的经验。

我发现最简单、最干净的是在.js文件中正常编写javascript,然后在脚本标记的顶部尽可能少地将变量添加到php文件中。

所以,在你的页面顶部,你可以做这样的事情:

<script>
    ObjectYoureWorkingWith.Title = '<?php echo $the_title(); ?>';
    var TitleObjectList = <?php echo json_encode($list_of_titles); ?>;
</script>

基本上,你可以将php中的输入输入到你正在使用的任何模块、对象、数组或变量中,然后你可以在任何需要的地方在javascript中引用它。这样你就不会被迫将所有的javascript都放在html中。您甚至可以使用json_encode(无论如何,这是javascript的原生对象表示法)对整个对象或对象集合执行此操作。

更新:我在手机上输入了上面的内容(这不是对这种事情做出回应的最佳方式)。让我展示一下我所描述的:

假设您的php中有20个想要使用的标题。您可以创建一个关联数组。使用一个Id或任何您想用来调用它的标识符。

$titleArray = [ 123 => 'Title1', 456 => 'Title2']; //(and so on....)

然后,在php页面上,您需要这些数据,请执行以下操作:

<script>
    var titleArray = <?php echo json_encode($titleArray); ?>;
</script>

这将允许您通过以下操作在该页面上访问它(或在该页面加载的js文件中):

var myFirstTitle = titleArray["123"]; //This will return "Title1"

json_encode将获取一个PHP对象,并将公共变量转换为javascript对象。只需将其回显到javascript变量,就可以为javascript提供要使用的对象。

lightbox的开发人员有一个我已经部分实现的解决方案。为了让标题出现在灯箱中,我需要从我的原始代码中回调:

callbacks: {
    markupParse: function(template, values, item) {
     values.title = item.el.attr('title');
    }

但我忽略了在PHP循环中包含标题,更正如下:

echo'<figure><a class="video" title="'.$attachment_data['title'].'" href="'.get_post_meta($post->ID, 'credit_url', true).'">';

有一篇类似的帖子也涵盖了这个答案,供参考:放大弹出中iframe/视频的标题

再次感谢您的帮助!