Beitrag von mk (966 Beiträge) am Montag, 13.März.2006, 18:39.
Fenstergöße in Abhängigkeit der Datenbankeinträge
Hallo,
ich habe eine Datenbank mit Fotos, ich würde gern die Fotos als Vollbild in einem Fenster (Popup) ausgeben,
die Fotos haben immer ein anderes Seitenverhältnis, so dass ich nicht sagen kann, volle Breite oder volle Höhe.
In der Datenbank steht die Größe des Bildes.
Jetzt soll aus der Bildschirmauflösung und der Bildgröße die Fenstergröße und Lage (in der Mitte) ermittelt werden.
Hat das schon mal einer gemacht?
Oder muß ich bei 0 anfangen.
Michael
Antworten
Beitrag von markus (1013 Beiträge) am Montag, 13.März.2006, 19:20.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Antworten
Beitrag von mk (966 Beiträge) am Montag, 13.März.2006, 19:20.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Antworten
Beitrag von markus (1013 Beiträge) am Dienstag, 14.März.2006, 09:34.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
hi,
ne spontane lösung hab ich zwar nicht, aber eine frage:
mußt/willst du das mit bp umsetzen?
für deine galerie gibt es nämlich viel einfachere lösungen, wenn du
es sowieso selbst administrieren solltest.
markus
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 14.März.2006, 11:04.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
a) Was passiert denn bei Bildern die grösser sind?
b) Was _soll_ denn passieren bei Bildern die grösser sind?
;-)
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 15.März.2006, 07:59.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Hallo,
Bilder und deren Größe stehen in einer Datenbank von bp.
Eine Lösung für Bilder die kleiner wie der Bildschirm sind habe ich gefunden.
Sobald das Bild größer ist als eine Bildschirmabmessung wird es Vollbild und das Fenster hat einen weisen Rand.
Das will ich nicht.
z.B. eine "normale" Bildschirm Auflösung.
Bild 200 Breit und 2000 hoch.
Dann soll das Bild (Fenster) in der Mitte des Bildschirms plaziert werden.
Ohne Rand!
Michael
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 15.März.2006, 09:38.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
mhm - das ist nicht ganz so einfach, es kann also folgendes auftreten und muss behandelt werden:
1) Bild ist schmaler aber höher als aktuelle Nutzerbildschirmauflösung
2) Bild ist breiter aber niedriger als aktuelle Nutzerbildschirmauflösung
3) Bild ist breiter und höher als aktuelle Nutzerbildschirmauflösung
Wie soll das dann jeweils aussehen? Fenster ohne Rand ist schon mal prinzipiell unmöglich, weil bei jedem Browser die innere Fenstergröße anders ist, da das Fenster in der Regel noch Elemente wie Titelleiste, Menüleiste usw. enthält. Und wenn man dann die Fensterinnenmasse ans Bild anpasst, dann würde das zu unvorhersehbaren Ergebnissen unter den versch. Browserversionen führen (ich nehme mal an, du weisst, dass es nicht nur den Internetexplorer gibt... ;-))
Dann steht die Frage nach Scrollbalken, wenn eine Bildausdehnung (vertikal oder horizontal) größer als die Bildschirmauflösung ist. Webdesign-Usus ist, dass horizontale Scrollbalken obsolet sind, wogegen vertikale bei Texten und Webseiten dazugehören.
Bei Bildern ist aber IMHO generell Unfug, Scrolleisten zu verwenden. Der Betrachter kann ein Bild doch nur in seinem Eindruck, seiner Gesamtheit und Schönheit erfassen, wenn er das gesamte Bild sieht. Das heisst dann im Schluss auf dein Problem, dass die Bildausmasse anhand der Nutzerbildschirmauflösung neu berechnet werden müssten und dann entsprechend per Popup (wenn ich dich richtig verstanden habe) mit den entsprechenden Massen angezeigt werden muss.
Das ist ein "einfacher" mathematischer Sachverhalt, es müssen "nur" die neuen Verhältnisse errechnet werden.
Dann kann man ein neues Fenster mit diesen Werten über eine Funktion öffnen.
Da fast alle Browser die Seitenverhältnisse eines Bildes auch dann richtig anzeigen, wenn nur eine der beiden Attribute height oder width des img-Tags gesetzt ist, könnte man den größten Wert hernehmen und das Bild dann ausgeben - es bleibt aber immer die Unwägbarkeit welcher Browser wieviel zusätzlichen Platz benötigt.
Lange Rede - kurzer Sinn: das was du vorhast, geht IMHO ohne Kompromisse (Ränder) nicht.
Schau mal unter http://de.selfhtml.org/javascript/objekte/window.htm für Möglichkeiten des Window-Objektes in Javascript nach - damit kannst du dann einiges ausprobieren...
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 15.März.2006, 19:37.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Hallo,
@hempelr: danke für die aufführliche Antwort.
Fangen wir mal mit dem IE an, dann habe ich für die meisten das richtige.
Obwohl ich eben überrascht war, was mir die 1&1 Statistik über die Browaserstatistik aussagte. (Die Robots machen ganz schon Trafic.)
so sieht die Seite aktuell aus:
<html>
<head>
<title>Bild in Groß mit allen Angaben</title>
<link rel="stylesheet" type="text/css" href="http://www.erika-koch.de/ekoch.css">
<script language="javascript" type="text/javascript">
<!--
/****************************************************
Author: Eric King
Url: http://redrival.com/eak/index.shtml
This script is free to use as long
as this info is left in
Modifiziert von gmfmedien.de
****************************************************/
var win=null;
function NewWindow(mypage,myname,w,h,scroll,pos){
if(pos=="random"){LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;}
if(pos=="center"){LeftPosition=(screen.width)?(screen.width-w)/2:100;TopPosition=(screen.height)?(screen.height-h)/2:100;}
else if((pos!="center" && pos!="random") || pos==null){LeftPosition=0;TopPosition=20}
settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars=no,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';
win=window.open(mypage,myname,settings);
if(win.focus){win.focus();}}
function CloseNewWin(){if(win!=null && win.open)win.close()}
// -->
</script>
</head>
<body>
<loop code=perl db=galerie Id==$Id range=0,1>
out <<EOF;
<div align="center"><center>
<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" valign="middle" align="center"><div align="center"><center><table
border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" colspan="2"><div align="center"><center><table border="0" cellspacing="0"
cellpadding="0">
<tr>
<td width="100%"><p align="center">
EOF
$hoch=$hoch+25 ;
$breit=$breit+20 ;
out "<a href=http://www.erika-koch.de/galerie/$Bild onclick=\"NewWindow(this.href,'PopUp','$breit','$hoch','yes','center');return false\" onfocus=\"this.blur()\">";
out "<img src='http://www.erika-koch.de/galerie/$gr_Bild' alt='$Titel (Vollbild)' border='0'>";
out "</a>";
out <<EOF;
</td>
</tr>
</table>
</center></div></td>
</tr>
<tr>
<td valign="top"><h4 align="left">$Art, $Groesse cm<br>$Beschreibung</h4>
<br>$verkauf
</td>
<td valign="top"><h3 align="right">$Titel<br><font size="1">Bild Nr. $Bild_Nr</font></h3>
</td>
</tr>
</table>
</center></div></td>
</tr>
</table>
</center></div>
EOF
</loop>
</body>
</html>
3 Beispiele mit unterschiedlichen Bildgrößen:
(zum Fenster öffnen auf das Bild klicken)
kleiner als der Bildschirm (Ergebnis ok):
http://kochhome.de/baseportal/kunstgalerie/detail2&Id==33
Bild zu breit:
http://kochhome.de/baseportal/kunstgalerie/detail2&Id==32
Bild zu hoch:
http://kochhome.de/baseportal/kunstgalerie/detail2&Id==30
Wenn ich die Bildschirmbreite und höhe nach perl kriegen würde, wehre ich einen Schritt weiter.
Den java Teil zu Anfang verstehe ich nur nicht kpl.
Wie kann ich weiter machen?
Michael
Antworten
Beitrag von hempelr (1976 Beiträge) am Donnerstag, 16.März.2006, 07:55.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
mhm - wenn ich das richtig sehe, macht das JavaScript im Head der Seite nix anderes als ein neues Fenster zu öffnen und zu regeln, ob dieses bildschirmmittig oder an ner zufälligen Position ausgegeben wird (abhängig vom übergebenen Aufrufparameter mit Namen pos)
Man muss hier nicht die Werte von JavaScript nach Perl bringen (weil das ja Unsinn wäre, JavaScript (kurz JS) läuft auf dem Rechner des Clienten und wird erst ausgeführt, nachdem das Perl-Script die Seite schon lange fertig hat) sondern das Javascript muss erweitert werden um die Berechnung der maximal möglichen Werte für die Bildanzeige je nach Bildschirmauflösung des Betrachters.
Die Werte für die Bildgröße werden im Perl-Script in den Link für den Aufruf der Funktion NewWindows geschrieben. Diese müssen dann mit den Werten der Bildschirmauflösung verglichen werden (die werden im JS mit den Eigenschaften screen.width und screen.heigth in der Positionsberechnung verwendet)
Man müsste diese nun in JS-Variable einlesen, dann mit den übergebenen Werten (Variable w und h) vergleichen, wenn eine der beiden größer ist das Seiten-Verhältnis berechnen und ausgehend vom größten Wert die andere Ausdehnung anpassen. Letztendlich kann man erst jetzt die Position des neuen Fensters berechnen und dann das Ding ausgeben.
Also mal theoretisch - ich habs nicht getestet, keine Zeit...
- Aufruf des Javascriptes mit den tatsächlichen Bildabmassen, w - Breite, h - Höhe als Parameter/Variablen im JS (wobei hier ein Wert für einen Rand mit zugerechnet werden kann) - diese werden mit den BasePortal-Variablen $breit udn $hoch gefüllt.
Dann Aufruf
onclick=\"NewWindow(this.href,'PopUp','$breit','$hoch','yes','center');return false\" des Javascripts
im Javascript nun als erstes die Bildschirmbreite berechnen:
w_ist = screen.width
h_ist = screen.height
das Seitenverhältnis des anzuzeigenden Bildes berechnen und in Variable schreiben
sverh = w/h
Jetzt steht das tatsächliche Seitenverhältnis des anzuzeigenden Bildes als Rechenwert weiter im JS zur Verfügung.
Nun muss eine Entscheidung erfolgen, passt das Bild auf den Bilschirm oder nicht, das kann man unterschiedlich lösen, hier mal ein Gedankenansatz
if (w_ist > w) { w = w_ist; h = w/sverh;}
if (h_ist > h) { h = h_ist; w = sverh/h;}
Mit diesen Werten nun kann dann die Positionsberechnung (bisher die Zeile 1 und 2 der JS Funktion NewWindow) des Anzuzeigenden Fensters berechnet werden.
Hoffe, das bringt dich weiter und du bekommst das JavaScript angepasst - das ist manchmal auch nicht ganz einfach, aber prinzipiell nicht schwieriger als Perl (Syntax und Tipps immer bei SelfHTML suchen...)
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 17.März.2006, 18:29.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Hallo,
ich sitze hier schon ziemlich lange drann,
aber irgendwie fehlt mir bei JS noch was (Wissen),
ich habe bei 0 angefangen und erst einmal die Zentrierung weggelassen.
Als erstes soll mal die optimale Fenstergröße dargestellt werden.
So sieht der Anfang aus:
<html>
<head>
<title>Bild in Groß mit allen Angaben</title>
<link rel="stylesheet" type="text/css" href="http://www.erika-koch.de/ekoch.css">
<perl>
get "Id==$Id range=0,1", "galerie";
out "Test: breite: $breit hoch: $hoch<br>";
</perl>
<script language="javascript" type="text/javascript">
function popup(url,name,gr){
var w, h, w_ist, h_ist, sverh ;
w_ist = screen.width ;
h_ist = screen.height ;
sverh = $breit/$hoch ;
if (w_ist > w) { w = w_ist; h = w/sverh;};
if (h_ist > h) { h = h_ist; w = sverh/h;};
fenster=window.open(url, "Popupfenster", "width='+w+' ,height='+h+' ,resizable=yes");
fenster.focus();
return false;
}
// -->
</script>
der spätere Link dann so:
out "<a href=http://www.erika-koch.de/galerie/$Bild onclick=\"return popup(this.href,'PopUp');\">";
Ich denke der Fehler liegt bei der Parameterübergabe.
Hier der Link zum testen:
http://kochhome.de/baseportal/kunstgalerie/detail2&Id==32
Michael
Antworten
Beitrag von mk (966 Beiträge) am Montag, 20.März.2006, 19:43.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
Hallo,
ich bekomme es nicht hin, ich weis, dies ist kein JS Forum,
aber wenn ich in ein JS Forum wechsle und mit baseportal anfange...
Den Fehler habe ich eingegrenzt:
w und h werden im Test nicht eingetragen:
w = 500 ;
h = 200 ;
fenster=window.open(url, "Popupfenster", "width = '+w+' ,height = '+h+' ,resizable=yes");
so geht es, ich will aber vorher her die Werte berechnen.
fenster=window.open(url, "Popupfenster", "width = 500 ,height = 200 ,resizable=yes");
Kann ich noch einen kleinen Tip bekommen?
Michael
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 24.März.2006, 17:33.
keiner einen Tip? Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
wer erbarmt sich meines Problems?
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 7.April.2006, 08:12.
keine Lösung für?: Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
bekomme das Problem nicht hin.
Brauche Hilfe
Michael
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 10.Mai.2006, 20:00.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
mhm - nochmal kurz reingelesen...
Der Link hat hat auch keine Parameter Höhe und Breite, also kann das dann nicht berechnet werden. Und die Funktion popup kennt die als Parameter auch nicht, die kennt nur die URL (= this.href in der Klammer), den Seitennamen (= String PopUp und einen nicht benutzten bzw. im Original-Link nicht vorhandenen Parameter mit Namen [gr].
Wenn der Link vielleicht so aussehen würde:
out "<a href=http://www.erika-koch.de/galerie/$Bild onclick=\"return popup(this.href,'PopUp', $breit, $hoch);\">";
und die JS-Funktion popup die übergebenen Parameter auch wirklich mitbekommt und dann zur Berechnung benutzt:
function popup(url,name,h,w){
var w_ist, h_ist, sverh ;
...
könnte es dich vielleicht näher ans Ziel bringen...
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 10.Mai.2006, 20:57.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge
ich denke bei der Zeile:
fenster= ...
ist noch der Fehler
die Syntax ist mir da nicht klar.
<script language="javascript" type="text/javascript">
function popup(url,name,h,w){
var w, h, w_ist, h_ist, sverh ;
w_ist = screen.width ;
h_ist = screen.height ;
sverh = $breit/$hoch ;
if (w_ist > w) { w = w_ist; h = w/sverh;};
if (h_ist > h) { h = h_ist; w = sverh/h;};
fenster=window.open(url, "Popupfenster", "width = '+w+' ,height = '+h+' ,resizable=yes");
fenster.focus();
return false;
}
// -->
</script>
Antworten
Beitrag von mk (966 Beiträge) am Dienstag, 23.Mai.2006, 19:02.
Re: Fenstergöße in Abhängigkeit der Datenbankeinträge noch ungelöst
cb hate in einem andere Treads so geantwortet,
womit ich aber leider nichts anfangen kann.
Da brauchst Du zwingend Javascript, weil Du nur so die Fenstergrösse rauskriegen kannst. Du musst dem Bild einen Namen geben (id="bild") und dann mit
if(document.getElementBy("bild").width>screen.width) document.getElementBy("bild").width=screen.width;
resp.
if(document.getElementBy("bild").height>screen.height) document.getElementBy("bild").height=screen.height;
die Bildgrösse testen und entsprechend anpassen. Thats all...
Antworten