如何将javascript值传递给控制器​​动作?

时间:2017-07-17 19:28:26

标签: javascript php jquery ajax magento

我尝试了不同的方法将我的 Category.php 文件中的选定值转换为控制器文件( IndexController.php )。 为此,我有3个文件 Category.php 作为渲染器(是我添加到magento中 Grid.php 的下拉列表)

<?php

class Ns_Thorleif_Block_Adminhtml_Commerciaux_Edit_Form_Renderer_Category extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{   
     public function render(Varien_Object $row)
{

$category = Mage::getModel('thorleif/category')->getCollection();

$category_rows = $category->getData();
$html = '<select id="select_category" name="select_category" onchange="ChooseContact(this)">';
$sep = '';
?>
<input type="text" name="id_cat" id="id_cat" value="" />
<?php

foreach ($category_rows as $rows) {

    // put the correct key here

    if (!$rows['level']) {
        $html .= $sep . "<optgroup label='{$rows['name']}'>";
        $sep = '</optgroup>';
    } else {
        $nbsp = str_repeat('&nbsp;', ($rows['level'] - 1)* 5);
        $html .= "<option value='{$rows['id_linio_category']}' title='{$rows['name']}' selected>
        $nbsp {$rows['name']}</option>";
    }
}
$html .= '</select>';
return $html;
}
}
?>

Grid.php

 public function _prepareColumns()
        {
    $this->addColumn('lin',
                array(
                    'header' => 'Lin Category',
                    'align' => 'left',
                    'index' => 'lin',
                    'filter'    => false,
                    'sortable'  => false,
                    'renderer' => 'Ns_Thorleif_Block_Adminhtml_Commerciaux_Edit_Form_Renderer_Category'
                )
            );
            $this->addColumn('action',
                array(
                    'header'    =>  Mage::helper('customer')->__('Action'),
                    'width'     => '100',
                    'type'      => 'action',
                    'getter'    => 'getId',
                    'actions'   => array(
                        array(
                            'caption'   => Mage::helper('customer')->__('Sync'),
                            'url'       => array('base'=> '*/*/sync'),
                            'field'     => 'id',
                            'target'=>'_blank'
                        )
                    ),
                    'filter'    => false,
                    'sortable'  => false,
                    'index'     => 'stores',
                    'is_system' => true,
            ));
            return parent::_prepareColumns();
}

IndexController.php 我想获取/使用Selected&#34; Javascript_value&#34;在 Category.php

下面
public function syncAction()
    {

    //var_dump($_REQUEST['id_cat']);
    //var_dump($_POST['id_cat']);
    //var_dump($_GET['id_cat']);
        $id = $this->getRequest()->getParam('id');
        $products = Mage::getModel('catalog/category')
                    ->load($id)
                    ->getProductCollection()->getData();

        $send = "<Request>\n";

        Foreach($products as $values){
            $code = Mage::getModel('catalog/product')->load($values['entity_id'])->getData();
            $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($values['entity_id']);


            $send .= "<Product>".$this->getProductXml($code, $commercial, ***JAVASCRIPT_VALUE***, $stock)."</Product>\n";

        }
        $send .="</Request>"; 
        $api = new Ns_Thorleif_Adminhtml_IndexController();
        $response = $api->postProductAction($send);
        echo "<xmp>$send</xmp>";
        echo "<xmp>$response</xmp>";
    }

3个文件在同一首页上有结果Category.php = select dropdownlist,Grid.php =前面的完整网格,包括带下拉列表的列,IndexController.php =我用来处理一些数据的函数。

有什么建议吗?我已尝试过get / post / request的想法,尝试将数据保存在数据库中并尝试获取它。

1 个答案:

答案 0 :(得分:0)

您只是重定向控件而不发布任何表单。这就是为什么你无法获得数据。你可以做两件事。

  1. 在“ChooseContact”js函数中,使用get方法重新选择syncAction和所选值,然后删除操作按钮。

  2. 在操作按钮中,您可以调用js函数并获取下拉列表选择值,然后重定向,而不是重定向控件。请参阅:Magento adminhtml grid with javascript action column

  3. 希望这会有所帮助!