3

スライドショーを作成するためにJqueryPrettyPhotoを使用していますが、ユーザーが画像をダウンロードすることはできません。ユーザーが画像をダウンロードできるようにリンクを追加する方法を知っている人はいますか?

これが私のコードです:(私はYiiでprettyPhotoWidgetを使用していますが、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');?>  
4

6 に答える 6

2

このソリューションでは、PrettyPhotoJSを変更する必要はありません

コールバック関数を使用して、大きな画像を含む要素を検索し、画像にリンクされた新しい要素を追加します(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') + '" />');

imgを強制的にダウンロードするには、「download.php」が必要です。例: https ://stackoverflow.com/a/7238099/2369084

于 2015-03-05T12:15:44.997 に答える
1

これが私の解決策です(Yii用ではありません)-http://loco.ru/materials/343-wordpress-nextgen-gallery-dobavit-ssylku-sohranit-foto 元の画像を開くためのリンクを追加します。

于 2013-02-20T08:37:48.640 に答える
1

まあ、これはかなり遅いと思いますが、誰かを助けるでしょう、

まず、最新バージョンの使用を開始し、jquery 1.4+を使用します。少なくとも、2.0ではない原因が用意されているので、移動を開始することをお勧めします。

わかりました、上記の例を取り上げます

 <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"を実行しないでください。代わりに、次のようなデータ属性を使用してください。

それは、urフォーマットを少し変更するためのステップ1です。

今、urprettyphoto.jsを開きます

探す

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}&amp;layout=button_count&amp;show_faces=true&amp;width=500&amp;action=like&amp;font&amp;colorscheme=light&amp;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}&amp;layout=button_count&amp;show_faces=true&amp;width=500&amp;action=like&amp;font&amp;colorscheme=light&amp;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行で述べたように、uは「.your_class」を任意の名前に置き換えることができるため、「GoToPage」に移動します。

そして、すべて完了したurページの更新、つまりF5により、これはファイル内で変更され、ロードされ、正常に機能します。

みんな応援します。

于 2013-07-28T20:16:37.663 に答える
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>');
});

PrettyPhotoJSの変更は必要ありません。これが簡単なアイデアです。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
});
于 2014-07-01T18:17:25.557 に答える
0

OK、問題を解決しました。これが私が見つけた例です。彼らは次のように写真をダウンロードするためのリンクを追加しました:

<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ファイルにいくつかの変更を加える必要があります。ここからダウンロードできるv3.1.2を使用しました

これは、前に述べた例を使用して行った変更です。

(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拡張機能で使用したい場合。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)
        );      
    }
于 2012-09-19T12:39:43.850 に答える
0

img_markup属性のprettyPhoto.jsファイルを編集してこの問題を解決しました。

これを変える

image_markup: '<img id="fullResImage" src="{path}" />',

これに

image_markup: '<img id="fullResImage" src="{path}" /><a class="pp_download" href="{path} download"><i class="enotype-icon-download"></i></a>',
于 2019-10-15T21:51:26.860 に答える