Administration Magento formulaire redirige vers le tableau de bord ?post?
Magento 1.7.0.2:
Je vais essayer d'obtenir un formulaire (dans le backend) pour télécharger un fichier(image) pour Poste à elle-même si elle est incomplète, ou le adminhtml contrôleur si elle est complète. Ma validation JavaScript fonctionne bien, mais quand/si mon formulaire est Publié, je suis redirigé vers le tableau de bord. J'ai un formulaire de clés inclus et mes url sont créés avec la clé spéciale, mais je ne peux pas avoir un POSTE à travers. Quelqu'un peut-il m'aider?
La phtml fichier de modèle:
<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>
Contrôleur: Seul le insertAction() la fonction est de cette forme. Le reste est gridview trucs pour traiter toutes les images téléchargées.
<?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('*/*/');
}
}
votre $_POST sont à venir vide??
Je ne sais pas. Ce que j'aurais est perdu lorsque la page est redirigé. Je sais que mon contrôleur n'est jamais un POST de ce.
Pouvez-vous coller contrôleur de code ?
Vous pouvez ajouter <?php echo $this->getBlockHtml('formkey'); ?> après la forme de l'élément
Je ne sais pas. Ce que j'aurais est perdu lorsque la page est redirigé. Je sais que mon contrôleur n'est jamais un POST de ce.
Pouvez-vous coller contrôleur de code ?
Vous pouvez ajouter <?php echo $this->getBlockHtml('formkey'); ?> après la forme de l'élément
OriginalL'auteur Eric Bagwell | 2012-09-26
Vous devez vous connecter pour publier un commentaire.
Il ya quelques choses que vous devez vérifier:
Vous avez
echo
manque ici:Devrait être
Assurez-vous que vous utilisez uniquement la normale des balises PHP (
<?php ?>
). Les balises courtes ont prouvé être une mauvaise pratique, le changementà
Avec qui, assurez-vous d'avoir toutes les données correctement renseignée dans votre code HTML à l'aide de parcourir source fonction dans votre navigateur.
Doux, upvoted , merci! Je suis tellement stupide de ne pas inclure la clé de session lol.
N'avais aucune idée de devoir le champ de formulaire masqué. Merci! 🙂
OriginalL'auteur
Essayez d'ajouter cette corde à votre formulaire.
Cela crée un paramètre caché de la demande, qui contient les form_key utilisé par Magento. Cette form_key est utilisé pour s'assurer que le formulaire soumis origine de votre magento-instance (en tant que mesure de sécurité). Sans la fourniture de cette form_key, votre formulaire ne fonctionnera pas.
OriginalL'auteur
Eric, votre .phtml l'air bien....
Vous devez maintenant voir si l'url de l'action de ton formulaire pointe vers la droite endroit, et faire de votre contrôleur comme celui-ci:
Modifier la classe étendue à Mage_Core_Controller_Front_Action
Maintenant, j'ai un très vide en première page au lieu d'un plein backend. Comment cela vous aide?
quelle est la version de magento vous r'aide?
Magento Version: 1.7.0.2
OriginalL'auteur