Foto gallery & email script in 1
Ik heb 1 map waarin ongeveer 3000 foto's staan (klein formaat).
Deze wil ik laten weergeven, 500 per pagina.
Bij elke foto moet een checkbox/radio button komen.
Onderaan de pagina moet een forumulier zitten waar een naam + e-mail adres ingevuld kan worden.
Het forumlier stuurt mij vervolgens een mailtje met daarin de naam & het e-mail adres dat is ingevuld en de bestandsnamen van de geselecteerde foto's.
Dit zodat ik deze foto's daarna kan gaan bewerken en mailen aan de gene die ze wil hebben.
Wie kan mij hierin op weg helpen of heeft zoiets liggen?
Dit zal wel niemand kant en klaar hebben liggen. Veel werk is het echter niet. Het is best gemakkelijk zelf te maken. hoeveel ervaring met php heb je?
Vrij (beperkte) basis kennis dus.
Gewijzigd op 17/03/2011 10:21:12 door Henk Smit
Je kan een kant en klaar foto gallery script pakken en daar zelf een (simpel) formuliertje bij maken. Formulieren zijn zeer makkelijk te maken en als je er dan niet uit komt kun je het alsnog hier vragen :)
glob() / Database
Met deze php functie kun je al je foto's ophalen en in een array stoppen. Dit is echter niet heel snel met grote aantal foto's ik zou met een database gaan werken. Je moet dan eenmalig de locatie van elke foto invoegen. Je zou eenmalig een los stukje script kunnen schrijven die dat voor je doet, dit hoeft niet met de hand.
Pagination
Zo wordt het verdelen van content over meerdere pagina's genoemd.
Foto's weergeven
Je hebt al je foto's in een array/ de database staan dus je kunt er gewoon met een lus doorheen lopen. Je kunt dan direct de checkbox eronder plaatsen zodat een foto geselecteerd kan worden.
Formulier afhandeling
Het is nu alleen nog maar een kwestie van het formulier afhandelen en de E-mail versturen met de gekozen opties.
swiftmailer
voor het versturen van de E-mail. klik
Neem aan dat je toch ook gewoon (gegenereerde) statische HTML kunt gebruiken?
De bestanden hebben als naam IMG_1234.jpg waarbij 1234 een willekeurig nummer is.
Zelf schrijven gaat me zo te lezen toch boven mijn kunnen.
Dat is ook mogelijk maar dan is het stukken meer werk om een zoek functie in te bouwen. En dat lijk me toch wel handig met zo'n groot aantal foto's. Gericht zoeken door 3000 foto's doe je namelijk niet even snel.
De foto's zijn vakantie foto's waar anderen die mee waren naar kijken.
Welke ze op groot formaat willen hebben mogen ze dan selecteren zodat ik daar dan een grotere versie van kan opsturen.
Er worden namelijk ook geen tags, omschrijvingen, etc toegevoegd.
Alleen foto's + selectie boxen & formulier, that's it.
Je hoeft nu alleen maar de checkboxen + opmaak in de lus te gooien en het formulier er buiten houden.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Settings.
--------------------------------------------------------------------------------------------------------------------------*/
# De locatie van de te doorzoeken map.
$location = '';
# We zoeken alleen afbeeldingen dus alleen de volgende extensies worden toegestaan.
$extensions = array('png', 'jpg');
/*--------------------------------------------------------------------------------------------------------------------------
(§) Defaults.
--------------------------------------------------------------------------------------------------------------------------*/
# Set " $images " array voor het opslaan van de afbeeldingen.
$images = array();
/*--------------------------------------------------------------------------------------------------------------------------
(§) Bestanden ophalen en de afbeeldingen eruit filteren.
--------------------------------------------------------------------------------------------------------------------------*/
# Alle bestanden ophalen
$files = glob($location.'*.*');
# Eerst kijken we of er wel wat is gevonden.
if(!empty($files)){
/*---- INFO: Ja, Er zijn 1 of meerdere bestanden gevonden. ----*/
# Alle gevonden bestanden doorlopen.
foreach($files as $file){
# Informatie over het bestand ophalen.
$info = pathinfo($file);
# Controleren of we met een geldige afbeelding te maken hebben.
if(in_array($info['extension'], $extensions)){
/*---- INFO: ... ----*/
# afbeelding toevoegen aan de $images array waarin al onze afbeeldingen staan.
$images[$file] = $info;
}
}
}
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Demo :: Image viewer.</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Afbeeldingen weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Eerst gaan we kijken of er wel afbeeldingen zijn gevonden.
if(!empty($images)){
/*---- INFO: Ja, er zijn 1 of meerdere afbeeldingen gevonden. ----*/
# alle afbeeldingen aflopen.
foreach($images as $img => $info){
# Afbeelding weergeven.
echo '<img src="'.$img.'">';
}
}
else{
/*---- INFO: Nee, er zijn geen afbeeldingen gevonden. ----*/
# Foutmelding weergeven.
echo 'Geen afbeeldingen gevonden.';
}
?>
</body>
</html>
/*--------------------------------------------------------------------------------------------------------------------------
(§) Settings.
--------------------------------------------------------------------------------------------------------------------------*/
# De locatie van de te doorzoeken map.
$location = '';
# We zoeken alleen afbeeldingen dus alleen de volgende extensies worden toegestaan.
$extensions = array('png', 'jpg');
/*--------------------------------------------------------------------------------------------------------------------------
(§) Defaults.
--------------------------------------------------------------------------------------------------------------------------*/
# Set " $images " array voor het opslaan van de afbeeldingen.
$images = array();
/*--------------------------------------------------------------------------------------------------------------------------
(§) Bestanden ophalen en de afbeeldingen eruit filteren.
--------------------------------------------------------------------------------------------------------------------------*/
# Alle bestanden ophalen
$files = glob($location.'*.*');
# Eerst kijken we of er wel wat is gevonden.
if(!empty($files)){
/*---- INFO: Ja, Er zijn 1 of meerdere bestanden gevonden. ----*/
# Alle gevonden bestanden doorlopen.
foreach($files as $file){
# Informatie over het bestand ophalen.
$info = pathinfo($file);
# Controleren of we met een geldige afbeelding te maken hebben.
if(in_array($info['extension'], $extensions)){
/*---- INFO: ... ----*/
# afbeelding toevoegen aan de $images array waarin al onze afbeeldingen staan.
$images[$file] = $info;
}
}
}
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Demo :: Image viewer.</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Afbeeldingen weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Eerst gaan we kijken of er wel afbeeldingen zijn gevonden.
if(!empty($images)){
/*---- INFO: Ja, er zijn 1 of meerdere afbeeldingen gevonden. ----*/
# alle afbeeldingen aflopen.
foreach($images as $img => $info){
# Afbeelding weergeven.
echo '<img src="'.$img.'">';
}
}
else{
/*---- INFO: Nee, er zijn geen afbeeldingen gevonden. ----*/
# Foutmelding weergeven.
echo 'Geen afbeeldingen gevonden.';
}
?>
</body>
</html>
Ik kan je wel helpen met bouwen van de website.
jij zei dat je 3000 foto's hebt, is het niet verstandiger om te verdelen in albums? Dat is makkelijker voor de gebruiker als hij volgende keer weer op je site komt en een foto zoekt?
En heb je een design of huisstijl voor je website, of moet ik dat ook voor je ontwerpen?
gr Dashti
PS Waarom laat je ze niet gewoon de grotere afbeeldingen downloaden via je website? Het is dan ook niet zo arbeids intensief van jouw kant. En niet iedereen kan grote hoeveelheden opslaan in hun mailbox.
De grote versies zijn 22,5MB per stuk. Zoveel storage heb ik niet online.
Dat het mij werk kost vind ik niet erg, ik bewerk de meeste toch allemaal na, welke ik dan niet zelf al heb bewerkt komen dan op die manier nog wel aan de beurt.
De foto's mail ik ook niet naar de personen, ik plaats die in een zip op mijn webserver, zodat ze het kunnen downloaden. :)
@ Dashti, heb al een website draaien, dit script zou in mijn eigen site (eventueel als embedded pagina) komen te draaien.
Dat van de albums is wel een goed idee, ik maak denk ik dan gewoon een paar pagina's met daarop 1 of meerdere dagen waarop foto's zijn genomen. Dat maakt het ook iets overzichtelijker.
De foto's blijven niet eeuwig staan, een maand of 2, vandaar dat ik er ook niet al te veel tijd & aandacht aan wil besteden. :)
Toevoeging op 17/03/2011 11:19:23:
@Mark, het script wat je hebt geplaatst werkt deels.
De home locatie moet ik server side invullen als:
/home/account/domains/domein.nl/public_html/folder/subfolder/dag1/
De bestanden worden gevonden, echter de output van de html (client) kan dit path niet opvragen. Die kan er pas vanaf /folder/subfolder/dag1/ bij.
Weet je hier wellicht nog iets voor?
Gewijzigd op 17/03/2011 11:06:18 door Henk Smit
Verander het stuk dat de afbeeldingen weergeeft eens naar onderstaande. wel even '_image_location_' vervangen door de correcte locatie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Afbeeldingen weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Eerst gaan we kijken of er wel afbeeldingen zijn gevonden.
if(!empty($images)){
/*---- INFO: Ja, er zijn 1 of meerdere afbeeldingen gevonden. ----*/
# alle afbeeldingen aflopen.
foreach($images as $img => $info){
# Afbeelding weergeven.
echo '<img src="_image_location_/'.$info['basename'].'">';
}
}
else{
/*---- INFO: Nee, er zijn geen afbeeldingen gevonden. ----*/
# Foutmelding weergeven.
echo 'Geen afbeeldingen gevonden.';
}
?>
/*--------------------------------------------------------------------------------------------------------------------------
(§) Afbeeldingen weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Eerst gaan we kijken of er wel afbeeldingen zijn gevonden.
if(!empty($images)){
/*---- INFO: Ja, er zijn 1 of meerdere afbeeldingen gevonden. ----*/
# alle afbeeldingen aflopen.
foreach($images as $img => $info){
# Afbeelding weergeven.
echo '<img src="_image_location_/'.$info['basename'].'">';
}
}
else{
/*---- INFO: Nee, er zijn geen afbeeldingen gevonden. ----*/
# Foutmelding weergeven.
echo 'Geen afbeeldingen gevonden.';
}
?>
Gewijzigd op 17/03/2011 11:41:06 door - Mark -
Code (php)
1
Array ( [dirname] => /home/account/domains/domein.nl/public_html/folder/subfolder/1 [basename] => IMG_1661.jpg [extension] => jpg [filename] => IMG_1661 )
Dat krijg ik te zien bij print_r($info);
Het aangepaste stuk code werkt. :)
Nu nog het form bouwen en kijken hoe ik meerdere checkboxes kan meesturen. :)
Gewijzigd op 17/03/2011 11:48:09 door Henk Smit
Over de checkboxen.
Je kunt het beste werken met arrays.
<input type="checkbox" name="selected[]" value="_foto_naam_">
Al de geselecteerde namen komen nu in $_POST['selected'] te staan. op de plaats van _foto_naam_ kun je $_info['basename'] of $_info['filename'] zetten. net wat je wilt.
Eet ie niet.
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';'
Geen idee wat ie daarmee bedoeld.
I feel stupid. :S
geef de volledige regel eens die je hebt. je moet zowiezo vars altijd buiten de quotes halen. Kijk maar eens hoe ik echo.
echo '<img src="/folder/subfolder/'.$info['basename'].'">';
echo '<input type="checkbox" name="selected[]" value='$info['filename']'>';
Geeft error:
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/account/domains/domein.nl/public_html/folder/subfolder/1.php on line 100
:p ik zou zeggen zoek de verschillen. Enkele en dubbele quotes werken niet hetzelfde. dubbel voert uit, enkel niet. Normaal gebruik je altijd enkele quotes. Dat scheelt ook een hoop werk voor als je html moet echoen. Je hoeft dan namelijk niet zo veel te escapen.
Nou maar eens stoeien hoe ik dat array in een mail gooi.
First time for everything!
:p eerst het formulier afhandelen, daarna kun je de gevens pas in een E-mail gooien.