我有一个视频库,所有的标题都是由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部分($attachment_data['title']
)下面的附件标题(markup
)。
<?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();
?>
答案 0 :(得分:1)
试试这个:
$('.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
简写。 (read more about it)
答案 1 :(得分:0)
有几种方法可以让javascript和PHP进行交互。你可以使用ajax调用从客户端拉出来。如果你需要异步获取一堆数据,那可能就是这样。如果您将拥有此iframe的20个副本,您可以考虑使用AJAX调用来使用JSON提取整个数组/对象,然后您可以随心所欲地使用它们。
但是 ...我怀疑你每页只使用一次iframe。为每页一次的东西装配一些ajax可能有点矫枉过正。
如果你正确地将你的javascript放在你的页面上,你可以像IzzEps建议的那样做,只需将你的php值直接回显到iFrame中。但我知道大多数人喜欢将他们的javascript与.js文件中的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提供使用的对象。
答案 2 :(得分:0)
灯箱的开发人员有一个我已经部分实施的解决方案。要使标题出现在灯箱中,我需要从原始代码中回调:
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).'">';
有一篇类似的帖子也涵盖了这个答案,供参考: Title for iframe/video in magnific popup
再次感谢您的帮助!