Dynamische foto oproepen m.b.v PHP in CSS

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Goedenavond!

Ik heb een class (Photograph) waarin ik een functie heb geschreven:

[code=php]
<?php
public function image_path() {
return $this->upload_dir.DS.$this->filename;
}
?>
[/code=php]

Deze functie maakt kortgezegd een dynamische path aan voor een foto, zodat deze in html weergegeven kan worden....dat werkt allemaal perfect met:

<img scr="$Photo->image_path()" />


Echter wil ik deze foto's dynamisch in een CSS al background weergeven:


Style.php
[code=php]
<?php

header('Content-Type: text/css');
require_once("../photo-gallery/includes/initialize.php");
$Photo = new Photograph();

?>

.id_nummer {
background: url(<?php echo $Photo->image_path() ?>) ;


}
[/code=php]

Ik krijg geen fout melding, het resultaat is een leegveld waar ik de imagepad van verwacht.

^* CSS bestand werkt overigens gewoon op deze manier wel

[ Voor 3% gewijzigd door Zakkenwasser op 24-06-2009 07:34 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Debuggen: Hoe doe ik dat?
Heb je al gekeken of $Photo->image_path() wel iets geeft? En als je dat vervangt door echo "123", zie je dat dan wel? Je weet zeker dat het door php gehaald wordt? Je ziet (nu) dus "background: url();" in de output? Etc. etc.

[ Voor 8% gewijzigd door RobIII op 24-06-2009 00:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
RobIII schreef op woensdag 24 juni 2009 @ 00:28:
Debuggen: Hoe doe ik dat?
Heb je al gekeken of $Photo->image_path() wel iets geeft? En als je dat vervangt door echo "123", zie je dat dan wel? Je weet zeker dat het door php gehaald wordt? Je ziet (nu) dus "background: url();" in de output? Etc. etc.
met echo 123 zie ik inderdaad wel
background: url(123);

met echo $Photo->image_path(); zie ik
background: url(images/); (mijn image directory)


Als ik daarna
$Photo = new Photograph();

en $Photo echo krijg ik:

background: url(photo-gallery/public/<br />
<b>Catchable fatal error</b>: Object of class Photograph could not be converted to string in ....

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je echo't normaal gesproken ook geen objecten, je print ze met var_dump. ;) Als je een object wel wil kunnen echoen zou je iets met __toString kunnen doen, maar of dat nou zoveel toevoeging heeft over een var_dump... ;)

Anyway, wat je eigenlijke fout betreft: heb je display_errors aan staan? Staat error_reporting op E_ALL én E_STRICT? Wat geeft var_dump($Photo->image_path())?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
PHP:
1
require_once("../photo-gallery/includes/initialize.php");
Je include is wat tricky. Is het niet zo dat toen het werkte je dit direct vanuit de directory photo-gallery aanriep, en dat je nu je script naar bijvoorbeeld /css hebt verplaatst? In dat geval denk ik dat de includes vanuit de include niet meer gevonden kunnen worden en je $Photo derhalve niet kan worden geinitialiseerd.
Sub-includes werken namelijk relatief tov het script dat je aanroept (style.php) en niet tov het path waarin initialize.php staat.

Ik zou daarom aanraden de include paths in .htaccess aan te geven.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

require_once geeft een hele harde foutmelding als het pad niet goed is en de include dus niet goed gaat. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
NMe schreef op woensdag 24 juni 2009 @ 02:33:
require_once geeft een hele harde foutmelding als het pad niet goed is en de include dus niet goed gaat. ;)
include(_once) geeft anders ook wel een foutmelding af, maar dat is een E_WARNING in plaats van FATAL :)
Maar om toch nog even een aanvulling te geven wat betreft dit topic, ik denk toch echt dat het een simpel probleem is.

Kun je ons anders misschien de waarden van de "return" geven?
(Deze 3: $this->upload_dir | DS | $this->filename)

(Probeer anders eens een absolute path in te voeren, dan kijken of die het doet :))

Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
NMe schreef op woensdag 24 juni 2009 @ 00:44:
Je echo't normaal gesproken ook geen objecten, je print ze met var_dump. ;) Als je een object wel wil kunnen echoen zou je iets met __toString kunnen doen, maar of dat nou zoveel toevoeging heeft over een var_dump... ;)

Anyway, wat je eigenlijke fout betreft: heb je display_errors aan staan? Staat error_reporting op E_ALL én E_STRICT? Wat geeft var_dump($Photo->image_path())?
E_ALL en E_STRICT staan aan en daarbij kreeg ik geen foutmelding.

Var_dump geeft tevens deze fout melding:
"string(7) "images/"
Manueltje22 schreef op woensdag 24 juni 2009 @ 04:01:
[...]


include(_once) geeft anders ook wel een foutmelding af, maar dat is een E_WARNING in plaats van FATAL :)
Maar om toch nog even een aanvulling te geven wat betreft dit topic, ik denk toch echt dat het een simpel probleem is.

Kun je ons anders misschien de waarden van de "return" geven?
(Deze 3: $this->upload_dir | DS | $this->filename)

(Probeer anders eens een absolute path in te voeren, dan kijken of die het doet :))
De uitkomst daarvan is "/images"
dat is mijn upload directory waar mijn foto's staan.

$this->filename geeft blanco waarde.

@hier beneden :
Klopt, ik had dit al correct in mijn script staan, alleen stond was het hier een typo.

[ Voor 36% gewijzigd door Zakkenwasser op 24-06-2009 07:35 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 14:43
MrJey schreef op woensdag 24 juni 2009 @ 00:21:

Style.php
[code=php]
<?php
...
$Photo = new Photograph;
...
[/code=php]

...
moet dat niet zijn
PHP:
1
$Photo = new Photograph();

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
ff een update:

ik heb deze net toegevoegd aan het begin van style.php
[code=php]
<?php
$sql = "SELECT * FROM photographs ";
$sql .= "ORDER BY id DESC ";
$sql .= "LIMIT 12 ";
$photos = Photograph::find_by_sql($sql);

?>
[/code=php]

en bij de css
[code=php]
background: url( <?php foreach($photos as $photo):
echo $photo->image_path();
endforeach; ?> ) no-repeat;

[/code=php]
geeft mij:
"images/framboos.jpgimages/kabouter.jpgimages/zwaan.jpgimages/zonsondergang.jpg"

verander ik de "Limit 1" in de SQL dan krijg ik mijn laatste image, maar niet op de dynamische manier zoals ik dat had verwacht.

[ Voor 6% gewijzigd door Zakkenwasser op 24-06-2009 08:27 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

hmm... Dan begin ik een ander donkerbruin vermoeden te krijgen...


Je weet toch hopelijk wel dat je (met php gegenereerde) css pagina en je (met php gegenereerde) html pagina op de server als twee compleet verschillende requests worden gezien? Dat alle variabelen die je gebruikt in je html pagina op geen enkele manier invloed hebben op de variabelen die je in je css gebruikt en vise versa?
verander ik de "Limit 1" in de SQL dan krijg ik mijn laatste image, maar niet op de dynamische manier zoals ik dat had verwacht.
Wat voor dynamische manier had je uberhaupt verwacht wanneer je altijd dezelfde query met dezelfde volgorde gebruikt om je data te vullen??

[ Voor 26% gewijzigd door Janoz op 24-06-2009 09:01 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Janoz schreef op woensdag 24 juni 2009 @ 09:00:
hmm... Dan begin ik een ander donkerbruin vermoeden te krijgen...


Je weet toch hopelijk wel dat je (met php gegenereerde) css pagina en je (met php gegenereerde) html pagina op de server als twee compleet verschillende requests worden gezien? Dat alle variabelen die je gebruikt in je html pagina op geen enkele manier invloed hebben op de variabelen die je in je css gebruikt en vise versa?


[...]

Wat voor dynamische manier had je uberhaupt verwacht wanneer je altijd dezelfde query met dezelfde volgorde gebruikt om je data te vullen??
<p>
<span class="id_number">$id</span>
<a href="photo_gallery.php?id=1">click voor foto1</a>
</p>

.id_number {
background: url(../bla/bla/foto1.jpg) no-repeat;

<p>
<span class="id_number">$id</span>
<a href="photo_gallery.php?id=2">click voor foto2</a>
</p>

.id_number {
background: url(../bla/bla/foto2.jpg) no-repeat;
}

zoiets

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Sorry, ik heb geen idee wat je nu probeert te doen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Nu online
Ik heb het idee dat Janoz' vermoeden correct was, omdat je nu HTML en CSS bij elkaar gooit. Verder blijkt uit je post met de SQL-query dat je een Photograph-object wel degelijk op een of andere manier een bestandsnaam moet voeren (ik neem tenminste aan dat find_by_sql() iets doet als bestandsnamen uit de resultset halen en voor elk bestand een Photograph-object aanmaken). Dat zou ook een vrij logisch opzet zijn (logischer dan een Photograph-klasse die op magische wijze altijd het juiste plaatje kiest; want die kant lijk je met de oorspronkelijke PHP-code in het CSS-bestand op te willen).

[ Voor 7% gewijzigd door Raynman op 24-06-2009 11:10 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
That... doesn't... make... sense. At all :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Voor zoiets hebben ze <IMG /> uitgevonden. :P

PHP zou ik zelf nooit in CSS files gebruiken, maar hoogstens in inline CSS zodat je losse files niet ook geparsed hoeven te worden door PHP. (En ze dus beter te cachen zijn.)

Of ik begrijp gewoon helemaal niet wat je nu doet. 8)7

[ Voor 77% gewijzigd door --MeAngry-- op 24-06-2009 11:28 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ramon schreef op woensdag 24 juni 2009 @ 07:25:
[...]

moet dat niet zijn
PHP:
1
$Photo = new Photograph();
Mag beiden in PHP. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
RobIII schreef op woensdag 24 juni 2009 @ 11:16:
[...]

That... doesn't... make... sense. At all :?
Ik ben nu niet thuis waar ik de exacte code heb staan.
Simpel gezegd doel ik hiermee te zeggen dat ik de class background in CSS variable wil maken naar de foto's die opgeroepen worden met $photo->image_path ipv dat iedere css class nu dezelfde background heeft.


nb:
Met img geef ik de thumbnail al weer en met background wil ik een zeer klein preview maken.

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Wat Janoz ook al zei: er is server side geen verband tussen de twee files. Je moet dus dezelfde lus herhalen in je CSS file:

styles.php (CSS):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
header('Content-Type: text/css'); 
require_once("../photo-gallery/includes/initialize.php"); 

$sql = "SELECT * FROM photographs\n"
    ."ORDER BY id DESC\n" 
    ."LIMIT 12"
$photos = Photograph::find_by_sql($sql); 
        
for ($i=0; $i < $photos.length; $i++)
{
?> 
.id_number_<?php=$i?> {
    background-image: url(<?php=$photos[$i].image_path()?>);
    background-repeat: no-repeat; }
<?php
}
?>


viewer.php (HTML):
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
<?php
require_once("../photo-gallery/includes/initialize.php"); 
?>
<html>
    <head>
        <link rel="stylesheet" href="styles.php" type="text/css">
    </head>
    <body>
<?php
$sql = "SELECT * FROM photographs\n"
    ."ORDER BY id DESC\n" 
    ."LIMIT 12"
$photos = Photograph::find_by_sql($sql); 
        
for ($i=0; $i < $photos.length; $i++)
{
?>
        <p>
            <span class="id_number_<?php=$i?>"></span>
            <a href="photo_gallery.php?id=<?php=$i?>">click voor foto<?php=$i?></a>
        </p>
<?php
}
?>
    </body>
</html>

En ja, je kan ook voor elke foto apart een CSS genereren, maar dan moet je dus het foto-id als parameter doorgeven ofzo. En dan nog moet je CSS unieke selectors gebruiken. Erg nuttig lijkt me dat dan ook niet.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom doe je het niet gewoon inline dan als je het toch bij je HTML hebt zitten?

PHP:
1
2
3
4
5
6
7
8
9
foreach($photos as $photo)
{
?>
<p>
    <span style="background-image:url(<?= $photo['image_path']; ?>);"><?= $photo['id']; ?></span>
    <a href="photo_gallery.php?id=<?= $photo['id']; ?>">click voor foto<?= $photo['id']; ?></a>
</p>
<?php
}


edit: verder denk ik dat t vooral in de eerste reply zit... "debuggen hoe doe ik dat"

[ Voor 14% gewijzigd door Cartman! op 24-06-2009 13:35 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Mwah, ik denk dat het niet een debug probleem is. Het lijkt me meer een compleet gebrek aan inzicht in de werking van html en http.

Als ik het goed begrijp verwacht de topicstarter dat hij, tijdens het renderen van de pagina, halverwege de css kan aanpassen. Dat er op een bepaalde positie in de html aangekomen is en dat vanaf daar een andere css zou kunnen gelden. Alsof dat nog niet weird genoeg is moet dit ook nog klaargespeeld worden door twee compleet los van elkaar afgehandelde requests.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ben het met je eens maar dat vond ik dan weer n beetje bot. Maarja, tis niet t eerste topic wat daarop uitdraait van de TS als ik me niet vergis.

Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Janoz schreef op woensdag 24 juni 2009 @ 14:13:
Mwah, ik denk dat het niet een debug probleem is. Het lijkt me meer een compleet gebrek aan inzicht in de werking van html en http.

Als ik het goed begrijp verwacht de topicstarter dat hij, tijdens het renderen van de pagina, halverwege de css kan aanpassen. Dat er op een bepaalde positie in de html aangekomen is en dat vanaf daar een andere css zou kunnen gelden. Alsof dat nog niet weird genoeg is moet dit ook nog klaargespeeld worden door twee compleet los van elkaar afgehandelde requests.
duh... alles wordt van boven naar beneden gelezen.
Snap ook wel dat een php/css bestandje eerst geschreven wordt, en dat dat later niet nog eens gewijzigd word. 8)7

* Zakkenwasser gaat zich schamen en zal toekomstige beginners vragen maar toch weer stellen bij phphulp.nl ed.

toch bedankt allemaal.

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]

Pagina: 1