Zwei kleine Quickhacks zum Modul Album Photo
am 10.01.2009 - 13:30 Uhr in
Hallo,
Ich nutze das Modul Album Photo in der Version photos-6.x-2.5-beta4. Zwei Sachen haben mich in dem Modul gestört.
Die Thumbnail-Ansicht ist so "zusammengeklatscht", Photo direkt an Photo
Ich hätte die Photos gern schön geordnet in Spalten und Zeilen wie eine Tabelle.
Dazu habe ich die Datei photos.module editiert.
Zuerst die Funktion photos_view_list_image
Original:
function photos_view_list_image($image, $type = 'view') {
global $user;
switch ($type){
Geändert:
function photos_view_list_image($image, $type = 'view') {
global $user;
if(variable_get('photos_t_w', '100x100')){
list($w,$h) = explode('x',trim(variable_get('photos_t_w', '100x100')));
}else{
$w = 100;
$h = 100;
}
$w=$w+18;
$h=$h+18;
switch ($type){
Erklärung:
hier wird einfach die maximalgröße der Thumbnails ermittelt (gibt es keine Angabe wird der Standard 100x100 genommen). Dann werden noch für margin, padding und border 18 Pixel hinzuaddiert.
Gleich darunter wird noch eine Zeile eingefügt:
Original:
switch ($type){
case 'view':
$image = _photos_get_path($image, 'list');
$title = _photos_node_title($image['pid']);
$output = l('<img alt="'.check_plain($title).'" title="'.$image['des'].'" src="'._photos_file_create_url($image['p1']).'">','photos/image/'.$image['fid'], array('class'=> 'imageview','html'=>true));
break;
Geändert:
switch ($type){
case 'view':
$image = _photos_get_path($image, 'list');
$title = _photos_node_title($image['pid']);
$output = l('<img alt="'.check_plain($title).'" title="'.$image['des'].'" src="'._photos_file_create_url($image['p1']).'">','photos/image/'.$image['fid'], array('class'=> 'imageview','html'=>true));
$output = '<div class="photos-thmb" style="height:'.$h.'px; width:'.$w.'px;"><div class="photos-thmb-inner">'.$output.'</div></div>'."\n";
break;
Erklärung:
Hier werden um jedes Bild noch einmal zwei Boxen gelegt, in denen das Bild dann zentriert werden soll.
In der Funktion photos_nodeapi wird auch noch eine Zeile eingefügt.
Original:
foreach ($p as $image) {
$t .= photos_view_list_image($image,'view');
}
$t .= $pager;
}
Geändert:
foreach ($p as $image) {
$t .= photos_view_list_image($image,'view');
}
$t .= '<p style="clear:both; height:00px; margin:0px;" />';
$t .= $pager;
}
Erklärung:
Der unsichtbare Absatz sorgt dafür, dass der Text unter den Bildern im Teaser wieder links beginnt und nicht direkt hinter dem letzten Bild. (keine Ahnung warum das mit span nicht funktioniert...)
Zum schluss noch in die .css Datei folgende Zeilen einfügen
.photos-thmb{
display:table;
float:left;
margin:0px;
}
.photos-thmb-inner{
display:table-cell;
text-align:center;
vertical-align:middle;
margin:0px;
}
und fertig. Die Bilder werden tabellenartig dargestellt, bei Firefox und Opera horizontal und vertikal zentriert, beim IE leider nur horizontal.
Links im Teaser linken direkt auf das Bild, nicht auf das Album
Wenn ich ein Bild im Teaser anklicke, will ich, dass das Album erscheint, nicht das Bild. Dazu ändere ich wieder die
Datei photos.module, zuerst die Funktion photos_nodeapi.
Original:
foreach ($p as $image) {
$t .= photos_view_list_image($image,'view');
}
Geändert:
foreach ($p as $image) {
if ( $teaser ) $t .= photos_view_list_image($image,'view',$node->path);
else $t .= photos_view_list_image($image,'view');
}
Erklärung:
Hier wird einfach der aufgerufenen Funktion ein link mitgegeben, falls der teaser angezeigt wird. Die funktion muss dann natürlich auch noch geändert werden.
Original:
function photos_view_list_image($image, $type = 'view') {
global $user;
switch ($type){
case 'view':
$image = _photos_get_path($image, 'list');
$title = _photos_node_title($image['pid']);
$output = l('<img alt="'.check_plain($title).'" title="'.$image['des'].'" src="'._photos_file_create_url($image['p1']).'">','photos/image/'.$image['fid'], array('class'=> 'imageview','html'=>true));
}
Geändert:
function photos_view_list_image($image, $type = 'view', $linkpath='') {
global $user;
switch ($type){
case 'view':
$image = _photos_get_path($image, 'list');
$title = _photos_node_title($image['pid']);
if ($linkpath == '') $linkpath = 'photos/image/'.$image['fid'];
$output = l('<img alt="'.check_plain($title).'" title="'.$image['des'].'" src="'._photos_file_create_url($image['p1']).'">',$linkpath, array('class'=> 'imageview','html'=>true));
}
Erklärung:
Hier erfolgt nun noch die Behandlung des vorhin übergebenen Links.
... und fertig.
Natürlich muss das bei jeder neuen Version wieder gemacht werden :(
Wenn jemand ideen zur Verbesserung hat, bzw. wie man auch den IEW dazu bringen kann, die Bilder vertikal zu zentrieren, wäre ich dafür dankbar.
- Anmelden oder Registrieren um Kommentare zu schreiben
Ist gut dass du hier soetwas
am 11.01.2009 - 13:48 Uhr
Ist gut dass du hier soetwas detailiert beschreibst aber etwas finde ich nicht so gut
1. warum veröffentlichst du nicht die Verändung als Patch, das ist für manche benutzer viel einfacher zu benutzen :)
2. warum führst du nicht in das schlecht geschriebene Modul Theme Funktionen ein, diese werden vom Maintainer auch übernommen und du kannst in dener template.php anpassen wie du willst
Trotzdem weiter so
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
ad 1) klar, patch ist
am 11.01.2009 - 15:52 Uhr
ad 1) klar, patch ist einfacher zu handhaben, aber gilt halt nur für die oben genannte Version ... mit den Erklärungen kann man es meiner Meinung nach einfacher für spätere Versionen implementieren.
ad 2)
a: Weil ich absolut keine Ahnung von Modulentwicklung für Drupal habe.
b: Weil das Modul recht schwer verständlich da unkommentiert ist. Deshalb sind das auch wirklich nur Quickhacks, das geht sicher noch viel besser.