Проблема с Ajax в Magento
Итак, вот моя структура модуля:
Таково содержание config.xml :
<?xml version="1.0"?>
<config>
<modules>
<Netgr_Gradd>
<version>1.0.0</version>
</Netgr_Gradd>
</modules>
<global>
<blocks>
<netgr_gradd>
<class>Netgr_Gradd_Block</class>
</netgr_gradd>
<adminhtml>
<rewrite>
<catalog_product_attribute_set_main>Netgr_Gradd_Block_Adminhtml_Addgroup</catalog_product_attribute_set_main>
</rewrite>
</adminhtml>
</blocks>
<helpers>
<netgr_gradd>
<class>Netgr_Gradd_Helper</class>
</netgr_gradd>
</helpers>
</global>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<netgr_gradd after="Mage_Adminhtml">Netgr_Gradd_Adminhtml</netgr_gradd>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Таково содержание adminhtml.xml :
<?xml version="1.0"?>
<config>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<netgr_gradd before ="Mage_Adminhtml">Netgr_Gradd_Adminhtml</netgr_gradd>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Таково содержание Addgroup.php из моего квартала :
class Netgr_Gradd_Block_Adminhtml_Addgroup extends Mage_Adminhtml_Block_Catalog_Product_Attribute_Set_Main
{
protected function _construct() {
//This should just be a copy of catalog/product/attribute/set/main.phtml so you can edit it
$this->setTemplate('netgr/gradd/group.phtml');
}
public function _prepareLayout() {
$this->setChild('my_button',
$this->getLayout()->createBlock('adminhtml/widget_button')->setData(array(
'label' => Mage::helper('catalog')->__('Add Group'),
'onclick' => 'editSet.addGroupFront();',
'class' => 'add-group'
)));
return parent::_prepareLayout();
}
public function getYourButtonHtml() {
return $this->getChildHtml('my_button');
}
}
Это расширенный класс. и это содержание controllers/Adminhtml/AddgroupController.php :
<?php
class Netgr_Gradd_Adminhtml_AddgroupController extends Mage_Adminhtml_Controller_Action
{
public function indexAction(){
}
public function saveAction(){
echo 111;
}
}
Я создал шаблон, в котором я на самом деле выполняю функции ajax:
save : function() {
$('messages').update();
TreePanels.rebuildTrees();
var _validator = new Validation('set_prop_form', {onSubmit:false});
if( !_validator.validate() ) {
return;
}
editSet.req.attribute_set_name = $('attribute_set_name').value;
if (!editSet.req.form_key) {
editSet.req.form_key = FORM_KEY;
}
list_of_group = "";
$$(".add_new_frontend_group>a>span").each( function (val,i) {
list_of_group = list_of_group +"^"+ val.innerHTML;
});
alert('<?php echo $this->getMoveUrl() ?>');
var req = {data : Ext.util.JSON.encode(editSet.req)};
var con = new Ext.lib.Ajax.request('POST', 'http://attin.netlogiq.eu/magento_new/index.php/admo/netgr_gradd_adminhtml_addgroup/save', {
success:editSet.success,
failure:editSet.failure
}, req);
},
Этот материал является прототипом JS. С URL-адресом ajax что-то не так, он выдает мне страницу 404. Что не так с моим URL-адресом?
1 answers
Ну, то, как я работаю с Ajax в Magento/прототипе, выглядит так:
new Ajax.Request(url, {
method: 'post',
parameters: object,
onComplete: function(transport) {
//do stuff
}
}
Где URL-адрес должен быть URL-адресом контроллера Magento, установите значение
<?php echo $this->getUrl('controller_name/method_name') ?>
В вашем случае URL-адрес должен быть
$this->getUrl('netgr_gradd/addgroup/save') or $this->getUrl('addgroup/save')
Вы используете URL-адрес в запросе ajax, а не имя класса, поэтому в нем нет подчеркиваний, кроме тех, которые вы сами вставляете в свои имена, и вы устанавливаете свой маршрутизатор в каталог файлов, чтобы ваш каталог не отражался в ваших URL-адресах, поэтому adminhtml не должен быть в списке. url, я думаю (без глубокого анализа вашего xml с моей стороны).
Редактировать: на самом деле это может быть
$this->getUrl('adminhtml/addgroup/save')
Похоже, вы назвали свой маршрутизатор adminhtml.