2 messaggi dal 06 agosto 2013
Buonasera a tutti.
Ho la necessità di creare una Image Gallery... che venga visualizzata così:
mi serve una specie di scroll che visualizza le miniature. Quando clicco su una miniatura, l'immagine viene visualizzata al centro della pagina con le miniature sotto.
ci sono controlli che mi fanno visualizzare le miniature?
anticipo che le immagine si trovano tutte in una cartella. Vorrei evitare di creare immagini doppie nel sito (la stessa immagine con dimensioni diverse).

nel sito ho varie cartelle con le immagini. Le cartelle sono le varie categorie. Non esistono cartelle nelle cartelle..

Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
posso elencarti i vari "pezzi" che ti serviranno a realizzare la pagina completa.

glasp ha scritto:
Vorrei evitare di creare immagini doppie nel sito (la stessa immagine con dimensioni diverse).

In realtà sarebbe meglio se la miniatura venisse già preparata al caricamento dell'immagine ma, se vuoi evitarlo, puoi scriverti un HttpHandler .ashx che legga l'immagine originale dal disco e la ridimensioni al volo, prima di inviarla al client.
Opzionalmente, potrebbe salvarsi la miniatura da qualche parte a mo' di cache, per evitare che alla successiva richiesta debba rifare il ridimensionamento.
Qui trovi del codice su come creare l'handler.
http://www.sumitgarg.net/post/2010/04/07/Image-Resigning-in-ASP-Dot-with-C-using-httphandler.aspx

Anche se non vuoi avere le miniature su disco, siamo d'accordo sul fatto che le immagini originali debbano essere ridimensionate perché vogliamo inviare al client pochi kilobytes, in modo che la pagina finisca di caricarsi velocemente.

glasp ha scritto:

scroll che visualizza le miniature

Per prima cosa devi leggere i nomi delle immagini dalla cartella in cui sono contenute usando Directory.GetFiles, a meno che tu non abbia già salvato quell'elenco nel database.

Ottenuti i nomi dei file fisici, devi trasformarli in modo che diventino parametri di una richiesta all'handler di cui parlavamo poco fa. Esempio:
var cartellaSito = Server.MapPath("~/");
var cartellaImmagini = Server.MapPath("~/categorie/divani");
var immagini = Directory.GetFiles(cartellaImmagini, "*.jpg").Select(img => img.Substring(cartellaSito.Length));



Ora puoi mettere in binding l'elenco dei percorsi con un Repeater o un ListView. All'interno del loro ItemTemplate metti un asp:Image e lega la proprietà ImageUrl con il percorso, che dovrai trasformare affinché diventi un parametro nella richiesta all'handler che di cui ti parlavo prima.

Verranno così prodotte una serie di tag <img> che puoi contenere in una <div>. Per "scroll" immagino che tu intenda l'effetto di scorrimento automatico orizzontale, che puoi realizzare con uno dei componenti javascript scaricabili gratuitamente dal web. Prova a cercare "javascript continuous image scrolling", salteranno fuori componenti tipo questo. Basta seguire le istruzioni per l'installazione.
http://www.dyn-web.com/code/scrollers/continuous/

Ora non resta che realizzare l'ingrandimento. Esistono molti componenti, denominati lightbox, che realizzano questo effetto. Uno di essi è prettyPhoto, che oltre all'ingrandimento mostra anche l'elenco delle miniature, come avevi richiesto.
http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/#prettyPhoto
Anche in questo caso dovrai seguire le istruzioni per l'installazione. Tornare nel Repeater e aggiungi anche un asp:HyperLink attorno all'asp:Image che avevi già messo in precedenza. Quel link servirà a scatenare l'apertura della lightbox.

Vai ad ispezionare il codice HTML prodotto dalla tua pagina e verifica scrupolosamente che sia conforme a quanto indicato nella documentazione dei componenti che ti ho suggerito di usare.


ciao,
Moreno
Modificato da BrightSoul il 11 agosto 2013 17.58 -

Enjoy learning and just keep making
66 messaggi dal 03 ottobre 2009
io ti consiglio di utilizzare qualche soluzione Jquery (la rete è piena di queste gallery scritte in Jquery e Javascript) e adattarlo in Aspnet, per le miniature spesso non hai bisogno di crearle perchè fa tutto il componente lato client.

Andrea Restucci - Web Developer
3.939 messaggi dal 28 gennaio 2003
andrestu ha scritto:
io ti consiglio di utilizzare qualche soluzione Jquery (la rete è piena di queste gallery scritte in Jquery e Javascript) e adattarlo in Aspnet, per le miniature spesso non hai bisogno di crearle perchè fa tutto il componente lato client.


E' da molto che non me ne occupo, ma davvero in rete c'è tanto. Basta usare Bing o Google e cercare con pazienza.
Per l'altro problema però ho le mie idee. Secondo me, le immagini, quando vengono acquisite, vanno immagazzinate nel disco rigido, in tre formati: Originale, miniatura, ingrandite.
L'originale preferisco sempre tenermela, quella ingrandita è quella che vedo cliccando sulla miniatura. E questo per ragioni di velocità. In altre parole, il ridimensionamento "al volo" è abbastanza lento e non piacevole da vedersi.

ps. prova a sceglier qui:
http://planetozh.com/projects/lightbox-clones/
Modificato da pietro09 il 13 agosto 2013 16.25 -
115 messaggi dal 01 novembre 2012
Ok ho capito come includere PrettyPhoto e popolare la lightbox.
la domanda è cosa devo impostare affinché cliccando sulle foto mi si apre la finestretta centrale tipica di PrettyPhoto ? Allo stato attuale mi va su un altra webpage e mi mostra la foto mentre io preferirei avere solo le mini foto o addirittura avere un riquadro fisso dove posizionare una img 640 x 480 e con le miniature sotto e poi cliccando sulle miniature visualizzare nella img ma non ho capito come evitare che cliccando una foto me l'apre in un altra webpage e tanto meno come passare alla img la foto cliccata.
Modificato da modelrc il 22 agosto 2013 01.14 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

modelrc ha scritto:

cosa devo impostare affinché cliccando sulle foto mi si apre la finestretta centrale tipica di PrettyPhoto ?

Penso che manchi l'invocazione del metodo .prettyPhoto(), ma ripercorriamo per sicurezza tutti i passi che servono a far funzionare la galleria.
  • Scarica il file zip ed estrai il suo contenuto nel tuo sito.
  • Referenzia i file .js e .css nella tua pagina, come vedi nella documentazione.
    prettyPhoto dipende da jQuery, quindi per sicurezza togli questa riga:
    <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
    

    e sostituiscila con quest'altra, così jQuery verrà letto direttamente online, dal suo CDN, e non ci sarà bisogno di averne una copia locale.
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
    
  • Controlla che le miniature che hai nella pagina rispettino le indicazioni di prettyPhoto. Ad esempio, sul link che porta all'ingrandimento metti l'attributo rel="prettyPhoto".
  • Ora non resta che attivare la galleria. Metti questo codice javascript subito prima della chiusura del body.
    $("a[rel^='prettyPhoto']").prettyPhoto();
    

    Questo codice troverà tutti i link nella pagina che hanno un attributo rel='prettyPhoto e ne intercetterà i click in modo che, da quel momento in poi, l'ingrandimento non si aprirà più in una nuova pagina ma all'interno della lightbox.


In particolare penso che ti manchi l'ultimo punto, fammi sapere se così risolvi.

ciao,
Moreno.

Enjoy learning and just keep making
115 messaggi dal 01 novembre 2012
ciao, grazie per la risposta...allora io credo di aver già fatto come dicevi te ma non mi funziona ora ti riporto quello che ho fatto:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm5.aspx.vb" Inherits="GvoLite.WebForm5" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>

<body>
    <form id="form1" runat="server">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="Scripts/jquery-1.3.2.min.js" charset="utf-8"></script>
<script type="text/javascript" src="Scripts/jquery-1.4.4.min.js" charset="utf-8"></script>
<script type="text/javascript" src="Scripts/jquery.prettyPhoto.js" charset="utf-8"></script>

      <script type="text/javascript" charset="utf-8">
      $(document).ready(function () {
          $("a[rel^='prettyPhoto']").prettyPhoto();
      });
      </script>  
  

<asp:ListView ID="Galleria" runat="server">
    <LayoutTemplate><asp:PlaceHolder ID="itemPlaceholder" runat="server" /></LayoutTemplate>
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" NavigateUrl='<%# Container.DataItem%>' runat="server">
            <asp:Image ID="Image1" ImageUrl='<%# Container.DataItem%>' runat="server" Width="60" />
        </asp:HyperLink>
    </ItemTemplate>
</asp:ListView>


    </form>

</body>
</html>


mentre da codice ho scritto:


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim percorsoGalleria = "~/foto"

        If Not IsPostBack Then
            Dim minhaPastaImagens = System.IO.Directory.GetFiles(Server.MapPath(percorsoGalleria))
            Try
                Galleria.DataSource = minhaPastaImagens.Select(Function(immagine As String) System.IO.Path.Combine(percorsoGalleria, System.IO.Path.GetFileName(immagine))).ToList()
                Galleria.DataBind()
            Catch generatedExceptionName As System.IO.DirectoryNotFoundException
                Response.Write("<script language =Javascript> alert('Erro!');</script>")
            End Try
        End If

    End Sub



dove sbaglio ??
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
ok, ci siamo quasi, bisogna solo fare piccoli aggiustamenti.

Dovresti togliere queste due righe, non bisogna aggiungere più versioni di jQuery.
<script type="text/javascript" src="Scripts/jquery-1.3.2.min.js" charset="utf-8"></script>
<script type="text/javascript" src="Scripts/jquery-1.4.4.min.js" charset="utf-8"></script>


Poi vedo che manca il riferimento al file .css di prettyPhoto. Dunque aggiungi questa riga tra i tag <head> e </head>, ma controlla che il percoro css/prettyPhoto.css sia giusto. Magari tu hai messo il file css in un'altra sottocartella e quindi il percorso dovrà cambiare in accordo.
<link rel="stylesheet" href="css/prettyPhoto.css" type="text/css" media="screen" charset="utf-8" />


Poi controlla che il file Scripts/jquery.prettyPhoto.js esista. Vai ad aprire la cartella Scripts e verifica che lì dentro esista il file chiamato jquery.prettyPhoto.js

Infine dobbiamo aggiungere l'attributo rel="prettyPhoto" ai link, cosa molto importante, altrimenti altrimenti prettyPhoto non saprà quali deve gestire.
I tuoi link sono generati dal controllo HyperLink che si trova nell'ItemTemplate. Infatti, se vai ad ispezionare il codice HTML prodotto dalla pagina, noterai l'HyperLink ha generato un tag <a> per ogni elemento della lista. Dunque ti basta aggiungere l'attributo rel su di esso.

<asp:HyperLink ID="HyperLink1" rel="prettyPhoto" NavigateUrl='<%# Container.DataItem%>' runat="server">


A questo punto vai di nuovo ad ispezionare l'HTML e noterai che, questa volta, ogni tag <a> possiede il suo attributo rel="prettyPhoto".

Dovrebbe essere tutto, fammi sapere se funziona.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.