PDF文件打开新选项卡 -- 7 领域 和 entities 领域 和 javascript 领域 和 files 领域 drupal 相关 的问题

PDF file open new tab


0
vote

问题

中文

我正在使用drupal 7.我的主题omega。并在我的网站中获得了文件字段。上传所有PDF文件和所有工作。

但是,当我单击Firefox上的PDF文件时,我的PDF文件开始下载。当我点击Chrome时,PDF在同一页面上打开。

由Firebug检查,PDF文件HTML代码在此处:

  <span class="file"><img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon"> <a title="myfile.pdf" type="application/pdf; length=1620377" href="http://mysite.net/sites/default/files/myfile.pdf">Click to Download</a></span>   

我想在单击pdf文件时,打开一个新选项卡,所以制作属性。 drupal文件模块是(file.js):

   *  * This file provides progress bar support (if available), popup windows for  * file previews, and disabling of other file fields during Ajax uploads (which  * prevents separate file fields from accidentally uploading files).  */  (function ($) {  /**  * Attach behaviors to managed file element upload fields.  */ Drupal.behaviors.fileValidateAutoAttach = {   attach: function (context, settings) {     if (settings.file && settings.file.elements) {       $.each(settings.file.elements, function(selector) {         var extensions = settings.file.elements[selector];         $(selector, context).bind('change', {extensions: extensions}, Drupal.file.validateExtension);       });     }   },   detach: function (context, settings) {     if (settings.file && settings.file.elements) {       $.each(settings.file.elements, function(selector) {         $(selector, context).unbind('change', Drupal.file.validateExtension);       });     }   } };  /**  * Attach behaviors to the file upload and remove buttons.  */ Drupal.behaviors.fileButtons = {   attach: function (context) {     $('input.form-submit', context).bind('mousedown', Drupal.file.disableFields);     $('div.form-managed-file input.form-submit', context).bind('mousedown', Drupal.file.progressBar);   },   detach: function (context) {     $('input.form-submit', context).unbind('mousedown', Drupal.file.disableFields);     $('div.form-managed-file input.form-submit', context).unbind('mousedown', Drupal.file.progressBar);   } };  /**  * Attach behaviors to links within managed file elements.  */ Drupal.behaviors.filePreviewLinks = {   attach: function (context) {     $('div.form-managed-file .file a, .file-widget .file a', context).bind('click',Drupal.file.openInNewWindow);   },   detach: function (context){     $('div.form-managed-file .file a, .file-widget .file a', context).unbind('click', Drupal.file.openInNewWindow);   } };  /**  * File upload utility functions.  */ Drupal.file = Drupal.file || {   /**    * Client-side file input validation of file extensions.    */   validateExtension: function (event) {     // Remove any previous errors.     $('.file-upload-js-error').remove();      // Add client side validation for the input[type=file].     var extensionPattern = event.data.extensions.replace(/,s*/g, '|');     if (extensionPattern.length > 1 && this.value.length > 0) {       var acceptableMatch = new RegExp('\.(' + extensionPattern + ')$', 'gi');       if (!acceptableMatch.test(this.value)) {         var error = Drupal.t("The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.", {           '%filename': this.value,           '%extensions': extensionPattern.replace(/|/g, ', ')         });         $(this).parents('div.form-managed-file').prepend('<div class="messages error file-upload-js-error">' + error + '</div>');         this.value = '';         return false;       }     }   },   /**    * Prevent file uploads when using buttons not intended to upload.    */   disableFields: function (event){     var clickedButton = this;      // Only disable upload fields for Ajax buttons.     if (!$(clickedButton).hasClass('ajax-processed')) {       return;     }      // Check if we're working with an "Upload" button.     var $enabledFields = [];     if ($(this).parents('div.form-managed-file').size() > 0) {       $enabledFields = $(this).parents('div.form-managed-file').find('input.form-file');     }      // Temporarily disable upload fields other than the one we're currently     // working with. Filter out fields that are already disabled so that they     // do not get enabled when we re-enable these fields at the end of behavior     // processing. Re-enable in a setTimeout set to a relatively short amount     // of time (1 second). All the other mousedown handlers (like Drupal's Ajax     // behaviors) are excuted before any timeout functions are called, so we     // don't have to worry about the fields being re-enabled too soon.     // @todo If the previous sentence is true, why not set the timeout to 0?     var $fieldsToTemporarilyDisable = $('div.form-managed-file input.form-file').not($enabledFields).not(':disabled');     $fieldsToTemporarilyDisable.attr('disabled', 'disabled');     setTimeout(function (){       $fieldsToTemporarilyDisable.attr('disabled', '');     }, 1000);   },   /**    * Add progress bar support if possible.    */   progressBar: function (event) {     var clickedButton = this;     var $progressId = $(clickedButton).parents('div.form-managed-file').find('input.file-progress');     if ($progressId.size()) {       var originalName = $progressId.attr('name');        // Replace the name with the required identifier.       $progressId.attr('name', originalName.match(/APC_UPLOAD_PROGRESS|UPLOAD_IDENTIFIER/)[0]);        // Restore the original name after the upload begins.       setTimeout(function () {         $progressId.attr('name', originalName);       }, 1000);     }     // Show the progress bar if the upload takes longer than half a second.     setTimeout(function () {       $(clickedButton).parents('div.form-managed-file').find('div.ajax-progress-bar').slideDown();     }, 500);   },   /**    * Open links to files within forms in a new window.    */   openInNewWindow: function (event) {     $(this).attr('target', '_new');     window.open(this.href, 'filePreview', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=500,height=550');     return false;   } };  })(jQuery);   

我没有page.tpl文件,所以这个jQuery必须或另一种方式。我该怎么办?

英文原文

I'm using Drupal 7. My theme Omega. And have got file field in my site. Uploaded all pdf files and everything working.

But, when i click pdf files on Firefox, my pdf file starting download. When i click on Chrome, pdf open in same page.

Checked by Firebug, pdf file html code is here:

<span class="file"><img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon"> <a title="myfile.pdf" type="application/pdf; length=1620377" href="http://mysite.net/sites/default/files/myfile.pdf">Click to Download</a></span> 

I want when click pdf file, open a new tab, so make attribute. Drupal file module is (file.js):

 *  * This file provides progress bar support (if available), popup windows for  * file previews, and disabling of other file fields during Ajax uploads (which  * prevents separate file fields from accidentally uploading files).  */  (function ($) {  /**  * Attach behaviors to managed file element upload fields.  */ Drupal.behaviors.fileValidateAutoAttach = {   attach: function (context, settings) {     if (settings.file && settings.file.elements) {       $.each(settings.file.elements, function(selector) {         var extensions = settings.file.elements[selector];         $(selector, context).bind('change', {extensions: extensions}, Drupal.file.validateExtension);       });     }   },   detach: function (context, settings) {     if (settings.file && settings.file.elements) {       $.each(settings.file.elements, function(selector) {         $(selector, context).unbind('change', Drupal.file.validateExtension);       });     }   } };  /**  * Attach behaviors to the file upload and remove buttons.  */ Drupal.behaviors.fileButtons = {   attach: function (context) {     $('input.form-submit', context).bind('mousedown', Drupal.file.disableFields);     $('div.form-managed-file input.form-submit', context).bind('mousedown', Drupal.file.progressBar);   },   detach: function (context) {     $('input.form-submit', context).unbind('mousedown', Drupal.file.disableFields);     $('div.form-managed-file input.form-submit', context).unbind('mousedown', Drupal.file.progressBar);   } };  /**  * Attach behaviors to links within managed file elements.  */ Drupal.behaviors.filePreviewLinks = {   attach: function (context) {     $('div.form-managed-file .file a, .file-widget .file a', context).bind('click',Drupal.file.openInNewWindow);   },   detach: function (context){     $('div.form-managed-file .file a, .file-widget .file a', context).unbind('click', Drupal.file.openInNewWindow);   } };  /**  * File upload utility functions.  */ Drupal.file = Drupal.file || {   /**    * Client-side file input validation of file extensions.    */   validateExtension: function (event) {     // Remove any previous errors.     $('.file-upload-js-error').remove();      // Add client side validation for the input[type=file].     var extensionPattern = event.data.extensions.replace(/,\s*/g, '|');     if (extensionPattern.length > 1 && this.value.length > 0) {       var acceptableMatch = new RegExp('\\.(' + extensionPattern + ')$', 'gi');       if (!acceptableMatch.test(this.value)) {         var error = Drupal.t("The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.", {           '%filename': this.value,           '%extensions': extensionPattern.replace(/\|/g, ', ')         });         $(this).parents('div.form-managed-file').prepend('<div class="messages error file-upload-js-error">' + error + '</div>');         this.value = '';         return false;       }     }   },   /**    * Prevent file uploads when using buttons not intended to upload.    */   disableFields: function (event){     var clickedButton = this;      // Only disable upload fields for Ajax buttons.     if (!$(clickedButton).hasClass('ajax-processed')) {       return;     }      // Check if we're working with an "Upload" button.     var $enabledFields = [];     if ($(this).parents('div.form-managed-file').size() > 0) {       $enabledFields = $(this).parents('div.form-managed-file').find('input.form-file');     }      // Temporarily disable upload fields other than the one we're currently     // working with. Filter out fields that are already disabled so that they     // do not get enabled when we re-enable these fields at the end of behavior     // processing. Re-enable in a setTimeout set to a relatively short amount     // of time (1 second). All the other mousedown handlers (like Drupal's Ajax     // behaviors) are excuted before any timeout functions are called, so we     // don't have to worry about the fields being re-enabled too soon.     // @todo If the previous sentence is true, why not set the timeout to 0?     var $fieldsToTemporarilyDisable = $('div.form-managed-file input.form-file').not($enabledFields).not(':disabled');     $fieldsToTemporarilyDisable.attr('disabled', 'disabled');     setTimeout(function (){       $fieldsToTemporarilyDisable.attr('disabled', '');     }, 1000);   },   /**    * Add progress bar support if possible.    */   progressBar: function (event) {     var clickedButton = this;     var $progressId = $(clickedButton).parents('div.form-managed-file').find('input.file-progress');     if ($progressId.size()) {       var originalName = $progressId.attr('name');        // Replace the name with the required identifier.       $progressId.attr('name', originalName.match(/APC_UPLOAD_PROGRESS|UPLOAD_IDENTIFIER/)[0]);        // Restore the original name after the upload begins.       setTimeout(function () {         $progressId.attr('name', originalName);       }, 1000);     }     // Show the progress bar if the upload takes longer than half a second.     setTimeout(function () {       $(clickedButton).parents('div.form-managed-file').find('div.ajax-progress-bar').slideDown();     }, 500);   },   /**    * Open links to files within forms in a new window.    */   openInNewWindow: function (event) {     $(this).attr('target', '_new');     window.open(this.href, 'filePreview', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=500,height=550');     return false;   } };  })(jQuery); 

I don't have page.tpl files, so must this jQuery or another way. How can i do this?

           
     
     

回答列表

0
 
vote
vote
最佳答案
 

Patrick是正确的,这更像是如何不同的浏览器(以及用户的单个设置)而不是模板的任何问题。表示有一些研究支持( useit.com )至少试图实现这一点用户的功能,但它可能在Drupal的范围之外,因此如果您想要这样,您将需要更新您的主题以重写这些链接以添加PDF文件的jQuery覆盖,例如:

www。 WebCredible.co.uk/User-Friendly-resources/dom-scripting/pdf-new-window.shtml

 

Patrick is right that this is more of a issue with how different browsers (and the users' individual settings) than anything with your template. That said there is some research support (useit.com) for at least trying to implement this functionality for users but its probably outside the scope of Drupal so if you want this, you're going to need to update your theme to rewrite these links to add a jquery override for PDF files, like this one:

http://www.webcredible.co.uk/user-friendly-resources/dom-scripting/pdf-new-window.shtml

 
 
-1
 
vote
如果有任何其他人具有相同的问题,我推荐外部链接模块。要为PDF文件使用此模块,只需键入。*。PDF在匹配模式字段中,小心键入完整的正则表达式,以避免与JavaScript冲突。 对于该过程的一些屏幕截图,请遵循: http://www.inqbation .com / open-pdf-files-in-new-tab / ......这很简单。
 

In case anybody else have the same problem, I recommend the External Links module. To use this module for PDF files, just type .*.pdf in the matching pattern field, being careful of typing the complete regular expression, to avoid conflicts with the javascript. For some screenshots of the process, follow: http://www.inqbation.com/open-pdf-files-in-new-tab/ ... It is pretty simple.

 
 
 
 

相关问题

5  如何在“设置数据值”直接输入模式下包含规则变量(文本)  ( How to include a rule variable text in set a data value direct input mode ) 
最初在规则发行队列中发布了这一点( http://drupal.org/node/1547160 )但随后看到过去2周的帖子有多少些帖子有任何回复。可怕! 在设置数据值(文本)时,我无法在直接输入模式下包含规则变量(也是文本)。我最初尝试这样做,以通过节点列表循环,从字段中建立一个大字符串。为了可以理解,我将这减少...

1  未定义的偏移,CCK字段  ( Undefined offset cck field ) 
我一直在收到以下PHP注意: 注意:未定义的偏移量:9 IN include()(节点的第89行 - name .tpl.php)。 这是代码: <?php // loops through array to print out addendum pdf's. for ($i = 0; $i < 10; $...

0  从新内容表单中删除字段  ( Removing a field from the new content form ) 
我创建了一种内容类型,它由标题为.zip文件和使用drupal 7的站点构建器的屏幕截图组成。 当用户添加此内容类型的实例时,我希望它们仅为.zip文件和标题具有公开的字段。我有一个自定义模块,解压缩.zip文件,并进行一些分析,我想此时提取屏幕截图。 无论如何,我可以拥有我内容类型的新内容形式未显示屏幕截图字段...

1  直接链接查看未发布的节点导致重定向循环  ( Direct link to view unpublished node causes redirect loop ) 
当我取消发布节点并在没有权限的情况下拥有另一个用户来查看尝试访问该节点的未发布内容(例如通过外部链路)它将生成重定向循环。它只是一堆302到同一页面,直到浏览器停止它。 我希望"访问被拒绝" 页面。什么可能导致重定向到同一页面? 禁用"全局重定向" 模块没有效果。我也没有与它相关的任何规则或模块代码。 更新: ...

1  模块更换(Linodef)  ( Module replacement linodef ) 
是否有人知道 linodef 模块?我们正在从Drupal 6升级到Drupal 7,并需要弄清楚替换Linodef功能的方法。我尝试更新模块,但这似乎是一个令人生畏的任务。 任何帮助非常感谢。 ...

1  如何同步两种不同的内容类型?  ( How to sync two different content types ) 
我要为杂志构建一个网站。我有两个不同的内容类型。在第一个,我将发布第一页杂志。但在第二个是文章。 现在,我的问题是: 我想只是展示与顶部显示的问题有关的文章。我知道如何显示包含第一页的第一个内容类型的最新内容,但我不知道如何在它下面显示其文章。我猜,我会使用视图,但我不知道如何。 更清晰:我想要像这个网站。 ...

2  如何设置登陆页面和首页?  ( How do i set up both a landing page and front page ) 
这是我想要实现的行为。 如果在我们的域名www.mysite.com中的用户类型,我希望它们转到一个页面,描述我们的网站。它可以被称为www.mysite.com/landing。 但如果他们在网站上的任何地方击中徽标或主页按钮,我希望它们进入不同的页面,在配置中定义的页面。网站信息。它被称为www.mysite.c...

0  添加一个按钮或文本链接到内容的视图(Drupal 7)  ( Adding a button or text link to a contents view drupal 7 ) 
我想将链接或按钮添加到我的内容的主视图(即,?q = node / 120),它将用户重定向到节点已经参考的Java applet。 是否有一种简单的方法来添加这样的按钮或链接? ...

0  如何在Drupal 7中插入CCK输入表单中的块?  ( How to insert a block within a cck input form in drupal 7 ) 
我想在drupal 7中插入CCK输入字段中的块。我创建了一个块,该块将显示所有自定义内容类型和在树结构和类别中使用这些内容类型创建的节点,来自Magento的子类别。每次动态地填充树值。 我想在CCK输入表单中显示该树,以使用户能够进行选择。我正在尝试使用 hook_theme 在 hook_form_...

0  我的关系中的用户头像:朋友阻止  ( User avatars on my relationships friends block ) 
我已经阅读了几个关于通过视图执行此操作的教程,但我想知道是否可以通过用户关系修改在框中创建的块而无需创建视图。 我使用以下版本进行模块; -ur 7.x-1.0-alpha4 ...

2  以编程方式从hook_node_insert(drupal 7)设置图像字段  ( Programmatically setting an image field from hook node insert drupal 7 ) 
我有一个包含文件字段(仅接受.zip文件)的内容类型和一个是图像字段的屏幕截图,并不显示在内容提交表单上。相反,我有一个模块,它从hook_node_insert中解压缩.zip文件。此时,我还想将屏幕截图设置为从.zip文件中提取的.png。到目前为止,我没有成功,我似乎总是得到这样的错误: PDOExcept...

1  如何创建“相关内容”视图,但是将其显示为具有URL别名的页面?  ( How can i create a related content view but display it as a page with an url a ) 
我已经创建了一个"相关内容" 视图,但将其显示为页面,而不是更传统上是一个块。 假设我有三种内容类型,事件,照片和扬声器。每个照片和扬声器节点都有一个实体引用对事件节点。 照片----&gt;事件&lt; ----扬声器 当我查看一个事件节点时,我希望有一个页面的链接,该页面显示引用该事件和类似链接/页面以显示引用...

0  在预处理中更改脚本[重复]  ( Change script in preprocess ) 
这个问题已经在这里有答案: 关闭 9年前。 可能的重复: 如何更新jquery我可以下载的最新版本? 我需要在drupal 7中从1.5到1.7升级jquery。 在Drupal 6中我可以...

0  在欧米茄上使用DIV上的课程  ( Use a class on a div on specific content with omega ) 
我正在使用drupal 7,我的主题是 omega 。我有一个类别" mask " ,它的CSS代码如下: .mask { background:url("../img/header_mask.png") repeat-x scroll 0 0 transparent; height:200px;...

3  允许另一个角色编辑任何节点的部分  ( Allow another role to edit only parts of any node ) 
我有一个具有"主题" 字段的节点,该字段是分类学参考。节点由用户提交,用户只能编辑自己的节点。 如何允许"主持人" 角色能够编辑任何节点的主题字段,而不是这些节点上的任何其他字段? ...

0  建议链接内容类型  ( Suggest linking of content types ) 
我有两个OG组 - 组织和电子罩。和组内容类型 - 目标和想法。我希望用户有一个建议功能,使人们能够基本上链接组和组内容。也应该调节链接。 是否有一个模块,这是这样的?或者,如果有人可以给我一个努力的方向,我也可以解决它。我正在使用Drupal 7,在Drupal有有限的知识。 谢谢! ...

3  您如何创建包含来自用户配置文件字段的块?  ( How do you create a block that contains fields from the user profile ) 
我尝试使用此处的一个答案中描述的方法:如何将用户配置文件放在块中 我创建了一个块并使用以下PHP代码作为测试; <?php render(user_view($account)); ?> 它没有工作。所以问题仍然存在,如何使用PHP创建一个块并将用户配置文件字段调用到其中? ...

1  如何使用过滤器创建搜索表单?  ( How do i create a search form with filters ) 
我必须为自定义帖子类型创建一个搜索表单,我需要它有一个搜索框和一些不同的(可选)搜索选项的选择列表。我知道我只能拥有搜索文本字段,然后在结果页面中公开过滤器,但这不是我正在寻找的。 这可能吗?我需要哪些模块/要求? ...

0  如何基于MENU_NAME隐藏块  ( How to hide blocks based on menu name ) 
我是一个带有主菜单的网站和子菜单作为块。如果我在节点"50" 上,我想隐藏每个子菜单,除了子菜单,链接到节点"50" 。 问题:如何根据它的变量MENU_NAME隐藏一个块(我认为它是这个变量)而没有JavaScript。 这是一个线框,所以你可以概述。 ...

0  D7视图3博客存档块  ( D7 views 3 blog archive block ) 
我需要用浏览观点建立一个"博客档案" 块3.我见过(当前正在使用) 跟随链接方法,摘要输出依赖于所选上下文过滤器。例如,如果您使用内容:创建的年份+月,您的链接就像 base_path / yyyymm - 在月和年之间没有分离。同样,如果你使用内容:创建的年份或内容:创建日期上下文过滤器,您得到一个字符串输出....




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.