0

我的目标是在我们商店的任何页面上输入时将 url 引用和关键字保存在数据库中。我检查了这个问题及其答案,试图对我的问题有所了解。

我遵循的方法是:

  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. 控制器将实例化我的模型并调用设置器来更新/插入需要的值

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

它是否正确?我正在尝试按照这些步骤来遵循 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>
4

2 回答 2

0

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

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

您应该创建您的观察者并从初始请求流中侦听一些事件。您可以侦听在每个页面请求上触发的任何事件,但不应太早 - 当系统本身尚未初始化时,也不应太晚,此时某些其他系统逻辑可以重定向转发或对referrer进行一些更改。我想controller_action_predispatch会满足你的需要。

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

于 2012-09-26T11:33:15.350 回答
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;
于 2015-04-14T09:56:47.597 回答