Sziasztok!
Codeigniterben jártas személyektől szeretnék segítséget kérni. Adatbázisban tárolok képeket BLOB formátumban, attól most tekintsünk el, hogy célszerűbb a kép útvonalát tárolni, jelen esetben muszáj BLOB-ban tárolnom és onnan kiolvastatnom. Az adatbázis szintén adott, semmit nem változtathatok rajt,
CREATE TABLE `aru` (
`cikksz` Varchar(20) NOT NULL,
`megnev` Varchar(255) NOT NULL,
`ar` INTEGER UNSIGNED,
`index_kep` LONGBLOB,
`kep` LONGBLOB,
PRIMARY KEY(`cikksz`)
)
TYPE = InnoDB;
A feladatom az lenne, hogy az index kép csak akkor töltődjön le, ha az valóban látszik is a böngészőablakban (felesleges requestek minimalizálása), továbbá a nagy képet csak akkor kérje le és mutassa meg egy új layer-en (fancybox, lightbox, ami szimpatikus), amikor a felhasználó rákattint az index képre.
A problémám az lenne, hogy az adatbázisból lekérem a képeket, de kiíratáskor mindenféle zagyvaság jelenik meg a kép helyén. Több helyen olvastam, hogy a header információkat kell megváltoztatni kiíratás előtt így, header('Content-type: image/jpeg'); de nálam, amint megadom ezt a sort, az addigi dolgok sem jelennek meg, csak egy tök üres oldal. Próbáltam már így is megadni, $this->output->set_header('Content-type: image/jpg'); az eredmény ugyanaz. Olvastam még olyan lehetséges megoldást, miszerint az addslashes() alkalmazása feltöltéskor, és a stripslashes() alkalmazása kiolvasáskor megoldja a problémát. Nálam sajnos ez sem hozott eredményt. Valamint ez nem is lenne jó esetemben, mivel nem kell konkrét feltöltő formot készítenem, egyszerűen phpMyAdminon keresztül megy minden adat feltöltése, szóval nem is tudnám alkalmazni az előbb említett függvényeket, de egy próbát azért tettem velük.
Hogy tudnám megoldani, hogy megjelenjenek helyesen a képek? Mit csináltam rosszul? A view fájlom egy része, ami megjeleníti az adatokat:
...
<?php
foreach ($products as $prod){
?>
<tr>
<td width="20%"><?php echo $prod->cikksz."<br />"?></td>
<td width="40%"><?php echo $prod->megnev."<br />"?></td>
<td width="20%"><?php echo $prod->ar."<br />"?></td>
<td width="20%">
<?php
// $this->output->set_header('Content-type: image/jpg'); // Ha a header be van állítva nem jelenít meg semmit, csak üres oldalt. Ha másik fájlban próbálom meg kiiratni, ahol csak az image/jpeg header van beállítva (a kettős MIME type elkerülése miatt), az eredmény ugyanaz.
// header('Content-type: image/jpeg'); //másik header lehetőség
// $this->output->set_output($prod->index_kep)."<br />";
echo anchor($prod->kep, $prod->index_kep, array('class' => 'small_image'));
?>
</td>
</tr>
<?php
}
?>
</table>
</div><!--End of display-content-->
</body>
</html>
A hibás részeket kikommenteztem, azért vannak a kódban a // jelek.
Valamint azt tudom, hogy a nagy kép megjelenítése nem lesz jó így echo anchor($prod->kep, $prod->index_kep, array('class' => 'small_image')); ,mert helytelenül hivatkozok rá, szóval örülnék, ha esetleg arra is jönne megoldás, hogy hogyan hivatkozhatnék a kép eredetijére a kiolvasás után, hogy a fancybox megjelenítse.
Előre is köszönöm a segítséget!
Hasonló témák:
Könyvjelzők