我应该从哪里查找来自ajax调用url的文件[Magento]

时间:2015-01-26 12:35:43

标签: ajax magento

在ajax调用中,我看到这个url是通过控制台调用的。

http://example.net/index.php/checkout/cart/add/uenc/random-key/product/527/form_key/random-key/

我的问题是我应该在哪里寻找这个?我在模板checkout/cartapp/design/frontend/default/mytheme/template/中找到了app/code/core/mage/

4 个答案:

答案 0 :(得分:2)

虽然这里有两个非常好的答案,但是对Magento的URL有广泛的了解

注意:http://www.example.com/[index.php]/是您的Magento网址。根据您的Magento配置,您可能会或可能不会在URL中找到index.php。 {text}是一个可以变化的文本,具体取决于上下文。 [text]是一个可以出现或不出现的文本,具体取决于上下文。

http://www.example.com/[index.php]/{module_frontname}/{[controller]}/{[action]}/{[parameter_name_1]}/{[value_of_parameter_name_1]}/{[parameter_name_2]}/{[value_of_parameter_name_2]}/ (...) /{[parameter_name_n]}/{[value_of_parameter_name_n]}

所以,从我们的Magento基地URL开始,这里是部分及其含义,以及您可以在哪里找到它们。

第1部分:module_frontname:模块的“前端名称”。该值可在app/code/{codePool}/{NamespaceOfModule}/{ModuleName}/etc/config.xml中找到。 在这些文件中,您将找到一个或多个<frontName>节点,用于定义模块前端名称。

在您的情况下 ,这是一个核心模块,'Mage_Checkout',因此它位于codePool核心。 (如果你想了解更多关于codePool的内容,我可以写更多关于它的内容,但是我们可以坚持下去对这里的内容进行抽样)。 如果您查看文件app/code/core/Mage/Checkout/etc/config.xml,您确实会找到这些代码行

<frontend>
    <routers>
        <checkout>
            <use>standard</use>
            <args>
                <module>Mage_Checkout</module>
                <frontName>checkout</frontName>
            </args>
        </checkout>
    </routers>
</frontend>

其中定义了使用http://www.example.com/[index.php]/checkout/对此Magento执行的所有请求都将由模块Mage_Checkout及其控制器处理。

第2部分:控制器。控制器很容易在Magento上发现。它们位于app/code/{codePool}/{NamespaceOfModule}/{ModuleName}/controllers/的文件夹和子文件夹中。文件的名称和文件中的类对应于URL的控制器部分。因此,如果您发现此URL http://www.example.com/[index.php]/module_frontname/controller/,则控制器文件将命名为ControllerController.php,类名称为NamespaceOfModule_ModuleName_ControllerController。因此,url的部分将以大写形式显示第一个字母,并以Controller为后缀。  http://www.example.com/[index.php]/module_frontname/something/ - &gt; SomethingController.php / NamespaceOfModule_ModuleName_SomethingController http://www.example.com/[index.php]/module_frontname/else/ - &gt; ElseController.php / NamespaceOfModule_ModuleName_ElseController

请注意:每个默认值都有一个控制器。该控制器是控制器IndexController。因此,如果您找到类似http://www.example.com/[index.php]/module_frontname/的URL,这意味着它隐式调用控制器IndexController,这就是为什么在我的第一个url示例中将此部分设置为可选的原因。

在您的情况下 :您确实会在app/code/core/Mage/Checkout/controller/CartController.php中找到一个类Mage_Core_CartController的文件。

第3部分:行动。这个也很容易被发现。在给定的控制器类中,动作是一个以“Action”为后缀的函数。 这一部分对案例是明智的,请注意aCtionAction将处理网址http://www.example.com/[index.php]/module_frontname/controller/aCtion/(请注意他的资本C)。 因此,此URL http://www.example.com/[index.php]/module_frontname/controller/action/将在控制器controllerController中调用名为actionAction的函数。 同样的方式:http://www.example.com/[index.php]/module_frontname/controller/some/ - &gt;将由someAction函数处理。

请注意:相同的默认行为适用于操作而不是控制器。然后是indexAction()中的默认操作。所以当你调用http://www.example.com/[index.php]/module_frontname/时,你正在到达控制器IndexController,还有它的indexAction。如果你调用url http://www.example.com/[index.php]/module_frontname/controller,你将到达控制器controllerController的indexAction。 请注意:3个第一部分的顺序和含义永远不会改变。 因此,如果您想调用默认控制器IndexController的特定操作,则必须在您的网址中指定控制器http://www.example.com/[index.php]/module_frontname/index/some,因为如果您尝试以http://www.example.com/[index.php]/module_frontname/some的方式访问它,您将获得动作indexAction控制器SomeController而不是动作someAction的控制器IndexController!

在你的情况下 :如果你打开文件app/code/core/Mage/Checkout/controller/CartController.php,你确实会在第191行找到一个函数addAction。

public function addAction()
{
  // (... lots of code come here which I'm not going to reproduce)
}

第4部分到n :这些基本上是在Zend Framework酱获取参数。 http://www.example.com/[index.php]/module_frontname/controller/action/param1/value1严格等于http://www.example.com/[index.php]/module_frontname/controller/action?param1=value1http://www.example.com/[index.php]/module_frontname/controller/action/param1/value1/param2/value2的方式与http://www.example.com/[index.php]/module_frontname/controller/action?param1=value1&param2=value2相同。这将始终通过pair parameter_name / parameter_value

进行

请注意:关于默认操作/控制器的第二个注释中的说明也适用于此处。因此,如果你想在控制器IndexController中的actionAction中有一个参数,那么你必须在完整的http://www.example.com/[index.php]/module_frontname/index/index/param1/value1中写入url,因为这个url http://www.example.com/[index.php]/module_frontname/param1/value1将匹配控制器Param1Controller和action1Action而不是控制器IndexController和带有请求参数的动作indexAction!

在您的情况下 :uenc / random-key / product / 527 / form_key / random-key / 意味着你有那个

$_GET['uenc'] == 'random-key'
$_GET['product'] == '527'
$_GET['form_key'] == 'random-key'

确实在上面提到的文件中,你会在函数cartAction()中找到那些代码行:

$params = $this->getRequest()->getParams();
try {
    if (isset($params['qty'])) {
        // (... lots of code come here which I'm not going to reproduce)
    } 
} catch(Mage_Core_Exception $e) {
    // (... lots of code come here which I'm not going to reproduce)
}
// (... lots of code come here which I'm not going to reproduce)

在您的情况下 (这是最后一个,我保证):您的假设几乎完全是在尝试查找模板。但遗憾的是,这不是一个视觉动作,所以它不会显示任何内容,只是处理一个请求将产品添加到购物车,然后重定向到另一个URL,如第251行的cartAction状态的最后一行

$url = $this->_getSession()->getRedirectUrl(true);
if ($url) {
    $this->getResponse()->setRedirect($url);
} else {
    $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
}

希望这个完整的Magento URL解释能够帮助某人:)

答案 1 :(得分:1)

这应该是app/code/core/Mage/Checkout/controllers/CartController.phpaddAction方法。

答案 2 :(得分:1)

http://example.net/index.php/checkout/cart/add/uenc/random-key/product/527/form_key/random-key/

你可以在Mage / Checkout / controllers / CartController.php中找到它 在给定的文件中,您将找到addAction()

所以你的网址会是这样的 结帐 - 模块名称 购物车 - 控制器名称 添加 - 功能名称和其他参数。

答案 3 :(得分:1)

http://example.net/index.php/checkout/cart/add/uenc/random-key/product/527/form_key/random-key/

结帐:模块名称(使用此名称查找模块)

购物车:购物车控制器(目标模块内部寻找Controllers文件夹&gt; CartController.php文件)

添加:添加动作方法(并在上面的控制器类中查找addAction()方法)