Jak sprawdzić jakiego typu jest załącznik - Zend Framework

0

Witam, chcę stworzyć warunek if(załącznik to zdjęcie){} else {}. Czy mógłby mi ktoś podpowiedzieć jak to zrobić?

                 <div class="span12 wallPostAttachments">
                    <p><?php echo $this->DocumentRelated('wall', $this->wallItem->id, true);?></p>
//Tutaj zamiast od razu dodawać załącznik w zależności od tego co będzie zaczytywane wykona czynność X
                </div>
0

To zend 1 czy 2? Musisz to zrobić live czy w akcji na kliknięcie?

0

Zend 1, ale chętnie poznam dwa rozwiązania jeżeli masz czas, zawsze się przyda dodatkowa wiedza. Jeżeli zdjęcie to:
a) nadaje mu ID, bo później javascript mi je zmniejsza gdy jest pionowe do wysokości 249, a gdy poziome do szerokości 249
b) na klik otwiera się lightbox ze zdjęciem

Załącznik jest dodawany na wallu do posta (opcjonalnie oczywiście).

0

Powoli,
masz posta. Tam jest upload plików. Teraz po przesłaniu formularza chcesz sprawdzić czy jest to obrazek czy inny plik i odpowiednio go przetworzyć. Dobrze rozumiem?

0

Zgadza się. **W tym momencie ** ustawia się wszystko z automatu tzn. jeżeli wrzuci ktoś dokument to jest link do dokumentu (z nazwa bla bla, standardowo), a zdjęcie ląduje w wymiarach rzeczywistych, czyli jak ktoś upnie 1980 x 1080 to wiadomo jak to wygląda.

Chcę, żeby teraz po przesłaniu zdjęcie wylądowało w formie miniaturki (tak np. jak na facebooku, gdy ktoś doda posta na tablicy), a po kliknięciu otworzył się lightbox. W zasadzie wszystkie klocki mam już gotowe, tylko nie wiem jak to połączyć, brakuje mi tego sprawdzenia, czy ktoś dodaje zdjęcie czy dowolny inny plik.

user image

1

Musisz w akcji w kontrolerze ustawić sprawdzenie czy jest to plik graficzny czy nie.
Po wciśnięciu przycisku sprawdź po kolei pola formularza. Jeżeli znajdzie plik, to sprawdza rozszerzenie pliku:

$tmpExt = explode(".", $data[$name]['name']);
if(is_array($tmpExt)){
    $tmpExt = strtolower($tmpExt[count($tmpExt)-1]);
}

Teraz powinieneś sobie zdefiniować rozszerzenia jakie posiadają możliwe do upload'u pliki graficzne. Jeżeli rozszerzenie pliku odpowiada temu, które wcześniej zdefiniowałeś, to jest to plik graficzny=odpowiednio go przeformatuj i stwórz miniaturkę. Potrzebujesz kodu php tworzącego miniaturę?

0

Nie bardzo mam pomysł jak to skleić.. Tak wygląda kontroler walla:

    public function upload($wallPostId){
        if(empty($wallPostId)) return;
        $upload = new Zend_File_Transfer_Adapter_Http();
        $files  = $upload->getFileInfo();
        foreach($files as $file => $fileInfo) {
            if ($upload->isUploaded($file)) {
                if ($upload->isValid($file)) {
                    if ($upload->receive($file)) {
                        $info = $upload->getFileInfo($file);
                        $this->_model->createDocumentsFromAttachments($wallPostId, $info[$file]);
                    }
                }
            }
        }   
    }
1

Tak na szybko trochę po googlałem i skleciłem coś takiego w zf1. Sprawdź czy działa bo nie piszę w zf1 i miałem z nim bardzo mało styczności. Cały czas tworzę w ZF2.

public function upload($wallPostId){
        if(empty($wallPostId)) return;
        $upload = new Zend_File_Transfer_Adapter_Http();
        $files  = $upload->getFileInfo();
        $imageExtensionArray = array("jpg","png");//tutaj tablica z dopuszczalnymi rozszerzeniami plików graficznych
        foreach($files as $file => $fileInfo) {
            if ($upload->isUploaded($file) && $upload->isValid($file) && $upload->receive($file)) {              
                $info = $upload->getFileInfo($file);
                $extension = pathinfo($fileInfo['name'], PATHINFO_EXTENSION); //wójek google powiedział że zf1 tak uzyskamy rozszerzenie pliku. Zweryfikuj to.
                /*
                 * Tutaj warunek czy jest obrazkiem
                 */
                if(in_array($extension, $imageExtensionArray))
                {
                    // wgrywany plik jest obrazkiem
                }
                else
                {
                    //wgyrwany plik nie jest obrazkiem
                }
                $this->_model->createDocumentsFromAttachments($wallPostId, $info[$file]);
            }
        }   
    }
0

Stary, jesteś wielki! Póki co przetestowałem i wygląda na to, że działa. Zaraz zaimplementuje skalowanie i lightboxa, i dam znać :)))!

@Edit

A czy można to samo zrobić w widoku? Coś w ten deseń:

/* \components\wall-item.phtml */
<div class="span12 wallPostAttachments">
                <p><?php 
                	$imageExtensionArray = array("jpg","png","gif","bmp");
                    $extension = pathinfo($fileInfo['name'], PATHINFO_EXTENSION); // Tutaj nie bardzo wiem czy i jak się odwołać do tego
					if(in_array($extension, $imageExtensionArray))
               	 	{
                   		//kod miniaturki
                	}
                	else
                	{	
                    	echo $this->DocumentRelated('wall', $this->wallItem->id, true);
                	}
                   ?>
		</p>
</div>
1

Z technicznego punktu widzenia można, ale wszelkiego rodzaju akcje powinny odbywać się w kontrolerze.

0

Jak to mówią podążaj za tymi, którzy osiągneli to co Ty chcesz osiągnąć.. Jak się uczyłeś zenda kalar? Manual i jazda, czy polecasz jakieś materiały? Może być Zend 2 oczywiście.

0

Najpierw był manual i szkieletowa aplikacja. Jak programowałeś wcześniej w jakimś języku i framework'u to przesiadka na zend'a nie powinna być trudna. Po stworzeniu aplikacji szkieletowej zacząłem sobie tworzyć swój własny cms. Robiłem to na pracę magisterską. To co było mi potrzebne odszukiwałem w dokumentacji i wdrażałem. Googlać nie było po co, bo wtedy jeszcze nie było za dużo materiałów na nacie o ZF2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1