我安装了扩展程序,我想从我的模块中使用它的功能。该扩展中的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);
}
}
答案 0 :(得分:1)
要给出一个明确的答案并不容易......问题不明确,因为我们不知道youtube扩展如何工作。 (代码是加密还是打开?)
调用控制器的操作
如果您只想调用postAction,可以使用_redirect($path, $arguments=array())
方法。 (在Mage/Core/Controller/Varien/Action.php
中定义)
$path
被定义为'moduleName / controllerName'$arguments=array()
被定义为couple parameterName =&gt;值。 <强>实施例强>
$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是您希望使用后期操作的控制器。
希望它对你有用