2012-09-26 9 views
12

Magento 1.7.0.2: Próbuję uzyskać formularz (w backend), aby przesłać plik (obrazek) do Post, jeśli jest niekompletny, lub kontroler adminhtml, jeśli jest kompletny. Moja walidacja JavaScript działa dobrze, ale kiedy/jeśli mój formularz jest POSTed, przekierowywany jest do pulpitu. Mam klucz formularza dołączony i moje adresy URL są tworzone za pomocą specjalnego klucza, ale nadal nie mogę uzyskać POST przez. Czy ktoś może mi pomóc?Formularz administratora Magento przekierowuje do pulpitu? Post?

Phtml plik szablonu:

<script type="text/javascript"> 
function postSelf(){ 
    form=document.getElementById('imgSel'); 
    form.action='<?php Mage::helper("adminhtml")->getUrl("*/*/")?>'; 
    form.submit(); 
}  
function validateForm(){ 

    var name=document.forms["imgSel"]["iName"].value; 
    var file=document.forms["imgSel"]["file_upload"].value; 
    if (!name){ 
     alert("You must have an Image Name!"); 
     postSelf(); 
    } 
    else if (!file){ 
     alert("You must have a File to upload"); 
     postSelf(); 
    } 
    else{ 
     form=document.getElementById('imgSel'); 
     form.submit(); 
    } 
} 
    </script> 

    <?php Mage::log(Mage::helper("adminhtml")->getUrl("*/*/"), null, ‘layout.log’);?> 

<h3 class="icon-head head-adminhtml-imagegrid">Add an Image:</h3> 

<form name="imgSel" id="imgSel" action="<?php Mage::helper("adminhtml")->getUrl("*/*/insert")?>" 
     enctype="multipart/form-data" method="POST"> 
<!--Form key--> 
    <input type="hidden" name="form_key" value="<? echo Mage::getSingleton('core/session')->getFormKey(); ?>" /> 
    <?php Mage::log(Mage::getSingleton('core/session')->getFormKey(), null, ‘layout.log’);?> 

    <label for="iName">Image Name:</label> 
    <input type="text" name="iName"> 

    <label for="style">Associated Style Name:</label> 
    <select name="style"> 
    <?php 
    echo '<option value="-1">None</option>'; 
    $styles = Mage::getModel('cartonplugin/cartonstyle')->getCollection(); 
    foreach($styles as $style){ 
     echo '<option value="'.$style->getId().'"'; 
     echo '>'.$style->getData('style_name').'</option> '; 
    } 
    echo '</select><br />'; 
    ?> 
    <input type="hidden" name="MAX_FILE_SIZE" value="40" /> 
    Upload Image: <input type="file" name="file_upload" /> 
    <br> 
    <!--<input type="submit" value="submit">--> 
    <button onClick="validateForm()" class="UploadButton" >Upload</button> 
</form> 

Kontroler: Tylko funkcja insertAction() jest dla tej postaci. Reszta to gridview stuff do radzenia sobie z każdym już przesłanym obrazem.

<?php 
class Nationwide_Newcart_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action 
{ 
    protected function _initAction() 
    { 
     $this->loadLayout()->_setActiveMenu('igrid/set_time7') 
       ->_addBreadcrumb('image Manager','image Manager'); 
     return $this; 
    } 

    public function indexAction() 
    { 
     $this->loadLayout(); 
     $this->renderLayout(); 

     //var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles()); 
    } 

     public function newAction() 
    { 
     $this->_forward('edit'); 
    } 

    public function editAction() 
    { 
     $stId = $this->getRequest()->getParam('id'); 
     $model = Mage::getModel('newcart/imagemodel')->load($stId); 
     if ($model->getId() || $stId == 0) 
      { 
      Mage::register('image_data', $model); 
      $this->loadLayout(); 
      $this->_setActiveMenu('igrid/set_time7'); 
      $this->_addBreadcrumb('image Manager', 'image Manager'); 
      $this->_addBreadcrumb('Image Description', 'Image Description'); 
      $this->getLayout()->getBlock('head') 
        ->setCanLoadExtJs(true); 
      $this->_addContent($this->getLayout() 
        ->createBlock('newcart/adminhtml_imagegrid_edit')) 
        ->_addLeft($this->getLayout() 
        ->createBlock('newcart/adminhtml_imagegrid_edit_tabs') 
      ); 
      $this->renderLayout(); 
      } 
      else 
      { 
       Mage::getSingleton('adminhtml/session') 
         ->addError('That Image does not exist'); 
       $this->_redirect('*/*/'); 
      } 
     } 

    public function saveAction() 
    { 
     if ($this->getRequest()->getPost()) 
     { 
      try { 
       $postData = $this->getRequest()->getPost(); 
       $model = Mage::getModel(''); 
       //Mage::log($this->getRequest()->getParam('id'), null, ‘layout.log’); 
       if($this->getRequest()->getParam('id') <= 0) 
        $model->setCreatedTime(
         Mage::getSingleton('core/date') 
           ->gmtDate() 
        ); 
       $model 
        //->addData($postData) //DO NOT! Includes a form key! 
        ->setUpdateTime(
          Mage::getSingleton('core/date') 
          ->gmtDate()) 
        ->setId($this->getRequest()->getParam('id')); 
       $model->setData('image_name', $postData['image_name']); 
       $model->setData('style_name', $postData['style_name']); 
       $model->save(); 

       Mage::getSingleton('adminhtml/session') 
          ->addSuccess('successfully saved'); 
       Mage::getSingleton('adminhtml/session') 
           ->settestData(false); 
       $this->_redirect('*/*/'); 
       return; 
      } catch (Exception $e){ 
       Mage::getSingleton('adminhtml/session') 
            ->addError($e->getMessage()); 
       Mage::getSingleton('adminhtml/session') 
       ->settestData($this->getRequest() 
            ->getPost() 
       ); 
       $this->_redirect('*/*/edit', 
          array('id' => $this->getRequest() 
               ->getParam('id'))); 
       return; 
       } 
       } 
       $this->_redirect('*/*/'); 
      } 

    public function deleteAction() 
    { 
     if($this->getRequest()->getParam('id') > 0) 
     { 
      try 
      { 
       $model = Mage::getModel('newcart/imagemodel'); 
       $model->setId($this->getRequest() 
            ->getParam('id')) 
          ->delete(); 
       Mage::getSingleton('adminhtml/session') 
          ->addSuccess('successfully deleted'); 
       $this->_redirect('*/*/'); 
       } 
       catch (Exception $e) 
       { 
         Mage::getSingleton('adminhtml/session') 
          ->addError($e->getMessage()); 
         $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); 
       } 
     } 
      $this->_redirect('*/*/'); 
    } 

    public function insertAction(){ 
     $postData = $this->getRequest()->getPost(); 
     Mage::log($postData, null, ‘layout.log’); 

     //post checking 
     if(empty($postData)){ 

     } 

     $this->_redirect('*/*/'); 
    } 
} 
+0

twoje $ _POST są puste? – Guerra

+0

Nie wiem. Cokolwiek bym stracił, straciłbym, gdy strona zostanie przekierowana. Wiem, że mój kontroler nigdy nie otrzymuje POST z tego. –

+0

Czy możesz wkleić Ci kod kontrolera? – xyz

Odpowiedz

23

Istnieje kilka rzeczy, które trzeba sprawdzić:

  1. Musisz echo brakuje tutaj:

    action="<?php Mage::helper("adminhtml")->getUrl("*/*/insert")?>" 
    

    Powinny być

    action="<?php echo Mage::helper("adminhtml")->getUrl("*/*/insert")?>" 
    
  2. Upewnij się, że używasz tylko normalne tagów PHP (<?php ?>). Krótkie znaczniki okazały się złą praktyką, więc zmienić

    <input type="hidden" name="form_key" value="<? echo Mage::getSingleton('core/session')->getFormKey(); ?>" /> 
    

    do

    <input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" /> 
    

Wraz z tym upewnij się, że wszystkie dane poprawnie zaludnionych w HTML przy użyciu źródło przeglądania funkcji w przeglądarce.

+0

Świetnie! to echo to zrobiło !. Wielkie dzięki.Tak, muszę powtórzyć adres URL do HTML. Doh! –

+0

Słodkie, przegłosowane, dzięki! Jestem tak głupi, aby nie uwzględniać klucza sesji lol. – Gogol

+0

Nie miał pojęcia o konieczności ukrywania pola formularza. Dzięki! :) – johnsnails

0

Eric, twoje .phtml wyglądać dobrze .... Teraz trzeba sprawdzić, czy adres URL działanie formularza są skierowane we właściwym miejscu i zrobić kontroler jak ten:

class controller_name extends Mage_Core_Controller_Front_Action{ // must extends this one for frontend controllers and Mage_Adminhtml_Controller_Action to backend controller. 
public function insertAction(){ 
    $_POST['elementName']; //to this to get post information. 
    $this->getRequest()->getPost('elementName'); //or this way. 
} 
} 
+0

Przetestowałem już adres URL i wskazują one właściwe miejsce.-http: //localhost/magento/index.php/imageadmin/adminhtml_index/index/key/f49c.../ Ale cokolwiek się stanie, nie dotrze. –

+0

Zmień rozszerzoną klasę na Mage_Core_Controller_Front_Action – Guerra

+0

Teraz mam bardzo pustą stronę przednią zamiast pełnego backendu. Jak to pomaga? –

2

Spróbuj dodać ten ciąg do swojego formularza.

<input type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey()?>" name="form_key"/> 

Spowoduje to utworzenie ukrytego parametru dla żądania, który zawiera form_key używany przez Magento. Ten form_key służy do upewnienia się, że przesłany formularz pochodzi z twojej magento-instancji (jako zabezpieczenia). Bez dostarczania tego form_key, twój formularz nie będzie działał.

+0

wyjaśnić ten ciąg lepiej – Chris

Powiązane problemy