2013-11-01 3 views
0

Я пытаюсь отправить некоторые данные из контроллера PHTML с помощью ajax/jason, чтобы показать их на textarea из phtml страницыMagento Как отправить данные из контроллера, чтобы отобразить их в PHTML файл

В моем контроллере у меня есть петля

foreach($varlines as $vars =>$variable) 
{ 
     $completestatus->setData('comment',$oldcoment.' <br/ > Paid on LEC chq # '.$chqnumber." ".$datepaid." ".$amount)->save(); 

    //because Mage::getSingleton('adminhtml/session')->addSuccess comes after load page 
    //I need ajax to show the updated order while its running the loop 
    //and displaying it on phtml 
} 

<?php 
class Ahb_LecRemittance_Adminhtml_LecRemittanceController extends Mage_Adminhtml_Controller_Action 
{ 
    public function indexAction() 
    { 
     $this->loadLayout()->renderLayout(); 

    } 

    public function runremitAction() 
    { 

     $post = $this->getRequest()->getPost(); 
     try { 
      if (empty($post)) { 
      Mage::getSingleton('adminhtml/session')->addError("Invalid form data."); 
       Mage::throwException($this->__('Invalid form data.')); 
      } 


if(isset($_FILES['fileinputname']['name']) and (file_exists($_FILES['fileinputname']['tmp_name']))) { 
try { 
    $uploader = new Varien_File_Uploader('fileinputname'); 
    $uploader->setAllowedExtensions(array('csv')); // or 'jpg','jpeg','gif','png' pdf or anything 

    $uploader->setAllowRenameFiles(false); 

    $uploader->setFilesDispersion(false); 

    $path = Mage::getBaseDir('media')."/tmp". DS ; 
    $originalfilename=str_replace(' ','',stripslashes($_FILES['fileinputname']['name'])); 

     $originalfilename = trim(preg_replace('/\s*\([^)]*\)/', '', $originalfilename)); 

    $uploader->save($path,$originalfilename); 

    $data['fileinputname'] = $originalfilename; 


    //run the file 

$path = Mage::getBaseDir('media')."/tmp". DS ; 
$filename=$path.$originalfilename; 


$file=fopen($filename,"r"); 

$readchq=false; 
$chqnumber=""; 
if($file!==false){ 
while(!feof($file)) 
    { 

$line=fgets($file); 
$varlines=explode(",",$line); 
$ordernum=0; 

foreach($varlines as $vars =>$variable) 
{ 

$i=0; 

if(strpos($variable,"YICP")!==false){ //YICP exist 
    $ordernum=str_replace('YICP','',$variable); 
    $amount = str_replace('"','',end($varlines)); 
    $date1=str_replace('"','',$varlines[count($varlines)-2]); 
    $date2 = str_replace('/', '-', $date1); 
$datepaid= date('Y-m-d', strtotime($date2)); 


    $historyid=0; 
    //get complete status to append its comments 

    $remittmodel = Mage::getModel('ahb_lecremittance/remittance') 
    ->setOrderid($orderid) 
    ->setAmount($amount) 
    ->setCreated_at($datepaid) 
     ->setChqnum($chqnumber) 
    ->save();*/ 
    $result = array("Order "=>$ordernum,"Amount"=>$amount,"CHQ Num"=>$chqnumber); 

    //$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); 
//HERE I need to view the order number added in table while running the foreach loop 
//How I do this in ajax 

    Mage::getSingleton('core/session')->setData('variable1', 'value'); 

    } 
    } 
} 

    } 
fclose($file); 
unlink($filename); 
    Mage::getSingleton('adminhtml/session')->addSuccess($message); 
} //end of if fopen 
else 
Mage::getSingleton('adminhtml/session')->addError("Error: Couldn't open the file ".$filename); 


      $this->_redirect('*/*'); 
    }catch(Exception $e) { 
Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
    } 

} 
     } catch (Exception $e) { 
      Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
     } 
     $this->_redirect('*/*'); 
    } 

    } 

Мой PHTML файл:

<div class="content-header"> 
    <table cellspacing="0" class="grid-header"> 
     <tr> 
      <td><h3><?=$this->__('Upload the Monthly Remittance')?></h3></td> 

     </tr> 

     <tr> 

     </tr> 
    </table> 
</div> 
<div class="entry-edit"> 
    <form id="edit_form" name="edit_form" method="post" enctype="multipart/form-data" action="<?=$this->getUrl('*/*/runremit')?>"> 
     <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /> 

     <h4 class="icon-head head-edit-form fieldset-legend"><?=$this->__('Remittance file')?></h4> 
     <?php echo $this->getBlockHtml('formkey') ?> 
     <fieldset> 
      <table cellspacing="0" class="form-list"> 
       <tr> 
        <td><label for="fileinputname">Upload the file </td> 
        <td><input type="file" name="fileinputname" id="fileinputname" /></td> 
        <td> 

       <button onclick="editForm.submit()" class="scalable save" type="button"><span><span>Submit & Run</span></span></button> 

      </td> 

      </table> 

     </fieldset> 
    </form> 
</div> 
<input name="test" type="text" value="<?php echo Mage::getSingleton('core/session')->getData('variable1') ?>" /> 

<script type="text/javascript"> 
    var editForm = new varienForm('edit_form'); 

</script> 
+0

если вы используете Ajax, чем вы должны повторить ваши данные и, если вы используете JSON, чем нужно кодировать, используя json.Try один метод в время. –

+0

вы знаете, как передавать данные с контроллера на phtml – Alan

+0

да почему not.Alot таких способов, как сеанс, установить переменную и получить на phtml.give мне данные, которые вы хотите показать на phtml. –

ответ

0

Я использовал этот метод в файле PHTML

<script type="text/javascript"> 

    function update() { 

    var url=document.getElementById("url_key").value; 

     var textarea = document.getElementById("chatlog"); // Replace with the ID of your txtarea 

     var client = new XMLHttpRequest(); 
     client.open('GET', url,true); 
     client.onreadystatechange = function() { 
      textarea.value = client.responseText; 
     } 
     client.send(); 
     //setTimeout('scroll(document.width, document.height);', 100); // Scroll to the bottom of the page. 


} 

setInterval('update()', 500); // Loop every 1000 milliseconds (i.e. 1 second) 

</script> 
0

Попробуйте использовать: Mage::register('variable', 'value'); Г.Е., что переменная типа: Mage::registry('variable'); Другие способы использования сеансов для данных. Установить переменный: Mage::getSingleton('core/session')->setData('variable_name', 'value'); Получить переменным: Mage::getSingleton('core/session')->getData('variable_name');

Если вы хотите, чтобы показать данные Аякса, чем просто эхо переменного после цикла, как.

echo $varaible;. 

Добавить OnClick событие в кнопке, как <button value="" onclick="sendTest()"> Хотя в Ajax ответ вы получите данные.

Написать Js код для запроса Ajax, как это:

<script> 
function sendTest() 
{ 
// formdata contains the variable data that you want to send with ajax request 
var formData = {testemail:jQuery('#test_recipient').val(),customeremail:jQuery('#test_customer_email')}; 
    var form_key = '<?php echo Mage::getUrl("*/*/runremit/key/".$this->getFormKey());?>'; 
jQuery.ajax({ 
      url: form_key+'?isAjax=true', 
      type: 'GET', 
      data: formData, 
      success: function(data) { 
      alert(data); 
      } 
    }); 
} 
</script> 

Хотя в контроллере сделать так.

public function runremitAction() 
    { 
echo $_GET['testemail']; 
} 
+0

Спасибо за вашу помощь, предлагаемое решение показывает значение в phtml страницы после того, как страница загружена, но мне она нужна, пока цикл запущен, покажите значение, похожее на ajax – Alan

+0

теперь проверяйте с изменениями в моем ответе –

+0

Я не понял, цикл находится в контроллере, а ajax должен быть в phtml файл, как вы думаете, $ this-> getResponse() -> setBody может помочь – Alan