magento方法保存引用网址和关键字

时间:2012-09-26 10:44:03

标签: model-view-controller magento controller magento-1.7 referer

我的目标是在我们商店的任何页面上输入时保存数据库的网址引用和关键字。我checked this question and its answer试图了解我的问题。

我所遵循的方法是:

  1. 要有一个会粘在默认布局上的块,以便它将被加载到每个页面上(已测试,正在运行)。该块将使用以下代码读取引用程序:

    $ request ['url'] = $ this-> getRequest() - > getServer('HTTP_REFERER');

  2. 然后调用函数将$ request传递给控制器​​: 这一步我仍然不知道怎么做,使用重定向?或者可能通过调用dispatchEvent和具有postAction函数的控制器?

    //on the phtml file
    <div>
         <?php
              $request['url'] = getRequest()->getServer(‘HTTP_REFERER’);
              Mage::dispatchEvent("allpagescontroller", $request);
         ?>
    </div>
    
  3. 控制器将实例化我的模型并调用setter来更新/插入所需的值

    //on the controller
    function postAction ($params)
    {
        $referer = $this->getRequest()->getPost();
    }
    
  4. 在模型上,我将获得所有适当的代码来进行CRUD操作

  5. 这是对的吗?我正在尝试按照这些步骤遵循Magento MVC方法。现在我已经在phtml文件上找到了所有代码。我正在获取引用,拆分它并实例化模型以保存所有内容。但我知道这不正确。

    现在在config.xml上我有:

    <?xml version="1.0"?>
    <config>
        <modules>
            <Dts_Allpages>
                <version>0.1.0</version>
            </Dts_Allpages>
        </modules>
        <global>
          <models>
              <allpages>
                  <class>Dts_Allpages_Model</class>
                  <resourceModel>allpages_mysql4</resourceModel>
              </allpages>
              <allpages_mysql4>
                      <class>Dts_Allpages_Model_mysql4</class>
                    <entities>
                      <keywords>
                          <table>keywords</table>
                      </keywords>
                      <referencedpages>
                          <table>referencedpages</table>
                      </referencedpages>
                  </entities>
              </allpages_mysql4>
            </models>
            <blocks>
                <allpages>
                    <class>Dts_Allpages_Block</class>
                </allpages>
            </blocks>
            <helpers>
                <allpages>
                    <class>Dts_Allpages_Helper</class>
                </allpages>
            </helpers>
            <resources>
                <allpages_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </allpages_write>
                <allpages_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </allpages_read>
            </resources>
        </global>>
        <frontend>
          <routers>
              <allpages>
                  <use>standard</use>
                  <args>
                      <module>Dts_Allpages</module>
                      <frontName>allpages</frontName>
                  </args>
              </allpages>
          </routers>
            <layout>
                <updates>
                    <allpages>
                        <file>allpages.xml</file>
                    </allpages>
                </updates>
            </layout>
        </frontend>  
    </config>
    

2 个答案:

答案 0 :(得分:0)

就Magento MVC流而言,您的逻辑不正确。模板是程序流程的最后一站,你不应该在模板中插入任何逻辑,因为你的系统会变成不稳定的混乱。

您尝试实现的逻辑根本不需要任何视图。它甚至不需要控制器。如您所知,Magento使用Event-Observer模式,您的任务就是要求它。

您应该创建Observer并从初始请求流中侦听某些事件。您可以监听在每个页面请求上触发的任何事件,但它不应该太早 - 当系统本身尚未初始化时,并且它应该不会太晚,当某些其他系统逻辑可以< em>重定向,转发或对引荐来源进行一些更改。我认为controller_action_predispatch符合您的需求。

在Observer中,您可以使用模型层获取HTTP_REFERER并将其保存在数据库中。

答案 1 :(得分:0)

observer

中使用此代码
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer()  : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;