【问题标题】:magento approach saving referer url and keywordsmagento 方法保存引用 url 和关键字
【发布时间】:2012-09-26 10:44:02
【问题描述】:

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

我遵循的方法是:

  1. 拥有一个将坚持默认布局的块,以便将其加载到每个页面上(经过测试,正在工作)。该块将使用以下代码读取引用:

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

  2. 然后调用函数将 $request 传递给控制器​​: 这一步我还是不知道怎么做,用redirect?或者可能通过调用 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>

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在途中再次遇到 EventObservers...我怀疑这是否是正确的路径。不是你为我清除的。所以我不需要添加块、模板或控制器,只需添加事件观察器的所有逻辑。将对其进行测试。
    • 我不知道如何监听所有页面的预调度事件。
    • @Yaroslav - 这是您应该插入自定义模块的配置示例&lt;events&gt;&lt;controller_action_predispatch&gt;&lt;observers&gt;&lt;allpages&gt;&lt;class&gt;allpages/observer&lt;/class&gt;&lt;method&gt;saveReferrer&lt;/method&gt;&lt;/allpages&gt;&lt;/observers&gt;&lt;/controller_action_predispatch&gt;&lt;/events&gt; 您应该使用 saveReferrer 方法创建一个观察者模型,并且应该在每个页面请求时触发它
    • 谢谢。我很接近这一点,因为几周前我正在为事件/观察者模式而苦苦挣扎。这就是在我的评论中我说的“在我的路上再次出现 EventObserver ......”。将测试并返回给您。
    • 我遇到了一个错误,设法通过将礼仪&lt;allpages&gt; 替换为&lt;controller_action_before&gt; 来解决它。那样可以么?如果不是,我在 Dts\AllPages\Model\Observer.php 上搜索 Observer.php 时收到的文件未包含在内
    【解决方案2】:

    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;
    

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 2011-11-14
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多