扩展/覆盖Magento中的扩展

时间:2012-08-31 14:21:25

标签: php class magento magento-1.7

我安装了扩展程序,我想从我的模块中使用它的功能。该扩展中的postAction是所有发生的地方。它使用youtube API检索视频信息并将其保存在Magento EAV数据模型的多个表中。

我已经创建了一个功能模块,我只使用一个按钮和一个文本框来测试youtube API函数,以发送一些搜索词。但现在我想自动使用扩展功能来进行调用并填写必要的表,而不是从我的代码手动完成所有操作。

所以我需要(或想要?或必须?)设置对postAction的调用或扩展或覆盖它。我迷失在这里,我是Magento和PHP的新手,所以我对于该做什么并不清楚。

这是我要打电话的课程:

/**
 * Youtube Upload Controller
 */
class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}

在其中的postAction函数:

/**
 * Get customer video
 */
public function postAction() {
    $data = new Varien_Object($this->getRequest()->getPost());
....
}

我已阅读有关这些链接的信息,但我不清楚我必须做些什么。遵循Observer模式?也许只是自己创建post调用并以某种方式添加$data结构,以便可以在通话中使用它?感谢

编辑: 这是我迄今为止的代码,由@Francesco提出建议。函数printVideoEntry是从其他函数调用的,在每个函数内部,对于现在遍历目录的前3个产品。

<?php
class Dts_Videotestimonials_Model_SearchVideo extends Mage_Core_Model_Abstract
{
    public $search_term;
    private $productModel;

    function printVideoEntry($videoEntry, $_product, $tabs = "")
    {
        # get user data
        $user = Mage::getSingleton('admin/session');
        $userName = $user->getUser()->getFirstname();
        $userEmail = $user->getUser()->getEmail();
        $data = array(
            "ProductId" => $_product->getId(),
                        "AuthorEmail" => $userEmail,
                        "AuthorName" => $userName,
                        "VideoLink" => $videoEntry->getVideoWatchPageUrl(),
                        "VideoType"  => "link",
                        "Title" => $videoEntry->getVideoTitle(),
                        "Comment" => "this is a comment"
        );
        $actionUrl = Mage::getUrl('vidtest/youtube/post');
        Mage::app()->getResponse()->setRedirect($actionUrl, $data);
    }
}

2 个答案:

答案 0 :(得分:1)

要给出一个明确的答案并不容易......问题不明确,因为我们不知道youtube扩展如何工作。 (代码是加密还是打开?)

调用控制器的操作

如果您只想调用postAction,可以使用_redirect($path, $arguments=array())方法。 (在Mage/Core/Controller/Varien/Action.php中定义)

  1. $path被定义为'moduleName / controllerName'
  2. $arguments=array()被定义为couple parameterName =&gt;值。
  3. <强>实施例

    $this->_redirect('checkout/cart', array('Pname' => $pValue, ... );
    

    仅当您从控制器中调用它时才会起作用...

    您可以在此处找到有关_redirect的更多信息:magento _redirect with parameters that have + or /

    如果您想从模型或任何不同的文件进行重定向,您需要以这种方式调用网址:

    Mage::app()->getResponse()->setRedirect(Mage::getUrl($path, $arguments=array()));
    

    所以上面的例子。 becames:

    Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart', array('Pname' => $pValue, ... ));
    

    <强>观察

    使用Observer意味着向模块(观察者)添加一个新模型,并在此类中写入一个在某些事件下执行操作的方法,可能您想调用yt扩展的某些模型/方法。

    然后你必须在你的config.xml中声明这个东西,你将观察者方法绑定到某个事件(任何预定义的甚至在适合你的Magento中,或者如果你需要你应该创建你自己的重写magento类...)

    观察员示例

    • PackageName / ModuleName / Model / Observer.php

      class PackageName_ModuleName_Model_Observer {
      
          public function myActionMethod(Varien_Event_Observer $observer) {
      
              // Code ... 
              // just a very indicative example
              $model = Mage::getModel('youtubeExtension/Model....').method();
      
          }
      
      }
      
    • PACKAGENAME /模块名的/ etc / config.xml中

      <config>
      ....
      <global>
          <events>
              <EventName>
                  <observers>
                      <moduleName_observer>
                          <type>singleton</type>
                          <class>PackageName_ModuleName_Model_Observer</class>
                          <method>myActionMethod</method>
                      </moduleName_observer>                         
                  </observers>
              </EventName>
          </events>
      </global>
      ....
      

    显然根据您的包/模块/方法名称更改EventName和所有假名称

    最困难的是找到适合你的合适活动...... 每当你在magento代码中看到类似Mage::dispatchEvent('EventName', Parameters);的内容时,这就是一个事件。

    您可以找到默认Magento事件Here

    的列表

    我希望它可以帮到你

答案 1 :(得分:1)

试着扩展你的模块类

class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}

示例     AW1_Vidtest1_YoutubeController1类扩展AW_Vidtest_YoutubeController {     .....     }

,其中  AW1_Vidtest1_YoutubeController1 Aw1是命名空间Vidtest1是您的模块名称YoutubeController1是您希望使用后期操作的控制器。

希望它对你有用