0

我在 WordPress 网站上使用 Fancyapps 的 FancyBox,它很棒。唯一的事情是客户想要添加下载或查看 PDF 的功能。

因此,当您单击站点上的图像时,您会看到 FancyBox 模态窗口显示该图像的大版本。在 FancyBox 模态窗口的右下角,我添加了一个按钮,上面写着“PDF”。

单击“PDF”按钮时,我需要能够将 PDF 附加到 WordPress 中的每个帖子并下载/显示相关的 PDF(取决于您的浏览器和插件)。

我找到了在 fancybox 源目录 (jquery.fancybox.pack.js) 中添加 PDF 按钮的位置,但我不知道链接到附加到每个帖子的 PDF 的全局变量是什么。

这是代码(第 34 行):

if(c=a.current.title)c=d('<div class="fancybox-title fancybox-title-'+b.type+'-wrap">'+c+"</div><a class='pdf_dl' href='{href}' target='blank'>PDF</a>").appendTo("body"),"float"===b.type&&(c.width(c.width()),c.wrapInner('<span class="child"></span>'),a.current.margin[2]+=Math.abs(parseInt(c.css("margin-bottom"),10))),c.appendTo("over"===b.type?a.inner:"outside"===b.type?a.wrap:a.skin)}};d.fn.fancybox=function(b){var c=d(this),e=this.selector||"",f,g=function(g){var h=this,j=f,k;!g.ctrlKey&&!g.altKey&&!g.shiftKey&&!g.metaKey&&!d(h).is(".fancybox-wrap")&&

有任何想法吗?我可能会以错误的方式解决这个问题。谢谢!

4

1 回答 1

0

这里有两个相关主题

客户端:Fancybox

正如您所说,您需要更改 Fancybox 窗口并添加下载链接。我认为操纵 Fancybox 的原始源文件是一个坏主意(您甚至似乎已经发布了难以阅读的缩小生产版本的一部分)。如果 Fancybox 的新版本发布,你会怎么做?您必须手动将更改移植到新版本。

相反,请使用Fancybox 提供的回调。例如,将您自己的 javascript 挂接到beforeShow回调中并在那里操作 Fancybox 窗口元素。您需要选择 URL(见下文)并创建所需的链接。

服务器端:Wordpress

为了知道您应该链接到哪个PDF 文件,Wordpress 需要将 URL 放入页面中。您可能希望隐藏它,因为您只在打开 Fancybox 时才显示它。一种简单的方法是使用隐藏链接:

<a href="/wp-content/uploads/myfile.pdf" id="pdflink" style="display: none;"></a>

实施取决于您的需求。在您的 Wordpress 主题中,您可以使用wp_get_attachment_url()get_posts()从数据库中获取信息。

以下是如何将 Wordpress 示例代码修改为返回任何帖子的第一个 PDF 附件 URL 的函数的建议(但未经测试):

function getPdfUrlForPost( $postId ){
    $args = array(
        'post_type' => 'attachment',
        'numberposts' => -1,
        'post_status' => null,
        'post_parent' => $postID
    );

    $attachments = get_posts( $args );
    if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
          $url = wp_get_attachment_url( $attachment->ID );   
          if( substr(strrchr($url,'.'), 1) == 'pdf' ){
              return $url
          }
        }
        return false;
     }
}
于 2012-06-25T12:16:40.653 回答