Redirect после обработки формы с SWFUpload

Тема в разделе "Программирование", создана пользователем Shaienn, 14.01.2012.

  1. Offline

    Shaienn Недавно здесь

    Регистрация:
    14.01.2012
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Добрый день, четвертый день копаю Joomla 1.7.

    Задача следующая, с помощью swfupload закачивается экселевский файл, разбирается, заносится в базу данных и выводится на экран.
    Посмотрите логику компонента, так ли все?

    controller.php в корне компонента
    Код (CODE):
    1. <?php
    2. // Защита от прямого обращения к файлу
    3. defined( '_JEXEC' ) or die( 'Restricted access' );
    4.  
    5. jimport('joomla.application.component.controller');
    6. jimport( 'joomla.environment.request' );
    7.  
    8. class BtController extends JController
    9. {
    10.     function display()
    11.         {
    12.                 parent::display();
    13.         }
    14.        
    15.  
    16.                 function upload()
    17.         {
    18.             if (isset($_POST["PHPSESSID"]))
    19.                 {
    20.                     session_id($_POST["PHPSESSID"]);
    21.                 }
    22.                 session_start();
    23.                 ini_set("html_errors", "0");
    24.                                  
    25.             $model = $this->getModel('upload');
    26.                         $uploaddir = JRequest::getVar('base_upload_dir');
    27.                         $model -> setState('base_upload_dir', $uploaddir);
    28.                         $model->work();
    29.                         $this->setRedirect('index.php?option=com_users&view=login', false);    //Ничего не происходит
    30.                         $this->redirect();        //Ничего не происходит
    31.         }  
    32. }


    Далее, собранный по swfupload примерам и компонентам, файл views/bt/view.html.php
    Код (CODE):
    1. <?php
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3.  
    4.         jimport('joomla.application.component.view');
    5.         //get the hosts name
    6.         jimport('joomla.environment.uri' );
    7.         $host = JURI::root();
    8.          
    9.         //add the links to the external files into the head of the webpage (note the 'administrator' in the path, which is not nescessary if you are in the frontend)
    10.         $document =& JFactory::getDocument();
    11.         $document->addScript($host.'components/com_bt/swfupload/swfupload.js');
    12.         $document->addScript($host.'components/com_bt/swfupload/swfupload.queue.js');
    13.         $document->addScript($host.'components/com_bt/swfupload/fileprogress.js');
    14.         $document->addScript($host.'components/com_bt/swfupload/handlers.js');
    15.         $document->addStyleSheet($host.'components/com_bt/swfupload/default.css');
    16.         //when we send the files for upload, we have to tell Joomla our session, or we will get logged out
    17.         $session = & JFactory::getSession();
    18.          
    19.         $swfUploadHeadJs ='
    20.         var swfu;
    21.          
    22.         window.onload = function()
    23.         {
    24.          
    25.         var settings =
    26.         {
    27.                 flash_url : "'.$host.'components/com_bt/swfupload/swfupload.swf",
    28.                 upload_url: "index.php",
    29.                 post_params:
    30.                 {
    31.                     "PHPSESSID" : "'.$session->getId().'",
    32.                     "base_upload_dir" : "'.JPATH_SITE.DS.'images'.DS.'stories'.DS.'",
    33.                     "option" : "com_bt",
    34.                     "task" : "upload",
    35.                     "id" : "'.$session->getName().'",
    36.                     "format" : "raw"
    37.                 },
    38.             file_size_limit : "5 MB",
    39.                 //client side file chacking is for usability only, you need to check server side for security
    40.             file_types : "*.xls;*.jpeg;*.gif;*.png",
    41.             file_types_description : "All Files",
    42.             file_upload_limit : 1,
    43.             file_queue_limit : 1,
    44.             custom_settings :
    45.             {
    46.                 progressTarget : "fsUploadProgress",
    47.                 cancelButtonId : "btnCancel"
    48.             },
    49.             debug: false,
    50.          
    51.             // Button settings
    52.             button_image_url: "'.$host.'components/com_bt/swfupload/TestImageNoText_65x29.png",
    53.             button_width: "85",
    54.             button_height: "29",
    55.             button_placeholder_id: "spanButtonPlaceHolder",
    56.             button_text: \'<span class="theFont">Choose Files</span>\',
    57.             button_text_style: ".theFont { font-size: 13; }",
    58.             button_text_left_padding: 5,
    59.             button_text_top_padding: 5,
    60.          
    61.             // The event handler functions are defined in handlers.js
    62.             file_queued_handler : fileQueued,
    63.             file_queue_error_handler : fileQueueError,
    64.             file_dialog_complete_handler : fileDialogComplete,
    65.             upload_start_handler : uploadStart,
    66.             upload_progress_handler : uploadProgress,
    67.             upload_error_handler : uploadError,
    68.             upload_success_handler : uploadSuccess,
    69.             upload_complete_handler : uploadComplete,
    70.             queue_complete_handler : queueComplete  // Queue plugin event
    71.         };
    72.         swfu = new SWFUpload(settings);
    73.         };
    74.          
    75.         ';
    76.  
    77.         //add the javascript to the head of the html document
    78.         $document->addScriptDeclaration($swfUploadHeadJs);
    79.  
    80.  
    81.  
    82. class BtViewBt extends JView
    83. {
    84.     function display ($tpl = null)
    85.     {      
    86.         parent:: display ($tpl);
    87.     }
    88. }


    и файл модели models/upload.php. Сейчас здесь только копирование файла в соответствующую директорию, разворот экселя убрал.
    Код (CODE):
    1. <?php
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3.  
    4. jimport('joomla.application.component.model');
    5. jimport('joomla.filesystem.file');
    6. jimport('joomla.filesystem.folder');
    7.  
    8. class BtModelUpload extends JModel
    9. {                      
    10.     function work()
    11.     {
    12.         $base_upload_dir = $this->getState('base_upload_dir');
    13.         $user =& JFactory::getUser();
    14.         $upload_dir = $base_upload_dir.'/buytogether/'.$user;
    15.         $fileName = $_FILES['Filedata']['name'];
    16.         if ( !is_dir($upload_dir) ) { mkdir($upload_dir, 0775);}   
    17.             if (isset($_FILES)) {
    18.                     if (is_uploaded_file($_FILES['Filedata']['tmp_name'])) {
    19.                        $fullDirAndFileName = $upload_dir.'/'.$fileName;
    20.                        if(!JFile::upload($_FILES['Filedata']['tmp_name'], $fullDirAndFileName))
    21.                             {
    22.                                     echo JText::_( 'ERROR MOVING FILE' );
    23.                                     return;
    24.                             }
    25.                             else
    26.                             {
    27.                                     // success, exit with code 0 for Mac users, otherwise they receive an IO Error
    28.                                     exit(0);
    29.                             }
    30.                     }
    31.                  
    32.             }
    33.    
    34.     }
    35. }


    Так вот, логика моя слудующая:

    1.Запускается компонент index.php?option=com_bt, запускается задача display, загружается вид с формой отправки
    2. Форма отправляется на index.php?option=com_bt&task=upload
    3. В контроллере com_bt/controller.php вызывается задача upload()
    4. После выполнения upload(), автоматически переходим на вид для выдачи результатов


    Вопрос, как реализовать переход на другой вид? Бился с setRedirect и redirect, ничего не происходит... Может не надо на основной контроллер это отсылать, а надо на отдельный файл-обработчик, как в некоторых примерах?

    Спасибо
     
  2.  

Поделиться этой страницей

Загрузка...