我正在使用Jquery PrettyPhoto进行幻灯片放映,但它不允许用户下载图像。任何人都知道如何添加链接,以便用户可以下载图像?
这是我的代码:(我在Yii中使用prettyPhoto Widget,但是对于prettyPhoto的任何答案都会很棒)
<?php
$this->beginWidget('ext.prettyPhoto.PrettyPhoto', array(
'id'=>'pretty_photo',
// prettyPhoto options
'options'=>array(
'opacity'=>0.60,
'modal'=>true,
),
));
?>
<div class="column4-front image-gallery">
<a href="/files/show/<?php echo $data->image; ?>" rel="prettyPhoto[pp_gal]" title="<?php echo $data->caption; ?>">
<img src="/files/show/thumb/<?php echo $data->image; ?>" />
</a>
</div>
<?php $this->endWidget('widgets.prettyPhoto');?>
答案 0 :(得分:2)
此解决方案不需要更改PrettyPhoto JS 。
我使用回调函数搜索包含大图像的元素,并添加链接到图像的新元素(仅适用于 HTML5 ):
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/prettyPhoto.css" type="text/css" media="screen" title="prettyPhoto main stylesheet" charset="utf-8" />
<script src="js/jquery.prettyPhoto.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="main">
<a href="images/fullscreen/2.jpg" rel="prettyPhoto[gallery1]"><img src="images/thumbnails/t_2.jpg" width="60" height="60" alt="Nice building" /></a>
<a href="images/fullscreen/3.jpg" rel="prettyPhoto[gallery1]"><img src="images/thumbnails/t_3.jpg" width="60" height="60" alt="Fire!" /></a>
</div>
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
//Add callback function to prettyPhoto, called everytime an item is shown/changed
$("a[rel^='prettyPhoto']").prettyPhoto({
changepicturecallback: function(){add_download()}
});
});
function add_download(){
//If "download" class doesn't exist
if (!$(".download")[0]){
//Search for the div that contains the image and add an element with Text (or image)
$("#pp_full_res").append('<p class="download" style="cursor: pointer;position: absolute;right: 65px;z-index: 9999;">DOWNLOAD</p>');
$('.download').each(function(){
//Add "download" attribute that only works with HTML5
$(this).wrap('<a target="_blank" href="' + $(this).prev().attr('src') + '" download />');
});
}
}
</script>
</body>
</html>
还有另一个(没有HTML5 )解决方案,正在改变:
$(this).wrap('<a target="_blank" href="' + $(this).prev().attr('src') + '" download />');
通过
$(this).wrap('<a href="download.php?file=' + $(this).prev().attr('src') + '" />');
你需要一个&#34; download.php&#34;强制下载img,例如: https://stackoverflow.com/a/7238099/2369084
答案 1 :(得分:1)
这是我的解决方案(不适用于Yii) - http://loco.ru/materials/343-wordpress-nextgen-gallery-dobavit-ssylku-sohranit-foto 添加链接以打开原始图像。
答案 2 :(得分:1)
嗯,这是很晚我猜,但它会帮助某人,
首先开始使用最新版本并且至少有jquery 1.4+因为没有2.0准备就绪,我们最好开始移动lol。
好的,我将采用上面的例子
<a href='./uploads/1f.jpg' rel='prettyPhoto[gallery1]' title='Nature Photo One' >
<img src='./uploads/1t.jpg' border='0' alt='' link='<a href="download.php?f=1f.jpg" class="url">Download This Photo</a>' />
</a>
不执行link =“ur link”,而是使用数据属性,如此
那是第1步更改你的格式。
现在打开你的漂亮照片。
查找
social_tools: '<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>' /* html or false to disable */
它将与首发中的所有标记一起使用。
现在将其编辑为
social_tools: '<div class="{my_class}"><a href="{my_url}">{my_link}</a></div><br/><div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>' /* html or false to disable */
接下来找到这个部分
// Rebuild Facebook Like Button with updated href
if(settings.social_tools){
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
$pp_pic_holder.find('.pp_social').html(facebook_like_link);
}
第204行
替换为
if(settings.social_tools){
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
$pp_pic_holder.find('.pp_social').html(facebook_like_link);
settings.social_tools.replace('{my_url}',encodeURIComponent($("img[src='"+pp_images[set_position]+"']").data('link')));
// CUSTOMIZE BELOW TO YOUR NEED
settings.social_tools.replace('{my_class}','your_class');
settings.social_tools.replace('{my_link}','Go To Page');
}
如上所述,在2行中你可以用你想要的任何名字替换'.our_class',因此转到'Go To Page'
并且所有已完成刷新你的页面,即F5,因为它在文件中被更改.....并加载并且它将正常工作。
为所有人欢呼。
答案 3 :(得分:1)
容易!
HTML (标题为空!)
<a id="photo_link" href="http://link_to_image_or_video" rel="prettyPhoto" title="">
<img src="images/play-video.png" alt="" title="" width="380" height="147" />
</a>
JS(准备好文件内)
//do not show title on download link hover (download button)
$("#photo_link").hover(function(e){
$(this).attr('data-title', $(this).attr('title'));
$(this).removeAttr('title');
},
function(e){
$(this).attr('title', $(this).attr('data-title'));
});
//add download link on the fly on click of photo link
$("#photo_link").on('click', function(){
$(this).attr('title', '<div class="center"><a href="#download_link" class="btn btn-primary btn-lg"><strong>Download</strong></a></div>');
});
不需要PrettyPhoto JS更改。这是一个简单的想法。你在Yii里面玩 框架。
更简单:只有JS(在你的视图中包含JS)
$("a[rel^='prettyPhoto']").prettyPhoto({
social_tools: '<div class="center"><a id="get_started" href="#contact" class="btn btn-primary btn-lg"><strong>Download</strong></a></div>',
default_width: 800,
default_height: 450
});
答案 4 :(得分:0)
好的,我解决了我的问题,here是我找到的一个例子。他们添加了下载照片的链接:
<ul class='gallery clearfix'>
<li>
<a href='./uploads/1f.jpg' rel='prettyPhoto[gallery1]' title='Nature Photo One' >
<img src='./uploads/1t.jpg' border='0' alt='' link='<a href="download.php?f=1f.jpg" class="url">Download This Photo</a>' />
</a>
</li>
// REST OF THE IMAGES
</ul>
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
$("a[rel^='prettyPhoto']").prettyPhoto({theme: 'light_rounded'});
});
</script>
需要对jquery.prettyphoto.js文件进行一些更改。我使用了v 3.1.2,可以下载here
这是我使用我提到的before
示例所做的更改(function($) {
$.prettyPhoto = {version: '3.1.4'};
$.fn.prettyPhoto = function(pp_settings) {
pp_settings = jQuery.extend({
//....
social_tools: '<div class="pp_social"><span class="pp_link"></span></div>'
// I deleted the rest in social_tools since I wasn't going to use them, you can just add this to the begining of it.
}, pp_settings);
//....
/*
* Initialize prettyPhoto.
*/
$.prettyPhoto.initialize = function() {
//...
pp_links=(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr('rel').indexOf(theRel)!=-1)return($(n).find('img').attr('link'))?$(n).find('img').attr('link'):"";}):$.makeArray($(this).find('img').attr('link'));
//...
}
//...
$.prettyPhoto.open = function(event) {
//....
if(pp_links[set_position]!=""){$pp_pic_holder.find('.pp_link').show().html(unescape(pp_links[set_position]));}else{$pp_pic_holder.find('.pp_link').hide();}
//....
}
如果你想在yii中使用prettyphoto extention。您可以将javaScript文件替换为您修改的文件。然后:
<?php
$this->beginWidget('ext.prettyPhoto.PrettyPhoto', array(
'id'=>'pretty_photo',
// prettyPhoto options
'options'=>array(
'opacity'=>0.60,
'modal'=>true,
'theme'=> 'light_rounded'
),
));
?>
<div class="column4-front image-gallery">
<a href="/files/immagini/<?php echo $data->image; ?>" rel="prettyPhoto[pp_gal]" title="<?php echo $data->caption; ?>">
<img src="/files/immagini/thumb/<?php echo $data->image; ?>" link='<a href="<?php echo $this->createUrl('compania/downloadimage',array('f'=>$data->image)); ?>" class="url">Scarica questo foto</a>'/>
</a>
</div>
<?php $this->endWidget('widgets.prettyPhoto');?>
并将此添加到相关的控制器,对我来说CompaniaController:
public function actionDownloadImage()
{
$filename = $_GET['f'];
$fileDir='path to image';
Yii::app()->request->sendFile(
$filename,
file_get_contents($fileDir.$filename)
);
}
答案 5 :(得分:0)
我解决了在img_markup属性中编辑prettyPhoto.js文件的问题。
更改此
8 -> [8, 0, 0, 0]
10 -> [8, 0, 2, 0]
23 -> [16, 0, 4, 2, 1]
11 -> [8, 0, 2, 1]
2 -> [2, 0]
4 -> [4, 0, 0]
99 -> [64, 32, 0, 0, 0, 2, 1]
对此
image_markup: '<img id="fullResImage" src="{path}" />',