[ korisnikk @ 01.10.2013. 14:43 ] @
Treba mi modifikacija jedne joomla komponente za oglase.
Komponenta prikazuje sve uploadovane slike u oglasu,a ja bih zeleo da prikazuje samo po jednu u svakom oglasu.
Verujem da je ovaj deo koda odgovoran za to sto mi treba:
Code:
                <div class="adsmanager_ads_image">
                    <?php
                    if (count($content->images) == 0)
                        $image_found =0;
                    else
                        $image_found =1;
                    foreach($content->images as $img)
                    {
                        $thumbnail = JURI::base()."images/com_adsmanager/ads/".$img->thumbnail;
                        $image = JURI::base()."images/com_adsmanager/ads/".$img->image;
                        switch($this->conf->image_display)
                        {
                            case 'popup':
                                echo "<a href=\"javascript:popup('$image');\"><img src='".$thumbnail."' alt='".htmlspecialchars($content->ad_headline)."' /></a>";
                                break;
                            case 'lightbox':
                            case 'lytebox':
                                echo "<a href='".$image."' rel='lytebox[roadtrip".$content->id."]'><img src='".$thumbnail."' alt='".htmlspecialchars($content->ad_headline)."' /></a>"; 
                                break;
                            case 'highslide':
                                echo "<a id='thumb".$content->id."' class='highslide' onclick='return hs.expand (this)' href='".$image."'><img src='".$thumbnail."' alt='".htmlspecialchars($content->ad_headline)."' /></a>";
                                break;
                            case 'default':    
                            default:
                                echo "<a href='".$image."' target='_blank'><img src='".$thumbnail."' alt='".htmlspecialchars($content->ad_headline)."' /></a>";
                                break;
                        }
                    }
                    if (($image_found == 0)&&($conf->nb_images >  0))
                    {
                        echo '<img src="'.ADSMANAGER_NOPIC_IMG.'" alt="nopic" />'; 
                    }
                    ?>
                </div>
Mozeli se ovo nekako lako modifikovati?
Unapred hvala na odgovoru.
[ Tpojka @ 01.10.2013. 15:05 ] @
Najjednostavnije bi bilo ubaciti liniju:

Code (php):

/*
.
.
.
*/

$image_found =1;
$content->images = $content->images[0]; // trebalo bi da od niza ###$content->images = ('a', 'b', 'c');### napravi niz ###$content->images = ('a');###
foreach($content->images as $img)
/*
.
.
.
*/

 
[ korisnikk @ 01.10.2013. 15:36 ] @
Ubacio sam kod, ali se posle toga ne prikazuje nijedna slika.
[ Tpojka @ 01.10.2013. 16:22 ] @
Onda probaj sa:

Code (php):

$content->images = current($content->images); // na istom mjestu umjesto one nove linije
 
[ korisnikk @ 01.10.2013. 17:06 ] @
Isti efekat(ne prikazuje se nijedna slika).
[ Tpojka @ 01.10.2013. 17:24 ] @
Nađi kraj petlje
Code (php):

foreach($content->images as $img)
 

, tik prije zatvaranja vitičastom zagradom dodaj jedno
Code (php):

break;
 

Dakle:
Code (php):

foreach($content->images as $img)
{
//code
//more code
//even more
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}
 
[ korisnikk @ 01.10.2013. 17:57 ] @
Ovo je dalo zeljeni efekat,ali se nazalost odrazilo i na pop-up.
Postoji li neka mogucnost da se u pop-upu sacuvaju sve slike(da u oglasu bude jedna slika,a da se klikom na nju u lytebox pop-up prozoru mogu pregledati sve slike kao i ranije).
[ bantu @ 01.10.2013. 21:29 ] @
A šta bi bilo kada bi neposredno prije foreach dodao sledeći kod?

Code:
for ($i = 1; $i < $count($content->images); $i++) {
    unset($content->images[i]);
}
[ korisnikk @ 02.10.2013. 14:08 ] @
Citat:
A šta bi bilo kada bi neposredno prije foreach dodao sledeći kod?
Fatal error.
[ Tpojka @ 02.10.2013. 14:22 ] @
Ideja je sljedeća:

treba da kloniraš $content->images objekt prije foreach petlje, da odradiš petlju kako sam naveo,
i smisliš način kako da iz kloniranog objekta izvučeš slike za lytebox pop-up prozor tj da ih uvučeš unutra.

Ne znam šta bi drugo trebalo.



edit: iz kloniranog objekta, ne iz [s]klonirane petlje[/s] kako je pisalo - typo

[Ovu poruku je menjao Tpojka dana 02.10.2013. u 16:34 GMT+1]

[Ovu poruku je menjao Tpojka dana 02.10.2013. u 16:34 GMT+1]
[ korisnikk @ 02.10.2013. 17:00 ] @
Nazalost,ne umem ovo da uradim(totalni sam tutumrak za PHP).
[ plus_minus @ 02.10.2013. 17:14 ] @
Evo još malo pomoći..

Daklem, "kloniranje"..

Unutar svoje funkcije/koda negde, pre nego što kreneš sa foreach() loop-om

Code (php):


 $clone=array();

 $something = 'Some damn thing!';

 foreach($original as $n->$suspect){
 
 if($original[$n] == $something)

  $clone[]=$suspect;
 
 else do_something_else();

 }

 


Možda ti je ovako lakše? Sa još jednim nizom, bez potrebe za kloniranjem objekta?
[ korisnikk @ 04.10.2013. 21:36 ] @
@plus_minus

Da li je ovo neki opsti kod u koji ja treba da ubacim neke vrednosti za varijable?
[ plus_minus @ 04.10.2013. 22:05 ] @
To je.. nazovi ga kako hoćeš ... neki hint.

Ti izmenjaj nazive kako treba po tvom kodu.

Umesto $original treba da stoji $content->images ...

itd.

Pa kad se desi da naiđe na odgovarajuću sliku, a ti udri onda break;

Kao što ti je Tpojka napisao.
[ korisnikk @ 06.10.2013. 15:19 ] @
Ako neko ume ovo da resi,bio bih raspolozen da castim veceru(t.j. da posaljem novac da se kreator resenja u moje ime casti vecerom).
[ plus_minus @ 06.10.2013. 15:49 ] @
Ja bih samo da se ispravim što se tiče prethodnog code taga gore (izinjenje, moja greška), ne treba da bude ... as $n->$suspect već ... as $n=>$suspect
D:
[ Dzoni986 @ 16.10.2013. 23:30 ] @
Citat:
Tpojka:
Nađi kraj petlje
Code (php):

foreach($content->images as $img)
 

, tik prije zatvaranja vitičastom zagradom dodaj jedno
Code (php):

break;
 

Dakle:
Code (php):

foreach($content->images as $img)
{
//code
//more code
//even more
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}
 



Ne znam da li je ovo jos uvek aktuelan problem, ali probaj nesto ovako:
foreach($content->images as $img)
{
//code
//more code
//even more
if(in_array($this->conf->image_display, array("lightbox", "lytebox")))
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}

Stvar je u tome da moras da pravis nekako razliku u kom delu app prikazujes slike, a mislim da ti tome sluzi ova varijabla $this->conf->image_display, a mozda se i varam

[ ivan.a @ 17.10.2013. 00:04 ] @
Probaj uz pomoć css i overflow:hidden.
Dakle, napravi wrapper/box koji ima iste dimenzije kao slika (setuj width i height) i stavi overflow:hidden.

Nađi:
Code:
<div class="adsmanager_ads_image">

i zameni sa
Code:
<div class="adsmanager_ads_image" style="height:120px; overflow:hidden;">

(ili height i overflow dodaj u .css)

Samo označi potrebne dimenzije.

[Ovu poruku je menjao ivan.a dana 17.10.2013. u 01:45 GMT+1]
[ korisnikk @ 17.10.2013. 16:31 ] @
@Dzoni986

Isti efekat kao i ranije,jedna slika u oglasu ali i jedna slika u popup-u.
[ korisnikk @ 17.10.2013. 16:57 ] @
@ivan.a

Pokusavam preko PHP-a,posto CSS sakriva i neke potrebne elemente na strani(cenu koja se nalazi ispod slika).
[ ivan.a @ 17.10.2013. 17:42 ] @
Onda napravi wrapper sa overflow:hidden samo za slike, umesto za ceo element, gde će da se prikazuje samo jedna slika (dok će ostale biti van "vidnog" polja), a ispod tog elementa cena i/ili šta je već potrebno.

Mislim da ćeš ovo najbolje rešiti uz pomoć css-a, jer u suprotnom moraš dosta modifikovati kod. Slike koje se prikazuju u okviru div-a će se prikazivati uz pomoć lightbox (ili popup) efekta. Ti hoćeš da prikažeš samo jednu sliku, a sve ostale klikom na link, što znači da sve slike moraju biti prikazane (osim ako ne koristiš ajax call).
Najbolji način da ovo rešiš je uz pomoć css-a, što se obično i radi.
Sa php-om uzimaš podake iz baze za slike, a način na koji će se one prikazati se rešava uz pomoć HTML/css/javascript.
[ Dzoni986 @ 17.10.2013. 21:41 ] @
Citat:
Dzoni986:
Citat:
Tpojka:
Nađi kraj petlje
Code (php):

foreach($content->images as $img)
 

, tik prije zatvaranja vitičastom zagradom dodaj jedno
Code (php):

break;
 

Dakle:
Code (php):

foreach($content->images as $img)
{
//code
//more code
//even more
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}
 



Ne znam da li je ovo jos uvek aktuelan problem, ali probaj nesto ovako:
foreach($content->images as $img)
{
//code
//more code
//even more
if(in_array($this->conf->image_display, array("lightbox", "lytebox")))
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}

Stvar je u tome da moras da pravis nekako razliku u kom delu app prikazujes slike, a mislim da ti tome sluzi ova varijabla $this->conf->image_display, a mozda se i varam :)



Moja greska, trebala je negacija da ide u IF
if(!in_array($this->conf->image_display, array("lightbox", "lytebox")))
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju
}

Bilo bi dobro i kada bi mogao da uradis var_dump($this->conf->image_display); cisto da vidis da li ima razlike u ovoj promeljivoj kada se poziva na 2 razlicita nacina. Ako to uspes da uhvatis, resio si problem.
[ ivan.a @ 17.10.2013. 22:11 ] @
Citat:
break; //tako ce da se obustavi potraga za drugim slikama jer ce se izvesti samo jedan prolaz kroz petlju

I opet će se prikazivati jedna slika, ili ako je u admin panelu stavio drugi efekat (koji nije u tvom nizu - in_array) onda će se opet prikazati sve slike.
Kako misliš da prikažeš jednu sliku u oglasu, a sve slike preko javascript na ovaj način, kada iz petlje prikazuješ samo jednu sliku?

Već sam napisao rešenje i testirao Ads Manager sa slikama i cenom ispod slike.

I kada se klikne na sliku prikazuju se sve iz galerije preko lytebox/popup efekta.
[ Tpojka @ 17.10.2013. 22:24 ] @
^
Izvučeno iz konteksta. To rješenje je djelovalo za prvo pitanje.
Ovo sa overflow bi moglo da upali, još ako je testirano - ih... :)
[ korisnikk @ 21.10.2013. 13:31 ] @
Nije PHP resenje ali svakako moze da posluzi.

@ivan.a
Posalji mi broj racuna porukom da castim tu veceru,kao sto sam rekao.