我有一个视频库,所有的标题都是由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/视频的标题
再次感谢您的帮助!