Witam.

Może zacznę od wklejenia kodu.

  1. <?php
  2. public function indexAction()    {
  3.         $request = new Zend_Controller_Request_Http();
  4.           Zend_Loader::loadClass('Form_UploadForm');
  5.         $uploadForm = new Form_UploadForm();
  6.  
  7.  if ($request->isPost()) 
  8.  {
  9.      $this->_helper->layout->disableLayout();
  10.         if (!$uploadForm->isValid($request->getPost())) 
  11.         { // Próba walidacji formularza
  12.             $messages = implode('<br />', $uploadForm->uploadFile->getMessages());
  13.         
  14.             $information = 'Błąd podczas sprawdzania poprawności formularza. <br />'
  15.                          . '<em>'.$messages.'</em>';
  16.  
  17.             print_r($uploadForm->getMessages());
  18.         } 
  19.         elseif (!$uploadForm->uploadFile->isUploaded()) 
  20.         { // Czy cokolwiek zostało wysłane?
  21.             $information = 'Nie wybrano pliku do wysłania.';
  22.         } 
  23.         elseif (!$uploadForm->uploadFile->receive()) 
  24.         { // Odbiór pliku
  25.             $information = 'Błąd podczas odbierania pliku.';
  26.         } 
  27.         else 
  28.         { // Sukces
  29.             $information = 'Plik ' . $uploadForm->uploadFile->getFileName()
  30.                      . ' został poprawnie wysłany.';
  31.         }
  32.  } 
  33.  else 
  34.  {
  35.         $information = 'Wyślij plik używając poniższego formularza:';
  36.  }
  37.  
  38.  if ($request->getParam('asyncUpload'))  
  39.  {
  40.         /* Żądanie asynchroniczne */
  41.         echo <<<STOP
  42. <script type="text/javascript">
  43.     window.parent.finishUpload("$information");
  44. </script>
  45. STOP;
  46.  
  47.  }
  48.  else 
  49.  {
  50.         /* Wyrenderowanie widoku */
  51.         $this->view->uploadForm = $uploadForm;
  52.         $this->view->information = $information;
  53.  }
  54.     }
  55. ?>





A teraz skrypt js:



  1. <?php
  2. $(document).ready(function() {
  3.  
  4.     // Ukryta ramka do wysyłania plików
  5.     var iFrame = $('<iframe name="uploadFrame" id="uploadFrame" src=""></iframe>').hide();
  6.     // Dopisanie ramki do dokumentu
  7.     $('body').append(iFrame);
  8.  
  9.     // Dostosowanie formularza aby wysyłał dane do ramki
  10.     $('#uploadForm').attr('target', 'uploadFrame');
  11.  
  12.     // Poinformowanie serwera o tym że plik jest wysyłany asynchronicznie
  13.     $('#uploadForm').attr('action', '/index/index/asyncUpload/1');
  14.     // Zablokowanie formularza na czas wysyłania pliku.
  15.     // W tym miejscu można poinformować użytkownika o tym że
  16.     // coś się dzieje w tle.
  17.     $('#uploadForm').submit(function() {
  18.         $('#uploadForm #submit').attr('disabled', 'disabled');
  19.         $('#information').html('Wysyłanie pliku - proszę czekać');
  20.         return true;
  21.     });
  22.  
  23.     // Ta funkcja zostanie wywołana przez ramkę gdy wysyłanie zostanie
  24.     // zakończone.
  25.     window.finishUpload = function(information) {
  26.         $('#information').html(information);
  27.         $('#uploadForm #submit').attr('disabled', '');
  28.     }
  29.     
  30. });
  31. ?>




I teraz pytanie brzmi:

Jeśli zmienię miejsce formularza na adminAction i w skrypcie dam odpowiedni url:$('#uploadForm').attr('action', '/index/admin/asyncUpload/1');

to wówczas plik owszem jest przesyłany, ale cały czas mam komunikat, że plik jest wysyłany i nie uruchamia się ostatnia funkcja skryptu js.

Dlaczego?

Z góry dziękuję za odpowiedź.



EDIT:

Problem rozwiązany. Aż wstyd biggrin.gif Mianowicie zapomniałem w katalogu application/views/scripts/index/ dodac pliku admin.phtml

Temat do zamknięcia.